Transformer 完整版离线学习手册
🧠 Transformer 完整架构图
Inputs (输入序列)
↓
Input Embedding + Positional Encoding
↓
🔷 Encoder 编码器 (N×)
Multi-Head Attention
多头自注意力
↓ Add & Norm
Feed Forward
前馈神经网络
↓ Add & Norm
↓ 重复 N 层 ↓
🔶 Decoder 解码器 (N×)
Masked Multi-Head Attention
掩码多头自注意力
↓ Add & Norm
Multi-Head Attention
交叉注意力 (Encoder-Decoder)
↓ Add & Norm
Feed Forward
前馈神经网络
↓ Add & Norm
↓ 重复 N 层 ↓
↓
Linear + Softmax
↓
Output Probabilities (输出概率)
来源:Attention Is All You Need (2017) | 论文设定: N=6, d_model=512, h=8
📌 基础总览(必背)
- 论文:Attention Is All You Need (2017)
- 架构:N 层 Encoder + N 层 Decoder(论文 N=6)
- 核心创新:完全基于自注意力,抛弃 RNN 循环
- 维度:模型维度 d_model=512,注意力头数 h=8,dk=dv=64
- 核心能力:并行计算、长距离依赖、全局建模
主流变体:
• BERT:仅 Encoder → 双向理解(分类、抽取、匹配)
• GPT:仅 Decoder → 单向生成(对话、续写、创作)
• T5 / BART:完整 Encoder-Decoder → 翻译、摘要、生成
📥 输入层完整解析:Embedding + 位置编码
1. 词嵌入 (Token Embedding)
将文本转为向量:词/子词 → d_model 维向量(512)
输入嵌入后会 乘以 √d_model 缩放,防止数值过小
2. 位置编码 (Positional Encoding)
Transformer 无时序感知,必须加入位置信息
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
- pos:词在序列中的位置
- i:向量维度索引
- 使用 sin/cos:能外推到更长序列、易于学习相对位置
3. 最终输入
最终特征 = Token Embedding + Positional Encoding
⚙️ Encoder 完整拆解(每层)
核心结构 多头自注意力 → Add&Norm → FFN → Add&Norm
1. 多头自注意力 (Multi-Head Attention)
第一步:缩放点积注意力
Attention(Q,K,V) = softmax( QK^T / √dk ) * V
- Q:查询,K:键,V:值
- √dk 缩放:防止点积过大导致 softmax 梯度消失
- softmax:得到注意力权重
第二步:多头机制 (Multi-Head)
- 将 Q/K/V 分为 h=8 个头,并行计算注意力
- 分头 → 注意力 → 拼接 → 线性投影
- 优势:捕捉不同位置、不同类型、不同子空间的依赖
2. 残差连接 + 层归一化 (Add & Norm)
LayerNorm( x + 子层输出 )
作用:解决深层网络梯度消失/爆炸,稳定训练
3. 前馈网络 (FFN)
FFN(x) = max(0, xW1 + b1) W2 + b2
- 两个线性层 + 一个ReLU激活
- 对每个位置独立做非线性变换,提升表达能力
- 论文:隐藏层维度 4×d_model = 2048
🔑 Decoder 完整拆解(每层)
三层注意力 掩码自注意力 → 交叉注意力 → FFN
1. 掩码多头自注意力 (Masked Multi-Head Attention)
- 使用上三角掩码矩阵
- 生成第 t 个词时,屏蔽 t 之后的所有未来词
- 保证自回归生成合法:只能看过去,不能看未来
2. 交叉注意力 (Encoder-Decoder Attention)
- Q:来自 Decoder 上一层
- K、V:来自 Encoder 最终输出
- 核心作用:让生成时刻对齐、关注输入序列的关键信息
3. 前馈网络 + Add&Norm
与 Encoder 完全一致
📤 输出层完整流程
- Decoder 最后一层输出
- 线性层:d_model → 词表大小(映射)
- Softmax:转为概率分布
- 取概率最大的词:Greedy Search
- 生成式常用:Beam Search(提升生成效果)
🎯 注意力机制全分类(面试必考)
| 注意力类型 |
位置 |
Q/K/V来源 |
作用 |
| 自注意力 |
Encoder |
全部来自输入 |
建模全局上下文 |
| 掩码自注意力 |
Decoder第一层 |
全部来自输出 |
防止看见未来token |
| 交叉注意力 |
Decoder第二层 |
Q来自Decoder,K/V来自Encoder |
对齐输入输出序列 |
🚀 Transformer 核心优势(对比RNN)
- 并行计算:RNN必须串行,Transformer可全序列同时处理
- 长距离依赖:注意力直接连接任意位置
- 全局感受野:每个token都能访问全序列
- 更易训练:残差+归一化,深层更稳定
- 灵活性极强:Encoder/Decoder可单独使用
🔁 训练 & 推理完整流程
训练阶段(Teacher Forcing)
- Decoder 输入:真实目标序列
- 一次前向传播计算全部位置损失
- 速度极快
推理阶段(自回归生成)
- Decoder 输入:上一步生成的结果
- 逐词生成,不能并行
- 逐次送入模型,直到结束符
📝 面试高频考点(直接背诵)
1. 为什么 Transformer 比 RNN 快?
→ 因为无循环依赖,可全序列并行计算。
2. 为什么要做 Q/K/V 三个矩阵?
→ Q 查,K 匹配,V 提取信息,提升注意力表达能力。
3. 为什么要缩放 QK^T / √dk?
→ 防止点积过大,softmax 进入饱和区,避免梯度消失。
4. 为什么需要位置编码?
→ Transformer 无时序和位置感知,必须注入位置信息。
5. 掩码注意力的作用?
→ 屏蔽未来token,保证生成时看不到后面的信息。
6. 交叉注意力的作用?
→ 让 Decoder 对齐 Encoder 的输入信息。
📌 核心公式速查(完整版)
1. 缩放点积注意力:
Attention(Q,K,V) = softmax( QK^T / √dk ) V
2. 多头注意力:
MultiHead(Q,K,V) = Concat(head1...headh) W^O
其中 headi = Attention( QW_i^Q, KW_i^K, VW_i^V )
3. 位置编码:
PE(pos,2i)=sin(pos/10000^(2i/d_model))
PE(pos,2i+1)=cos(pos/10000^(2i/d_model))
4. 前馈网络:
FFN(x) = max(0, xW1+b1) W2 + b2
5. 残差归一化:
LayerNorm( x + Sublayer(x) )
✅ Transformer 一句话总结
Transformer 是一种完全基于自注意力机制的编码器-解码器架构,通过并行计算、多头注意力、残差连接实现高效的全局序列建模,是当今所有大模型的基础底座。