零、论文速览

项目 内容
标题 Attention Is All You Need
作者 Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin
机构 Google Brain / Google Research / University of Toronto
发表 NIPS 2017
核心贡献 提出 Transformer——第一个完全基于注意力机制的序列转导模型,彻底摒弃循环和卷积

⚡ 这篇论文奠定了 GPT、BERT、Claude 等一切现代大语言模型的基础架构。理解 Transformer,就是理解当代 AI 的起点。


一、背景与动机

1.1 此前主流方法的局限

方法 代表 核心痛点
RNN / LSTM / GRU GNMT, Seq2Seq 顺序计算 ht = f(ht − 1, xt),训练无法并行;长序列受限于显存
CNN ByteNet, ConvS2S 两端之间的信号路径随距离线性或对数增长,远距离依赖难学
RNN + Attention Bahdanau et al. Attention 仅作为 RNN 的辅助插件,循环瓶颈依然存在

1.2 核心洞察

注意力机制本身就能以 O(1) 的常数操作数建模任意两个位置之间的依赖关系。那么问题来了——

为什么不把 RNN 和 CNN 统统丢掉,只用注意力?

这就是 Transformer 的出发点。


二、模型架构全景

2.1 编码器-解码器总览

Transformer 沿用经典的 Encoder-Decoder 框架:

$$ \text{Input: } (x_1, \dots, x_n) \quad \xrightarrow{\text{Encoder } N\times} \quad \mathbf{z} = (z_1, \dots, z_n) \quad \xrightarrow{\text{Decoder } N\times} \quad (y_1, \dots, y_m) $$

  • Encoder:将输入序列映射为连续表示 z
  • Decoder:基于 z 自回归地逐 token 生成输出(每步把已生成的 token 作为额外输入)

2.2 编码器

$$ \boxed{\text{Encoder} = N \times \big(\text{Multi-Head Self-Attn} \to \text{Add \& Norm} \to \text{FFN} \to \text{Add \& Norm}\big)} $$

每层两个子层,每个子层后都有 残差连接 + 层归一化:

Output = LayerNorm(x + Sublayer(x))

参数 值 说明
层数 N 6 编码器和解码器各 6 层
模型维度 dmodel 512 所有子层 + 嵌入层的输出维度
FFN 内部维度 dff 2048 FFN(x) = max (0, xW1 + b1)W2 + b2

2.3 解码器

$$ \boxed{\text{Decoder} = N \times \big(\text{Masked MHA} \to \text{A\&N} \to \text{Enc-Dec MHA} \to \text{A\&N} \to \text{FFN} \to \text{A\&N}\big)} $$

比编码器多一个子层(三类注意力,见下表):

子层 Q 来源 K、V 来源 功能
掩码多头自注意力 上一层 Decoder 上一层 Decoder 解码器内自注意,掩码防止看到未来位置
编码器-解码器注意力 上一层 Decoder Encoder 最终输出 解码器每个位置关注全部输入
前馈网络 — — 同编码器

🔑 自回归性质:输出嵌入偏移一个位置 + 掩码机制,确保位置 i 的预测只能依赖位置  < i 的已知输出。


三、注意力机制——Transformer 的灵魂

3.1 缩放点积注意力

注意力函数的本质:给定一个 查询(Query),在一组 键值对(Key-Value) 中做软检索,输出值的加权和:

$$ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right) V $$

术语 含义 维度
Q(Query) “我要找什么” nq × dk
K(Key) “我有什么可供匹配” nk × dk
V(Value) “匹配后提取什么内容” nk × dv
$\frac{1}{\sqrt{d_k}}$ 缩放因子——核心创新 标量

为什么必须缩放?

假设 q 和 k 的分量是独立随机变量,均值 0,方差 1。则:

$$ q \cdot k = \sum_{i=1}^{d_k} q_i k_i \quad \Rightarrow \quad \mathbb{E}[q \cdot k] = 0,\quad \text{Var}(q \cdot k) = d_k $$

当 dk 很大时,点积值巨大 → softmax 输出趋近于 one-hot → 梯度  ≈ 0,训练停滞。

除以 $\sqrt{d_k}$ 将方差拉回 1,解决了梯度消失问题。

3.2 多头注意力

不做一个大而全的注意力,而是并行做 h 个小型注意力,各自在不同子空间中捕捉信息:

MultiHead(Q, K, V) = Concat(head1, …, headh) WO

headi = Attention(QWiQ, KWiK, VWiV)

参数 值 说明
头数 h 8 并行注意力数
每头维度 dk = dv = dmodel/h = 64 降维后计算
投影矩阵 WiQ, WiK ∈ ℝdmodel × dk,WiV ∈ ℝdmodel × dv,WO ∈ ℝhdv × dmodel 全部可学习

🎯 多头的好处:不同头关注不同表示子空间——有的头看句法,有的头看语义,有的头做指代消解。单头会通过平均抹杀这种多样性。

每头维度降低为原来的 1/h,所以总计算量与全维度单头注意力基本持平。


四、位置编码——赋予序列以”顺序”

4.1 为什么需要?

Transformer 没有循环也没有卷积,本身对 token 顺序无感知。如果只是把词嵌入输进去,“A loves B” 和 “B loves A” 对模型来说一模一样。必须注入位置信息。

4.2 正弦-余弦方案

论文采用的是固定三角函数编码,而非可学习的嵌入:

$$ PE_{(pos,\, 2i)} = \sin\!\left(\frac{pos}{10000^{2i / d_{\text{model}}}}\right) $$

$$ PE_{(pos,\, 2i+1)} = \cos\!\left(\frac{pos}{10000^{2i / d_{\text{model}}}}\right) $$

  • pos:token 在序列中的位置
  • i:编码向量的维度索引(0, 1, …, dmodel/2 − 1)
  • 波长从 2π 到 10000 ⋅ 2π,呈几何级数分布——不同维度对应不同频率

4.3 选正弦的理由

  1. 相对位置可线性表示:对任意固定偏移 k,PEpos + k 可表示为 PEpos 的线性函数 → 模型容易学到相对位置
  2. 外推能力:训练时没见过的更长序列,正弦函数也能给出合理编码
  3. 实验验证:学习式嵌入与正弦编码效果几乎相同(BLEU 差仅 0.1),正弦胜在外推

使用时将位置编码直接加到输入嵌入上:

Input = TokenEmbedding(x) + PE(x)


五、为什么自注意力更优?

论文从三个维度系统对比自注意力、RNN 和 CNN:

指标 自注意力 RNN CNN 受限自注意力
每层复杂度 O(n2 ⋅ d) O(n ⋅ d2) O(k ⋅ n ⋅ d2) O(r ⋅ n ⋅ d)
最少顺序操作 O(1) ✨ O(n) ❌ O(1) O(1)
最大路径长度 O(1) ✨ O(n) ❌ O(logkn) O(n/r)

n — 序列长度;d — 表示维度;k — 卷积核宽度;r — 受限注意力的邻域大小

三条关键结论:

① 并行性碾压 RNN:自注意力只需 O(1) 个顺序操作,RNN 需要 O(n)——这是 Transformer 训练快得多的根本原因。

② 长距离依赖一马平川:任意两个位置之间的信号路径长度为常数 O(1),RNN 需要穿越 O(n) 的长度。

③ 当 n < d 时计算效率也占优:机器翻译中句子大多较短(n 小),自注意力比 RNN 更快。对于超长序列,可通过受限注意力(只看 r 大小的邻域)进一步优化。


六、训练方法

6.1 数据与批次

任务 数据集 规模 编码
EN → DE WMT 2014 450 万句对 Byte-Pair Encoding(37K 共享词表)
EN → FR WMT 2014 3600 万句对 Word-Piece(32K 词表)

每个训练 batch 约含 25000 源 token + 25000 目标 token。

6.2 硬件与速度

配置 GPU 每步耗时 总步数 总时长
Base 8 × P100 0.4 s 100K 12 小时 ⚡
Big 8 × P100 1.0 s 300K 3.5 天

6.3 优化器策略

使用 Adam(β1 = 0.9,β2 = 0.98,ϵ = 10−9),配合自定义的 warmup + 衰减学习率:

lrate = dmodel−0.5 ⋅ min  (step_num−0.5, step_num ⋅ warmup_steps−1.5)

  • 前 4000 步:学习率线性增加(warmup)
  • 之后:按步数的平方根反比递减

6.4 正则化

方法 设置 说明
残差 Dropout Pdrop = 0.1 施加于每个子层输出、嵌入与位置编码之和
标签平滑 ϵls = 0.1 将正确标签概率从 1.0 平滑到 (1 − ϵls) + ϵls/|V|,损害困惑度(PPL)但提升 BLEU

七、实验结果

7.1 机器翻译

模型 EN-DE BLEU EN-FR BLEU 训练成本 (FLOPs)
GNMT + RL 24.6 39.92 2.3 × 1019
ConvS2S 25.16 40.46 9.6 × 1018
MoE 26.03 40.56 2.0 × 1019
GNMT + RL Ensemble 26.30 41.16 1.8 × 1020
ConvS2S Ensemble 26.36 41.29 7.7 × 1019
Transformer (base) 27.3 38.1 3.3 × 1018 ⚡
Transformer (big) 28.4 🏆 41.8 🏆 2.3 × 1019

🔥 三大亮点:

  • Big 模型 EN-DE 得分 28.4 BLEU,比之前最好的集成模型还高出 2.0+
  • Base 模型训练成本仅为竞品的 1/20 ~ 1/50
  • EN-FR 以不到前最佳模型 1/4 的训练成本刷新单模型记录

7.2 消融实验

变体 关键发现
(A) 头数 单头差 0.9 BLEU;头太多也降。8 头最优
(B) 键维度 dk 减小 dk 显著损害质量 → 点积”兼容性匹配”并不简单,更复杂的匹配函数可能有益
(C/D) 模型规模 & Dropout 越大越好;Dropout 对防过拟合至关重要
(E) 位置编码 学习式嵌入 ≈ 正弦编码(几乎无差异)

7.3 句法分析(泛化验证)

在 WSJ Penn Treebank 选区句法分析任务中:

设置 方法 F1
仅 WSJ 训练集 Transformer (4层) 91.3
仅 WSJ 训练集 Dyer RNNG 91.7
半监督 Transformer (4层) 92.7 🏆
半监督 Vinyals & Kaiser 92.1
多任务 Luong et al. 93.0
生成式 Dyer RNNG 93.3

🔑 值得一提:仅用 4 万句 WSJ 数据训练,Transformer 就超越了 BerkeleyParser——后者需要大量任务特定调优。


八、注意力可视化——模型”在想什么”

论文附录的可视化是理解 Transformer 内部行为的关键窗口:

8.1 长距离依赖追踪

在 “making…more difficult” 的翻译中,Encoder 第 5 层的多个注意力头准确捕获了动词 making 与其远端补足语之间的依赖——尽管中间隔了十几个 token。

8.2 指代消解

某些注意力头对代词 its 与其先行词(The Law)的连接展现出极其尖锐(sharp)的注意力分布——模型清楚地”知道”它在指什么。

8.3 句法分工

不同注意力头学会了不同的句法角色:

  • 有的头专注名词短语的边界
  • 有的头追踪动词-宾语的搭配
  • 有的头捕捉介词短语的附着关系

💡 这说明多头注意力并非冗余——不同头确实自发地学到了互补的语言学特征。


九、总结与影响

论文核心贡献一览

贡献维度 具体内容
架构革命 第一个完全基于注意力的序列模型,彻底抛弃 RNN/CNN
并行性突破 训练速度飞跃(12 小时 SOTA),根本原因是不再有序列依赖
长距离建模 常数级路径长度 O(1),天然解决长程依赖
可解释性 注意力权重可直接可视化,不同头展现不同语言学行为
泛化验证 翻译 SOTA + 句法分析出色 = 架构的通用性得到证实

后续影响

这篇论文开启了 “Attention Is All You Need” 的时代。Transformer 从机器翻译出发,迅速扩展到:

NLP 全线 → 计算机视觉 (ViT) → 语音处理 → 多模态 → 代码生成 → ⋯

GPT、BERT、T5、Claude、LLaMA……几乎所有现代大语言模型的名字背后,都是同一张架构蓝图——那篇 2017 年 NIPS 论文中描绘的 Transformer。

“We are excited about the future of attention-based models.”

——论文结尾的这句话,在此后近十年的 AI 浪潮中得到了最充分的应验。


参考资料

  1. Vaswani, A., et al. (2017). Attention Is All You Need. NIPS 2017. arXiv:1706.03762
  2. 官方代码实现:tensorflow/tensor2tensor