研究动机与问题背景
在 Transformer 之前,RNN / LSTM / GRU 统治着序列建模领域。它们存在三个根本性缺陷:
- 无法并行计算:RNN 必须按顺序生成隐藏状态 $h_t = f(h_{t-1}, x_t)$,处理第 $t$ 个词必须等待第 $t-1$ 个完成。序列越长,训练越慢。
- 长距离依赖困难:虽然 LSTM 缓解了梯度消失,但在极长序列中信息仍随距离衰减。
- 计算瓶颈:对长文本和高分辨率输入,内存与算力开销巨大。
核心洞见:能否抛弃 RNN 的循环结构,仅靠 Attention 捕捉全局依赖?Transformer 的答案是肯定的——通过 Self-Attention,模型一次性看到序列中所有位置,路径长度为 $O(1)$。这不仅解决了长距离依赖问题,更释放了 GPU 大规模并行计算的潜力。
RNN 必须逐步串行处理,长距离依赖路径为 $O(n)$;Transformer 通过 Self-Attention 使任意两个位置直接交互,路径长度 $O(1)$。
模型架构与数学建模
Transformer 采用经典的 Encoder-Decoder 结构,但内部组件完全基于注意力机制。
核心超参数
| 符号 | 含义 | Base 默认值 |
|---|---|---|
| $d_{model}$ | 嵌入向量及各层输出的维度 | 512 |
| $N$ | Encoder / Decoder 堆叠层数 | 6 |
| $h$ | Multi-Head Attention 头数 | 8 |
| $d_k, d_v$ | Key / Value 维度 ($d_{model}/h$) | 64 |
| $d_{ff}$ | 前馈网络中间层维度 | 2048 |
1. Scaled Dot-Product Attention
Transformer 的核心引擎。输入包括查询 ($Q$)、键 ($K$) 和值 ($V$):
- 点积 $QK^T$:计算 Query 和 Key 的相似度矩阵。
- 缩放 $1/\sqrt{d_k}$:防止点积过大导致 Softmax 进入饱和区,引起梯度消失。
- Masking:Decoder 中将 $QK^T$ 右上三角设为 $-\infty$,防止位置 $i$ 看到未来信息。
左:Scaled Dot-Product Attention 数据流。右:Multi-Head Attention 将 Q/K/V 投影到 $h$ 个子空间并行计算后拼接。
2. Multi-Head Attention
单一 Attention 只能关注一个侧面。Multi-Head 机制允许模型在不同子空间中关注不同信息(句法、语义等):
3. 逐位置前馈网络 (FFN)
每个 Attention 层后接一个全连接前馈网络,应用于每个位置:
实质是两个线性变换中间夹一个 ReLU 激活。内部维度 $d_{ff}=2048$,是 $d_{model}$ 的 4 倍。
4. 位置编码 (Positional Encoding)
没有了 RNN 的时序性,模型必须显式感知"位置"。论文使用正弦 / 余弦函数:
这种编码使得 $PE_{pos+k}$ 可以表示为 $PE_{pos}$ 的线性函数,从而让模型能学习相对位置关系。
Encoder-Decoder 整体结构细节
Encoder:由 $N=6$ 个相同的层堆叠。每层包含两个子层——Multi-Head Self-Attention 和 FFN。每个子层后接残差连接 + Layer Normalization:$\text{LayerNorm}(x + \text{Sublayer}(x))$。
Decoder:同样 $N=6$ 层,但额外插入第三个子层——对 Encoder 输出做 Cross-Attention。Decoder 的 Self-Attention 加入 Mask 防止看到未来信息。
输入嵌入:Encoder 和 Decoder 的输入嵌入权重共享,且乘以 $\sqrt{d_{model}}$ 进行缩放。
实验设置与复现细节
数据集
- WMT 2014 英德翻译 (EN-DE):450 万句对,BPE 编码,词表约 37k。
- WMT 2014 英法翻译 (EN-FR):3600 万句对,词表 32k。
训练硬件与时长
| 模型 | 硬件 | 每步耗时 | 总训练步数 | 总训练时长 |
|---|---|---|---|---|
| Base | 8x P100 GPU | 0.4 秒 | 100,000 | ~12 小时 |
| Big | 8x P100 GPU | 1.0 秒 | 300,000 | ~3.5 天 |
注:当时的 SOTA 模型(如 GNMT)需训练数周,Transformer 的效率提升是数量级的。
优化器与正则化
使用 Adam ($\beta_1\!=\!0.9,\;\beta_2\!=\!0.98,\;\epsilon\!=\!10^{-9}$)。学习率调度 (Warmup) 是训练成功的关键:
- Warmup Steps:4000。先线性增加学习率,后按反平方根衰减。
- Residual Dropout:$P_{drop}=0.1$。
- Label Smoothing:$\epsilon_{ls}=0.1$。虽然增加了困惑度,但提升了准确率和 BLEU。
实验结果与核心结论
核心数据
机器翻译性能对比 (WMT 2014)
| 模型 | EN-DE BLEU | EN-FR BLEU | 训练成本 (FLOPs) |
|---|---|---|---|
| ByteNet | 23.75 | - | - |
| GNMT + RL | 24.6 | 39.92 | $2.3 \times 10^{19}$ |
| ConvS2S (集成) | 26.36 | 41.29 | $1.2 \times 10^{21}$ |
| Transformer (Base) | 27.3 | 38.1 | $3.3 \times 10^{18}$ |
| Transformer (Big) | 28.4 | 41.8 | $2.3 \times 10^{19}$ |
Transformer (Big) 在英德翻译上超过之前最佳模型(含集成)2.0+ BLEU,训练成本仅为 ConvS2S 的 1/50。
消融实验发现
- 头数:单头最差 (24.9 BLEU),16 头也会下降,8 头是最佳平衡点。
- Key 维度 $d_k$:减小 $d_k$ 损害质量,说明点积相似度函数可能还不够表达力。
- 模型规模:更大模型效果更好,Dropout 对防止过拟合至关重要。
犀利短评
优点
- 范式转移:彻底证明 RNN 对序列建模并非必须,"Attention Is All You Need" 的标题本身就是宣言。直接催生了 BERT、GPT 等后续工作。
- 计算效率:极大释放了硬件并行计算的潜力,使训练更大规模模型成为可能。
- 可解释性:Attention 分布图提供了查看模型"关注点"的直观窗口。
不足与局限
- $O(n^2)$ 复杂度:Self-Attention 的计算和内存复杂度为序列长度的平方。处理超长文本(如书籍)极其昂贵,催生了后续 Linformer、Flash Attention 等优化工作。
- 位置信息脆弱:仅靠相加的位置编码,对相对位置的捕捉能力是否真正优于 RNN 的内在时序性?后续 RoPE、ALiBi 等对此改进。
- 训练敏感:对学习率预热和初始化非常敏感,不当配置容易梯度爆炸或不收敛。
One More Thing:注意力的可解释性
论文中最令人着迷的部分之一是 Attention 的可视化(Figure 3, 4, 5)。
作者发现,不同的 Attention Head 学会了执行不同的句法或语义任务。例如,第 5 层的一个 Head 学会了解决指代消解 (Anaphora Resolution):
深层洞见:单词 "its" 的 Attention 权重清晰地指向了 "The Law"。这种无监督学习到的语言结构知识——模型自发地学会了语法和语义——正是 Transformer 后来横扫 NLP 乃至 CV、语音等全领域的基石。一个纯粹为翻译设计的架构,最终成为了 AGI 时代的基础设施。