跳转至

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 = X W_Q, \quad K = X W_K, \quad V = X W_V\]

缩放点积注意力:

\[\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V\]
符号 含义
\(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

\[h_i = \text{Attention}(X W_Q^i, X W_K^i, X W_V^i)\]
\[\text{MHA}(X) = \text{Concat}(h_1, ..., h_K) W_O\]
  • \(K\) 个 head, 各看不同子空间
  • 拼接后线性映射
  • 典型: \(d_{\text{model}} = 512\), \(K = 8\), 每头 64 维

3.2.2 位置编码 (Positional Encoding)

自注意力是置换等变 (无位置概念), 必须注入位置。

正弦位置编码 (Vaswani 2017):

\[PE(pos, 2i) = \sin(pos / 10000^{2i/d})$$ $$PE(pos, 2i+1) = \cos(pos / 10000^{2i/d})\]

RoPE (Su 2021, LLaMA / Mistral 用):

\[q_m = R_m q, \quad k_n = R_n k\]

其中 \(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

x → LayerNorm → MHA → + → LayerNorm → FFN → +
                  ↘________________↗
                  ↘___________↗
  • 残差连接 (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\):

\[\text{Linear Attn}(Q, K, V) = \phi(Q) (\phi(K)^T V)\]

代表: Performer (FAVOR+), Linformer (低秩投影)。

3.4.4 Flash Attention (Dao 2022)

不存中间 \(n^2\) 注意力矩阵, 分块计算, 减少 HBM IO:

\[\text{IO}: O(n^2 d) \to O(n^2 d / B)\]

加速 2-4×, 内存大幅下降。Flash Attention 2 (2023) + 3 (2024) 持续优化。

3.4.5 Mamba / SSM (Gu & Dao 2023)

替代注意力, 选择性状态空间模型:

\[h_t = \bar A h_{t-1} + \bar B x_t, \quad y_t = C h_t\]
  • 线性复杂度 \(O(n)\)
  • 选择性扫描 (输入依赖)
  • 硬件感知并行算法
  • Mamba-2 (2024) 结构化状态空间

3.4.6 MoE (Mixture of Experts)

FFN 替换为多个专家, 路由选择:

\[\text{MoE}(x) = \sum_{i=1}^N G(x)_i E_i(x)\]
  • 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 强化学习

\[\mathcal{L}_{\text{RLHF}} = -\mathbb{E}_{(x, y) \sim \pi_\theta} [r(x, y) - \beta \cdot \text{KL}(\pi_\theta \| \pi_{\text{SFT}})]\]

3.5.4 DPO (Rafailov 2023)

直接偏好优化, 不需要 RM:

\[\mathcal{L}_{\text{DPO}} = -\log \sigma \left( \beta \log \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \log \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right)\]

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 条)

  1. 注意力是置换等变: 必须加位置编码。
  2. 缩放因子 \(\sqrt{d_k}\): 不可省, 防 softmax 饱和。
  3. Causal Mask: Decoder 自回归, 屏蔽右侧。
  4. Pre-LN vs Post-LN: Pre-LN 训练稳, Post-LN 性能略好。
  5. 多头 = 多子空间: 不是越多越好, 8-16 头常用。
  6. Flash Attention: 不改数学, 改 IO。
  7. RoPE 外推: \(\theta\) 缩放, 不是简单插值。
  8. 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 题

  1. 缩放点积注意力公式?
  2. Multi-Head 优势?
  3. RoPE 原理?
  4. Pre-LN 与 Post-LN?
  5. 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

九 · 参考资料

  1. Vaswani et al., "Attention Is All You Need", NeurIPS 2017
  2. Devlin et al., "BERT", NAACL 2019
  3. Radford et al., "GPT" 系列, OpenAI
  4. Su et al., "RoPE", 2021
  5. Hu et al., "LoRA", ICLR 2022
  6. Ouyang et al., "InstructGPT / RLHF", NeurIPS 2022
  7. Dao et al., "Flash Attention", NeurIPS 2022
  8. Gu & Dao, "Mamba", 2023
  9. Rafailov et al., "DPO", NeurIPS 2023
  10. DeepSeek, "GRPO / R1", 2025