首页/论文研究/论文模块/《Attention Is All You Need》精读
论文模块 论文精读 Markdown

《Attention Is All You Need》精读

2017 年那篇把序列建模从循环结构里解放出来的论文:为什么去掉 RNN 反而更好,实验结果说明了什么,又有哪些被后续工作修正。

更新于 2026-11-03 · 论文模块
Vaswani et al., Google Brain / Google Research, NeurIPS 2017.
这篇论文的野心写在标题里:不需要循环,不需要卷积,只要注意力。

一、论文要解决什么

2017 年做机器翻译的主流是 RNN + Attention(Bahdanau 注意力)或 CNN 序列模型。作者认为这些结构都有同一个问题:它们需要沿着序列顺序计算,限制了并行度;序列越长,路径越长,学习长距离依赖越困难。

论文提出的 Transformer 完全用注意力堆叠,把任意两个位置的路径长度压到 O(1)。

二、模型结构

编码器与解码器各 6 层,每层两个子层

  • 编码器:6 层,每层 = 多头自注意力 + 前馈网络,两个子层都带残差和 LayerNorm。
  • 解码器:6 层,比编码器多一个「编码器-解码器注意力」,且自注意力是带掩码的(只能看已生成的部分,防止信息泄漏)。

三个细节值得注意:

  1. 缩放因子 1/√d_k:点积的方差随维度增长,不缩放会让 softmax 进入饱和区,梯度几乎为零。
  2. 多头:把 d_model=512 切成 h=8 份,每头 64 维。作者在论文中说明,多头让模型能同时关注不同位置的不同表示子空间,单头做不到。
  3. 共享嵌入:输入输出嵌入与 pre-softmax 线性层共享权重,嵌入层乘以 √d_model 平衡量级。

三、位置编码的选择

论文用正弦/余弦绝对位置编码:

PE(pos, 2i)   = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

选它而不是学习式编码的理由是外推性:对任意固定偏移 k,PE(pos+k) 可以表示成 PE(pos) 的线性变换,模型有可能处理比训练集更长的序列。

这也是后续 RoPE 等相对位置方案的思想源头——把「位置」当成可运算的结构,而不是一组查表参数。

四、实验结果说明了什么

  • WMT 2014 英德:28.4 BLEU,比当时最优(含集成)高 2 BLEU 以上;
  • WMT 2014 英法:41.8 BLEU,单模型新 SOTA,训练成本只有最优模型的一小部分(论文提到 8 块 P100 训练 3.5 天);
  • 消融实验:头数从 1 增到 8 有明显收益,再往上收益递减;d_k 太小或太大都变差。

这说明两件事:并行化带来的训练效率提升是数量级的,而模型容量在当时的规模上还没到瓶颈。

五、被后续工作修正的部分

论文不是终点,几个地方后来被改写:

论文设定后来主流做法原因
Post-LN(子层后归一化)Pre-LN / RMSNormPost-LN 深层训练不稳定,需要 warmup 兜底
绝对正弦位置编码RoPE / ALiBi相对位置外推更好,长上下文更友好
训练式全参数 FFNMoE 稀疏 FFN参数规模与算力解耦
标准 softmax 注意力FlashAttention / GQA显存与带宽成为主要瓶颈
Encoder-DecoderDecoder-only统一建模范式,便于扩展到通用生成任务

六、为什么它成了分水岭

在它之前,NLP 的进步主要靠「在 RNN 上做更好的门控与注意力」;在它之后,整个领域的进步变成了「更大的 Transformer + 更多数据」。2018 年的 BERT、GPT 直接建立在这个结构上,2020 年之后的缩放定律又把它推向千亿参数。

回头看,这篇论文的真正贡献不只是精度提升,而是把 NLP 模型的扩展性问题从架构层面解开了。当模型不再依赖顺序计算,GPU 才能被真正喂饱,规模化的正循环才得以启动。

参考

  • Vaswani, A., et al. Attention Is All You Need. NeurIPS 2017. arXiv:1706.03762
  • 建议配套阅读:The Annotated Transformer(Harvard NLP),逐行对照实现。