Ch07 §04 Transformer 与注意力 · 讲解稿¶
章节定位: Ch07 核心。教"Transformer 工作原理": 注意力机制 / Multi-Head / 位置编码 / Encoder-Decoder / BERT / GPT / 现代变体 (RoPE / Flash Attention / Mamba / MoE)。 承接: Ch06 §04 函数式编程 → Ch07 §04 Transformer 走向: Ch07 §05 预训练大模型 (BERT / GPT) → Ch17 §02 高效架构 (Flash Attn) → Ch19 §04 Agent 篇幅: ~4800 字 / 阅读 14 分钟 / 讲解 30-35 分钟
一 · 一句话总览¶
Transformer = 注意力机制堆叠: 自注意力让每个 token 看所有 token → Multi-Head 多子空间 → 位置编码注入顺序 → Encoder-Decoder 处理序列。BERT 用 Encoder, GPT 用 Decoder, LLaMA/Claude 用 Decoder 优化版。
二 · 心智模型¶
把 Transformer 想成"会议讨论": - 每个 token 是参会者 - 自注意力 = 每人都能看其他人的笔记 - Multi-Head = 不同角度看笔记 (语法 / 语义 / 上下文) - 位置编码 = 座位编号 (无编号则顺序无意义)
三 · 章节主线 (5 段)¶
第 1 段 · 自注意力机制 (10 分钟)¶
3.1.1 注意力起源¶
Seq2seq (2014) 用 RNN 做翻译,瓶颈: - 长依赖丢失 (LSTM 100+ token 后效果差) - 串行计算 (无法并行)
Bahdanau Attention (2015): 解码时看编码所有位置, 权重学习。
3.1.2 自注意力公式¶
输入 \(X \in \mathbb{R}^{n \times d}\), 学习三个矩阵:
缩放点积注意力:
| 符号 | 含义 |
|---|---|
| \(Q\) | query, "我想要什么" |
| \(K\) | key, "我提供什么" |
| \(V\) | value, "实际内容" |
| \(\sqrt{d_k}\) | 缩放因子, 防 softmax 饱和 |
3.1.3 复杂度¶
- 时间: \(O(n^2 d)\)
- 空间: \(O(n^2)\) (注意力矩阵)
- 瓶颈: 长序列 (n^2 不可承受)
3.1.4 PyTorch 实现¶
import torch
import torch.nn.functional as F
def attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = Q @ K.transpose(-2, -1) / (d_k ** 0.5)
if mask is not None:
scores = scores.masked_fill(mask == 0, float('-inf'))
attn = F.softmax(scores, dim=-1)
return attn @ V
第 2 段 · Multi-Head 与位置编码 (10 分钟)¶
3.2.1 Multi-Head Attention¶
- \(K\) 个 head, 各看不同子空间
- 拼接后线性映射
- 典型: \(d_{\text{model}} = 512\), \(K = 8\), 每头 64 维
3.2.2 位置编码 (Positional Encoding)¶
自注意力是置换等变 (无位置概念), 必须注入位置。
正弦位置编码 (Vaswani 2017):
RoPE (Su 2021, LLaMA / Mistral 用):
其中 \(R_m\) 是旋转矩阵。利用旋转群性质: \(\langle q_m, k_n \rangle = \langle R_m q, R_n k \rangle\) 只依赖相对位置 \(m - n\)。
ALiBi (Press 2022): 简单线性偏置, 不占参数。
3.2.3 现代位置编码¶
| 编码 | 提出 | 特点 |
|---|---|---|
| Sinusoidal | 2017 | 原始, 外推差 |
| Learned | BERT | 可学, 限长 |
| RoPE | 2021 | 相对位置, LLaMA 用 |
| ALiBi | 2022 | 简单, 百万级 |
| YaRN | 2023 | RoPE 扩展到 128K+ |
第 3 段 · Transformer 块 (10 分钟)¶
3.3.1 Encoder Block¶
- 残差连接 (ResNet 思路)
- Pre-LN (现代) vs Post-LN (原版)
- FFN 通常 4× 维度 (d → 4d → d)
3.3.2 Decoder Block¶
Encoder + Masked MHA (只看左侧) + Cross-Attention (Encoder-Decoder)。
class TransformerBlock(nn.Module):
def __init__(self, d, nhead):
super().__init__()
self.ln1 = nn.LayerNorm(d)
self.mha = nn.MultiheadAttention(d, nhead)
self.ln2 = nn.LayerNorm(d)
self.ffn = nn.Sequential(
nn.Linear(d, 4*d), nn.GELU(),
nn.Linear(4*d, d)
)
def forward(self, x, mask=None):
x = x + self.mha(self.ln1(x), self.ln1(x), self.ln1(x), attn_mask=mask)[0]
x = x + self.ffn(self.ln2(x))
return x
3.3.3 GPT vs BERT¶
| 模型 | 结构 | 任务 | 用途 |
|---|---|---|---|
| BERT | Encoder | MLM + NSP | 理解 |
| GPT | Decoder (masked) | Next token | 生成 |
| T5 | Enc-Dec | Seq2seq | 通用 |
| LLaMA | Decoder (RoPE, SwiGLU) | Next token | 开源 LLM |
第 4 段 · 高效 Transformer (10 分钟)¶
3.4.1 复杂度瓶颈¶
\(O(n^2 d)\) 的注意力是主要瓶颈, 长序列 (32K+) 无法承受。
3.4.2 稀疏注意力¶
| 方法 | 复杂度 | 适用 |
|---|---|---|
| Sliding Window (Mistral) | \(O(n w)\) | 长序列 |
| Global + Local (BigBird) | \(O(n \sqrt{n})\) | 长序列 |
| Longformer | \(O(n w)\) | 长文档 |
3.4.3 线性注意力¶
\(K V\) 先乘, 避免 \(Q K^T\) 的 \(n^2\):
代表: Performer (FAVOR+), Linformer (低秩投影)。
3.4.4 Flash Attention (Dao 2022)¶
不存中间 \(n^2\) 注意力矩阵, 分块计算, 减少 HBM IO:
加速 2-4×, 内存大幅下降。Flash Attention 2 (2023) + 3 (2024) 持续优化。
3.4.5 Mamba / SSM (Gu & Dao 2023)¶
替代注意力, 选择性状态空间模型:
- 线性复杂度 \(O(n)\)
- 选择性扫描 (输入依赖)
- 硬件感知并行算法
- Mamba-2 (2024) 结构化状态空间
3.4.6 MoE (Mixture of Experts)¶
FFN 替换为多个专家, 路由选择:
- Mixtral 8x7B (2024)
- DeepSeek-V3 (2025): 671B 参数, 37B 激活
第 5 段 · 训练与对齐 (8 分钟)¶
3.5.1 预训练目标¶
MLM (BERT): 随机 mask 15% token 预测。
CLM (GPT): 下一个 token 预测 (next-token prediction, NTP)。
3.5.2 SFT (Supervised Fine-Tuning)¶
用标注数据微调: $\(\mathcal{L}_{\text{SFT}} = -\sum_{(x, y) \in D} \log P(y | x; \theta)\)$
3.5.3 RLHF (Ouyang 2022)¶
三步: 1. SFT 2. 训奖励模型 (RM) 3. PPO 强化学习
3.5.4 DPO (Rafailov 2023)¶
直接偏好优化, 不需要 RM:
3.5.5 GRPO (DeepSeek-R1 2025)¶
Group Relative Policy Optimization, 纯规则奖励, 推理模型 (o1 / R1) 关键。
3.5.6 LoRA / PEFT (Hu 2022)¶
低秩适配: $\(\Delta W = A B, \quad A \in \mathbb{R}^{d \times r}, B \in \mathbb{R}^{r \times k}\)$
\(r \ll d\), 参数 < 1%, 训练快。
四 · 易错点 (8 条)¶
- 注意力是置换等变: 必须加位置编码。
- 缩放因子 \(\sqrt{d_k}\): 不可省, 防 softmax 饱和。
- Causal Mask: Decoder 自回归, 屏蔽右侧。
- Pre-LN vs Post-LN: Pre-LN 训练稳, Post-LN 性能略好。
- 多头 = 多子空间: 不是越多越好, 8-16 头常用。
- Flash Attention: 不改数学, 改 IO。
- RoPE 外推: \(\theta\) 缩放, 不是简单插值。
- RLHF KL 项: 防 reward hacking, 必须有。
五 · 跨章连接¶
| 章节 | 关联 |
|---|---|
| Ch06 §04 函数式编程 | FP 视角看 Transformer |
| Ch08 §04 Diffusion | 文本/图像 Diffusion 用 Transformer |
| Ch10 §03 视觉语言 | ViT / CLIP |
| Ch11 §05 VLA | VLA 用 Transformer backbone |
| Ch12 §03 GNN | 全连接图视角 |
| Ch17 §02 高效架构 | Flash Attention / Mamba |
| Ch19 §04 Agent | RLHF 对齐 Agent |
| Ch20 §05 BMI | 用 Transformer 解码神经信号 |
六 · 自测 5 题¶
- 缩放点积注意力公式?
- Multi-Head 优势?
- RoPE 原理?
- Pre-LN 与 Post-LN?
- RLHF 三步?
七 · 一句话总结¶
Transformer = 注意力 + 残差 + 位置 + 多头 + FFN, 堆叠 N 层。BERT (Encoder) / GPT (Decoder) 是两大主流。现代变体: RoPE / Flash Attention / Mamba / MoE / LoRA, 让 LLM 可扩展到万亿参数。对齐: SFT → RLHF → DPO → GRPO, 让模型与人类意图一致。
八 · 板书建议¶
[板书 1: 注意力]
Q K V = X · W
Attn = softmax(QK^T/√d) V
[板书 2: Multi-Head]
K 头拼接, 线性映射
[板书 3: 位置]
Sinusoidal / RoPE / ALiBi
[板书 4: 块]
LN → MHA → + → LN → FFN → +
[板书 5: 变体]
Flash Attn / Mamba / MoE / LoRA
九 · 参考资料¶
- Vaswani et al., "Attention Is All You Need", NeurIPS 2017
- Devlin et al., "BERT", NAACL 2019
- Radford et al., "GPT" 系列, OpenAI
- Su et al., "RoPE", 2021
- Hu et al., "LoRA", ICLR 2022
- Ouyang et al., "InstructGPT / RLHF", NeurIPS 2022
- Dao et al., "Flash Attention", NeurIPS 2022
- Gu & Dao, "Mamba", 2023
- Rafailov et al., "DPO", NeurIPS 2023
- DeepSeek, "GRPO / R1", 2025