Transformer 之所以能成为当今大模型时代的核心基础架构,并非偶然。从 2017 年“Attention Is All You Need”提出至今,Transformer 已经成为 NLP、CV、多模态等各领域的统一架构。而在学习 Transformer 的过程中,我强烈推荐的一篇文章是 Harvard NLP 的《The Annotated Transformer》 。
它不是一篇新的论文,而是一篇对原论文的逐行注释版实现,通过最简洁、可运行的 PyTorch 代码复现 Transformer 的结构,让读者不仅理解理论,更能掌握工程落地的完整细节。
本文总结《The Annotated Transformer》的主要内容,并结合原论文的核心技术和创新,以帮助你更系统地理解 Transformer。
🔍 一、这篇文章讲了什么?
《The Annotated Transformer》的目标不是提出新方法,而是:
用最清晰的代码和注释,实现原始 Transformer 架构,并解释每个模块为什么这么设计。
它的核心思想很简单:
👉 把论文拆解成可运行的代码,把概念讲清楚,把细节复现出来。
文章完整实现了一个用于机器翻译的 Transformer,包括:
-
输入/输出 embedding
-
位置编码 Positional Encoding
-
Scaled Dot-Product Attention
-
Multi-Head Attention
-
Encoder(堆叠 6 层)
-
Decoder(带 Mask 的自注意力)
-
Feed-Forward 层
-
Residual & LayerNorm
-
Mask(Padding 与 Subsequent Mask)
-
训练流程(Label Smoothing、Warmup 学习率调度)
读完这篇文章,你不仅知道 Transformer 是什么,还能真正“从头写出”一个 Transformer。
⚙️ 二、Transformer 的关键技术与模块解析
理解文章内容之前,我们先快速回顾 Transformer 的核心创新点:
1. Self-Attention(自注意力):全局依赖,一次搞定
传统 RNN 需要一个 token 一个 token 地处理,不能并行,而 Self-Attention 能:
-
一步看完整个序列
-
建立任意位置之间的依赖
-
显著提升训练速度
-
捕捉长距离关系
代码中,Self-Attention 核心是:
Attention(Q, K, V) = softmax(QKᵀ / √dₖ) V
十分简洁,却非常强大。
2. Multi-Head Attention:多角度理解序列
不是只做一次 attention,而是进行多次,让模型在不同子空间捕捉不同类型关系。
例如:
-
一头学习动词关系
-
一头学习句法
-
一头学习代词指代
Transformer 的表达能力因此大幅增强。
3. Positional Encoding:让无序的 Attention 拥有顺序感
由于模型没有 RNN、CNN 结构,因此必须显式加入序列顺序。
文章中的实现使用 sin/cos 位置编码:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
优点:
- 不依赖固定长度
- 拥有良好的外推能力
- 计算简单无参数
4. Encoder 与 Decoder:结构清晰的堆叠模块
Encoder 每层包含:
-
Multi-Head Self-Attention
-
Feed-Forward
-
LayerNorm + Residual
Decoder 每层包含:
-
Masked Multi-Head Self-Attention(禁止看到未来 token)
-
Cross-Attention(关注 encoder 输出)
-
Feed-Forward
这一结构被后来所有大模型沿用(GPT 属于 Decoder-only,BERT 属于 Encoder-only)。
5. 训练中的关键技巧
原论文与 Annotated 文章也介绍了一些训练必须的技巧:
-
Label Smoothing:防止模型过度自信,提高泛化
-
Learning Rate Warmup:前期学习率逐步升高
-
特定的学习率衰减函数
-
Masking:避免模型关注 padding 或未来 token
如果你训练 Transformer,没有这些技巧几乎无法收敛。
🏗 三、《Annotated Transformer》中构建 Transformer 的流程
文章的结构与代码非常工整,大致流程如下:
-
定义 Embedding 与 Positional Encoding
-
实现 Scaled Dot-Product Attention
-
实现 Multi-Head Attention(投影 + 拼接)
-
实现 Feed-Forward 层
-
定义 Encoder Layer(Attention + FFN)
-
堆叠多个 Encoder Layer
-
定义 Decoder(包括 masked attention + cross-attention)
-
加入 Generator 输出概率分布
-
准备训练数据(WMT 英德翻译)
-
使用 Label Smoothing 的损失函数
-
使用 Warmup 的优化器
-
训练一个完整的 Transformer
最终得到一个可用的机器翻译模型。
🎯 四、为什么这篇文章如此重要?
因为它实现了一个目标:让任何人都能真正理解 Transformer。
不像很多只讲理论的博客,也不像库封装的黑盒,这篇文章:
-
用最直接的代码解释所有机制
-
保持与原论文 100% 对齐
-
从理论到工程完整复现
-
不加修改、不加花哨技巧
它是很多人理解 RNN → Attention → Transformer 演进的起点,也是后续研究(如 GPT、BERT、LLMs)的基础。
📝 五、总结
《The Annotated Transformer》本质上是一篇:
将 Transformer 原论文完全代码化、可运行、可理解的深度教程。****
它让我们清晰看到:
-
Self-Attention 为什么强大
-
Multi-Head 如何增强表达
-
Positional Encoding 如何加入顺序
-
Encoder/Decoder 如何协作
-
Transformer 为什么能替代 RNN/CNN
-
为什么它成为所有大语言模型的基石
读完它,你不仅“知道” Transformer,更是能“写出” Transformer。