第 7 步 · 现代深度学习的引擎
Transformer 架构Transformer Architecture
堆叠自注意力与逐位置前馈,丢掉循环,用并行与位置编码重塑序列建模。
14 分钟
阅读 + 实操
1 个
交互演示
高级
难度
Transformer 架构 · 交互演示
编码器层6
头数8
参数量65M
① 位置编码 — sin/cos 给每个位置打上"位置标签"(行=位置 0-7,列=维度 0-15)
② 多头注意力 — 输入句子,看各头关注了哪些词
点击上方词标签选择当前 Query,查看它"关注"各词的程度
③ 编码器架构总览(简化版:d_model=8, heads=2, d_ff=16)
输入→嵌入→+ 位置编码→多头注意力→残差 & 归一化→前馈网络→残差 & 归一化→输出
为什么学这步?
Transformer 催生了 BERT、GPT 等大模型,几乎统辖了序列任务。理解它,就握住了当代 AI 的钥匙。
📌 发生了什么
- 自注意力 + 前馈 + 残差 / 归一
- 解码器带因果掩码
- 位置编码补顺序信息
⚠️ 常见陷阱
- 数据量小易过拟合
- 计算随长度平方增长
- 位置编码方式影响外推
✅ 本章小结
- Transformer 用注意力替代循环
- 并行高效、长程友好
- 是大模型统一架构
📐 多头注意力与位置编码
Transformer 完全基于注意力、没有循环;多头注意力让模型并行关注多个子空间,位置编码注入顺序信息。
多头注意力将 Q/K/V 拆成 h 个头并行做缩放点积注意力,再拼接后用 W_O 投影回原维度。
由于没有循环结构,需用位置编码注入顺序信息;正弦/余弦编码让模型能泛化到更长序列。
每个 Transformer block = 多头注意力 + 前馈网络(FFN),各带残差连接与 LayerNorm,堆叠 N 层构成编码器。
🎛 编码器层数对比
层数决定模型深度,太浅表达力不足,太深易过拟合且训练更难。
| 层数 | 表现 | 结果 |
|---|---|---|
| 2 | 表达力有限 | 浅任务可用 |
| 6 | 经典设定(base) | 推荐 |
| 12 | 表达力强 | 大模型 / 大数据 |
💡 原始 Transformer base=6 层、big=12 层;层数翻倍参数近似翻倍,需配更多数据与正则。
💻 Transformer Block
一个编码器层的 Python 实现(注意力 + FFN + 残差 + LayerNorm):
# 单个 Transformer 编码器层
def transformer_block(x, params):
# 1. 多头自注意力 + 残差 + LayerNorm
attn = multi_head_attention(x, x, x, params) # Q=K=V=x
x1 = layer_norm(x + attn) # 残差 + 归一化
# 2. 前馈网络(两层线性 + ReLU)+ 残差 + LayerNorm
ffn = relu(x1 @ params['W1'] + params['b1'])
out = ffn @ params['W2'] + params['b2']
return layer_norm(x1 + out) # 残差 + 归一化
📚 参考文献与延伸阅读
- Vaswani et al. (2017), Attention Is All You Need, NeurIPS — Transformer 原始论文
- Devlin et al. (2018), BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, NAACL — 预训练 Transformer
- Goodfellow, Bengio & Courville, Deep Learning (2016), §6.3 Universal Approximation + 注意力相关章节
- The Annotated Transformer — Harvard NLP 的逐行注解版
- 下一步 → 第 10 步 · 视觉 Transformer ViT:同一个编码器搬去看图,图像切 patch 当单词
📝 课后练习
检验你的理解——答对为止