Oh My Awesome AI AI 世界地图

Attention Is All You Need

Vaswani et al. · NeurIPS 2017 · 2017

阅读原文

用纯自注意力取代循环与卷积的序列建模范式,以可并行性与可扩展性统一了此后一切模态。

核心要点

  • 自注意力的本质是把序列建模变成「集合上的消息传递」:任意两位置直接相连,信息路径 O(1),梯度无需穿越时间步。
  • 多头机制让不同子空间并行关注不同关系(句法、位置、共指),是「分布式特征学习」在结构维度的延伸。
  • 真正的胜负手是硬件亲和性:稠密 GEMM 完美匹配 GPU/TPU,使「堆算力换能力」的曲线第一次平滑可控。
  • 「编码器-解码器」的原始设计后来被证明是历史包袱——GPT(纯解码器)与 BERT(纯编码器)各自砍掉一半后更纯粹。
本页目录

背景

2017 年的机器翻译是序列到序列(seq2seq)的天下:编码器 RNN 把源句压缩成一个固定长度的向量,解码器 RNN 再把它展开成目标句。2015 年 Bahdanau 的注意力机制已经登场,但只是「配角」——每一步用解码器状态去「看一眼」编码器输出,缓解瓶颈。2016 年谷歌的 GNMT(8 层 LSTM + 注意力)把生产系统搬上了 TPU;2017 年初 Facebook 的 ConvS2S 用卷积替换 RNN,首次实现大规模并行训练,风头正劲。

但所有人的架构里,序列处理的主干仍然是逐步递归的:RNN 的隐藏状态像接力棒一样逐时间步传递,训练无法并行(后向传播必须沿时间展开),长距离依赖要跨越很多步才能建立。

动机

论文要解决的核心痛点只有一个字:慢。RNN 的顺序依赖让训练时间随序列长度线性堆叠,而 2016-2017 年正是「算力红利」开始爆发的窗口——GPU/TPU 擅长的是大矩阵乘法,不是逐步的状态更新。作者的赌注是:既然注意力已经在做「任意位置直接交互」,那循环结构是不是本来就多余?把注意力升格为唯一的序列建模机制,可以换来完全的并行性和 O(1) 的信息路径长度。

方法

整个架构(Transformer)由 6 层编码器 + 6 层解码器组成(base 版,d_model=512;big 版 1024),核心组件:

缩放点积注意力。每个位置同时扮演三个角色:query(Q,主动查询)、key(K,被检索的索引)、value(V,携带的内容)。一次 softmax(QKᵀ/√d_k)·V 就完成全序列的信息路由——每个位置对其他所有位置打分,然后按分数加权取内容。缩放因子 √d_k 不是装饰:维度大时点积方差变大,softmax 进入饱和区梯度消失,除以 √d_k 把方差拉回 1。

多头注意力。8 个独立的注意力头(big 版 16 个)并行运行在 d/8 维的子空间上再拼接。动机是”关注多种关系”:后来的可解释性研究发现不同头分别负责句法依存、位置邻近、共指消解。这是把 CNN「多通道」思想搬进了注意力。

前馈层与残差。每个子层都是 LayerNorm(x + Sublayer(x))(post-LN,后来证明 pre-LN 更稳),FFN 是两层 MLP、中间维度放大 4 倍。注意力负责「混合位置间信息」,FFN 负责「每个位置独立加工」——两者交替,各司其职。

正弦位置编码。注意力本身对顺序完全无感(集合运算),所以把位置信息用固定正弦函数编码后加进词嵌入。作者自己承认这是权宜之计——后来的演化线(可学习编码 → RoPE → ALiBi)绵延至今。

训练细节在今天看全是「上古配方」:label smoothing 0.1、Noam 学习率调度(warmup 4000 步后按步数衰减)、beam search + 长度惩罚做解码。

实验设置

  • 数据:WMT14 英→德(450 万句对,newstest2014 做测试)、英→法(3600 万句对)
  • 基线:GNMT(LSTM 集成)、ConvS2S(卷积,含集成版本)、当时所有已发表最佳成绩
  • 硬件:8 块 NVIDIA P100。base 模型(65M 参数)训练 12 小时(10 万步),big 模型(213M)训练 3.5 天(30 万步)
  • 评测:BLEU(与句级平均相比半 BLEU 惩罚的 beam=4 解码)

结果

  • WMT14 英德:28.4 BLEU——比之前所有已发表结果(含集成系统)高出 2 分以上;big 模型 213M 参数,比对手少(ConvS2S 是 216M,GNMT 210M,但 Transformer 训练量小一个数量级)
  • WMT14 英法:41.8 BLEU,同样刷新纪录
  • 训练成本:base 12 小时 vs ConvS2S/GNMT 的数天级——论文标题之外最有分量的一个数字
  • 消融:头数从 8 减到 1,BLEU 掉 0.9;头太多(32)也略降——「多头有收益但很快饱和」
  • 泛化实验:把解码器用于句法成分分析( constituency parsing ),只用 17 万句标注数据就接近专用模型——「架构不是翻译特化」的第一个信号

有趣的洞见

注意力的另一种理解:带带宽限制的查找表。每个 token 每层只能「精确读取」少数几个位置(softmax 之外的权重都很小),其余靠加权均值粗略获取。这个视角(后来被 Elhage et al. 的「归纳头」工作证实)比「模拟人类注意」靠谱得多:KV Cache、稀疏注意力、上下文学习的「复制」行为,全都从这个模型里自然长出来。

这篇论文的胜利是硬件的胜利。去掉循环结构后,整个模型就是一连串稠密矩阵乘法(GEMM)——恰好是 GPU/TPU 吞吐最高的算子。「算法对硬件友好」这件事在论文里一个字没提,却是它统治下一个八年的真正原因:当「堆算力」成为可行策略,架构的可扩展性比架构的归纳偏置更重要。

编码器-解码器是历史包袱。论文问世的第二年,两个「砍半」版本就接管了世界:BERT(只要编码器,做理解)和 GPT(只要解码器,做生成)。完整版 Transformer 反而几乎没人用——历史只保留了它的零件。

批判性评价

最弱的一环:论文的实验(两个翻译任务)完全无法预示后来的历史。它没有回答:为什么这套架构能 scale?注意力到底在算什么?O(N²) 的复杂度在长上下文时代怎么活?这些问题全部留给了后继者(Scaling Laws、机制可解释性、FlashAttention)。用今天的话说:它给出了正确的架构,但没给出任何理论。

依然重要的理由:读原论文时你会惊讶于它有多「小」——8 页正文,没有惊人的数字,每个设计(缩放因子、多头、post-LN、正弦编码)都只用了两三句话论证。但它几乎每个组件都孵化了独立的研究领域。一篇论文的价值有时不在它说了什么,而在它让什么成为可能。