Transformer架构详解
Transformer 架构详解
概述
Transformer 是 Google 团队在 2017 年论文《Attention Is All You Need》中提出的深度学习架构。它完全基于注意力机制,摒弃了传统的循环(RNN)和卷积(CNN)结构,成为当今几乎所有大语言模型(GPT、Claude、DeepSeek 等)的基础架构。
📄 摘要: 核心思想
Attention Is All You Need — 只用注意力机制就能完成序列到序列的转换任务,而且效果更好、训练更快。
为什么需要 Transformer?
传统模型的问题
在 Transformer 之前,序列处理任务(翻译、文本生成等)主要依赖 RNN 和 LSTM:
1 | |
| 问题 | 说明 |
|---|---|
| 串行计算 | 必须逐词处理,无法并行,训练速度慢 |
| 长距离依赖 | 句子太长时,前面的信息会”遗忘”(梯度消失) |
| 信息瓶颈 | 所有信息压缩到固定大小的隐藏状态中 |
Transformer 的解决方案
1 | |
| 优势 | 说明 |
|---|---|
| 完全并行 | 所有词同时计算,训练速度大幅提升 |
| 直接关联 | 任意两个词之间直接建立联系,不受距离限制 |
| 可扩展性 | 模型规模可以轻松扩大(堆叠更多层) |
整体架构
Transformer 采用经典的编码器-解码器(Encoder-Decoder) 结构:
graph LR
A[输入序列] --> B[编码器 ×6]
B --> |语义向量| C[解码器 ×6]
D[输出序列-已生成部分] --> C
C --> E[输出预测]
ℹ️ 信息: 架构参数(原始论文)
- 编码器层数:6 层
- 解码器层数:6 层
- 模型维度 $d_{model}$:512
- 注意力头数:8 个
- 前馈网络维度 $d_{ff}$:2048
核心组件一:注意力机制(Attention)
什么是注意力
注意力机制的本质是:对输入信息的不同部分分配不同的关注权重。
📋 示例: 类比
阅读”小明昨天买了一本书,他觉得很好看“时:
- 理解”他”→ 高度关注”小明”(指代关系)
- 理解”好看”→ 关注”书”(修饰对象)
- “昨天”→ 关注度较低(与当前词关系不大)
缩放点积注意力(Scaled Dot-Product Attention)
这是 Transformer 中注意力的基本计算单元。
三个核心向量:
| 向量 | 全称 | 含义 | 类比 |
|---|---|---|---|
| Q | Query(查询) | “我在找什么?” | 搜索关键词 |
| K | Key(键) | “我有什么标签?” | 文档标题 |
| V | Value(值) | “我的实际内容” | 文档内容 |
计算公式:
$$
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
$$
分步理解:
- $QK^T$(点积)— 计算 Query 与每个 Key 的相似度
- $\div \sqrt{d_k}$(缩放)— 防止点积值过大导致 softmax 梯度消失
- softmax(归一化)— 将相似度转为概率权重(总和为 1)
- $\times V$(加权求和)— 用权重对 Value 加权,得到最终输出
💡 提示: 形象理解
就像在图书馆找书:
- 你带着问题(Q) 去搜索
- 每本书有一个标签(K)
- 你比较问题和每个标签的相关程度
- 然后按相关程度,提取每本书的内容(V) 做加权混合
自注意力(Self-Attention)
当 Q、K、V 都来自同一个输入序列时,就是自注意力。每个词都在”关注”同一句话中的其他词。
示例: 处理句子”The animal didn’t cross the street because it was too tired”
1 | |
自注意力让模型学会了it 指代 animal 这种语义关系。
核心组件二:多头注意力(Multi-Head Attention)
为什么需要多头?
单个注意力只能捕捉一种关系模式。多头注意力让模型同时从多个角度理解文本。
📋 示例: 类比
分析”张三在北京的公司做了一个优秀的项目”:
- 头 1 关注:谁做的?→ 张三
- 头 2 关注:在哪做的?→ 北京
- 头 3 关注:做了什么?→ 项目
- 头 4 关注:做得怎样?→ 优秀
计算过程
graph TD
A[输入] --> B1[头1: Q1,K1,V1]
A --> B2[头2: Q2,K2,V2]
A --> B3[...]
A --> B4[头8: Q8,K8,V8]
B1 --> C1[注意力1]
B2 --> C2[注意力2]
B3 --> C3[...]
B4 --> C4[注意力8]
C1 --> D[拼接 Concat]
C2 --> D
C3 --> D
C4 --> D
D --> E[线性变换]
E --> F[输出]
公式:
$$
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, …, \text{head}_h)W^O
$$
$$
\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
$$
每个头使用独立的投影矩阵 $W_i^Q$、$W_i^K$、$W_i^V$,学习不同的注意力模式,最后拼接结果并做线性变换。
核心组件三:位置编码(Positional Encoding)
为什么需要位置编码?
Transformer 的注意力机制是位置无关的——“我爱你”和”你爱我”在注意力计算中没有区别。因此需要显式地注入位置信息。
正弦余弦编码
原始 Transformer 使用固定的正弦/余弦函数生成位置编码:
$$
PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)
$$
$$
PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)
$$
- $pos$:词在句子中的位置(0, 1, 2, …)
- $i$:向量维度的索引
- $d_{model}$:模型维度(512)
特点:
| 特性 | 说明 |
|---|---|
| 唯一性 | 每个位置有唯一的编码向量 |
| 相对关系 | 位置间的距离可以通过线性变换表示 |
| 可外推 | 理论上可以处理训练时没见过的更长序列 |
| 无需学习 | 固定公式,不占用模型参数 |
与输入嵌入的结合方式:直接相加。
$$
\text{输入} = \text{词嵌入(Embedding)} + \text{位置编码(PE)}
$$
📝 注意: 现代改进
后续模型采用了更先进的位置编码方案:
- 可学习位置编码(GPT 系列)— 位置编码作为可训练参数
- RoPE 旋转位置编码(LLaMA、DeepSeek)— 将位置信息融入注意力计算
- ALiBi(BLOOM)— 基于距离的注意力偏置
核心组件四:前馈神经网络(FFN)
每一层注意力之后,都跟着一个逐位置的前馈网络:
$$
\text{FFN}(x) = \text{ReLU}(xW_1 + b_1)W_2 + b_2
$$
- 两层全连接:$d_{model}(512) \to d_{ff}(2048) \to d_{model}(512)$
- 先升维再降维,中间用 ReLU 激活
- 每个位置独立计算(不同位置共享参数)
💡 提示: 作用
注意力机制负责”信息汇聚”(词与词之间的交互),FFN 负责”信息变换”(对每个位置的特征做非线性变换),两者互补。
核心组件五:残差连接与层归一化
每个子层(注意力或 FFN)都包裹了残差连接(Residual Connection) 和层归一化(Layer Normalization):
$$
\text{output} = \text{LayerNorm}(x + \text{Sublayer}(x))
$$
1 | |
| 组件 | 作用 |
|---|---|
| 残差连接 | 缓解深层网络的梯度消失问题,让信息可以”跳过”子层直接传递 |
| 层归一化 | 稳定训练过程,加速收敛 |
编码器结构
编码器由 6 个相同的层 堆叠而成,每层包含两个子层:
1 | |
编码器特点:
- 自注意力是双向的,每个词能看到所有位置
- 6 层堆叠逐步加深对输入的理解
- 最终输出一组上下文相关的向量表示
解码器结构
解码器同样由 6 个相同的层 堆叠,每层包含三个子层:
1 | |
掩码自注意力(Masked Self-Attention)
生成第 $t$ 个词时,只允许关注位置 1 到 $t-1$,通过掩码矩阵实现:
1 | |
$-\infty$ 经过 softmax 后变为 0,从而屏蔽未来位置的信息。
交叉注意力(Cross-Attention)
- Q 来自解码器当前层
- K、V 来自编码器最终输出
这让解码器在生成每个词时,都能”查阅”编码器对输入的完整理解。
输出层
解码器的输出经过最后两步转换为词的预测:
- 线性层 — 将解码器输出映射到词汇表大小的向量
- Softmax — 转换为概率分布,选择概率最高的词作为预测
$$
P(\text{下一个词}) = \text{softmax}(W \cdot h_{decoder} + b)
$$
Transformer 的三种变体
| 架构 | 结构 | 代表模型 | 适用任务 |
|---|---|---|---|
| Encoder-Only | 仅编码器 | BERT、RoBERTa、ERNIE | 文本分类、命名实体识别、情感分析 |
| Decoder-Only | 仅解码器 | GPT 系列、LLaMA、Claude、DeepSeek | 文本生成、对话、代码生成 |
| Encoder-Decoder | 完整结构 | T5、BART、mBART | 机器翻译、文本摘要、问答 |
⚠️ 重要: 当前趋势
Decoder-Only 架构已成为绝对主流。 GPT-4、Claude、Gemini、DeepSeek 等顶尖大模型都采用此架构。原因是:
- 架构更简单,易于扩展
- 预训练目标(下一词预测)天然适配
- 通过 Prompt 即可适应多种任务,无需编码器
训练细节
损失函数
使用交叉熵损失,衡量模型预测的词概率分布与真实词之间的差距。
优化器
使用 Adam 优化器,配合特殊的学习率调度策略(Warmup):
$$
lr = d_{model}^{-0.5} \cdot \min(step^{-0.5}, \ step \cdot warmup_steps^{-1.5})
$$
先线性增大学习率(warmup),再按步数的平方根衰减。
正则化
| 技术 | 说明 |
|---|---|
| Dropout | 注意力权重和 FFN 输出施加 dropout($p=0.1$) |
| Label Smoothing | 标签平滑($\epsilon=0.1$),防止过度自信 |
总结
Transformer 核心组件速览
| 组件 | 作用 | 关键公式/机制 |
|---|---|---|
| 自注意力 | 捕捉序列内部的依赖关系 | $\text{softmax}(QK^T/\sqrt{d_k})V$ |
| 多头注意力 | 多角度理解文本 | 多组 Q/K/V 并行计算后拼接 |
| 位置编码 | 注入词序信息 | 正弦/余弦函数 |
| 前馈网络 | 逐位置特征变换 | 两层全连接 + ReLU |
| 残差 + LayerNorm | 稳定深层训练 | $\text{LN}(x + \text{Sublayer}(x))$ |
Transformer 的历史地位
graph LR
A[Transformer 2017] --> B[BERT 2018]
A --> C[GPT 2018]
B --> D[RoBERTa]
C --> E[GPT-2/3/4]
A --> F[T5 2019]
E --> G[ChatGPT 2022]
A --> H[ViT 2020]
G --> I[Claude / Gemini / DeepSeek ...]
Transformer 不仅革新了 NLP,还扩展到了计算机视觉(ViT)、语音(Whisper)、多模态(GPT-4V)等领域,是当代 AI 的基石架构。
相关链接
- 大模型学习路线
- LLM应用开发
- Prompt Engineering详解
- 编码器和解码器是什么