01 · Attention Is All You Need

核心论文 Transformer 2017 · NIPS
Vaswani et al., Google Brain · arXiv:1706.03762

迭代了什么

上一代的问题:RNN 必须串行处理,长序列无法并行;CNN 能并行但远距离路径长。

这代改了什么:完全去掉 RNN/CNN,纯 Scaled Dot-Product Attention + Multi-Head Attention + 残差连接。

效果:WMT 英→德 BLEU 28.4(之前最佳 26.3),训练仅 3.5 天 / 8 P100。

一、论文要解决什么问题

在 Transformer 之前,序列转录(如机器翻译)的主流架构是 RNN 或 CNN + Attention。RNN 天然按时间步顺序计算,无法在训练样本内并行化,长序列时更加受限。CNN 虽然可以并行,但远距离依赖需要堆叠很多层,路径长、学习困难。这篇论文的核心问题就是:能不能完全扔掉 RNN 和 CNN,只靠注意力机制搭建一个序列模型?

二、核心思想

提出 Transformer,一个完全基于注意力机制的编码器-解码器架构。关键创新点:

三、架构详解

3.1 Encoder-Decoder 结构

Encoder:6 层,每层 = Multi-Head Self-Attention + Feed-Forward Network,每层后接 Residual + LayerNorm。

Decoder:6 层,每层 = Masked Multi-Head Self-Attention + Cross-Attention(关注 Encoder 输出)+ FFN,同样 Residual + LayerNorm。

所有子层输出维度 dmodel = 512。

3.2 Scaled Dot-Product Attention

Attention(Q, K, V) = softmax(QKT / √dk) · V

Q 和 K 的维度是 dk,V 的维度是 dv。除以 √dk 是为了防止内积过大把 softmax 推到梯度极小的区域——当 dk 较大时,点积的方差是 dk,缩放后方差恢复为 1。

3.3 Multi-Head Attention

MultiHead(Q, K, V) = Concat(head1, ..., headh) · WO
headi = Attention(Q · WiQ, K · WiK, V · WiV)

h = 8 个头,每个头 dk = dv = dmodel / h = 64。每个子空间维度降低,总计算量与单头注意力基本持平,但学到了更丰富的表征。

3.4 Position-wise FFN

FFN(x) = max(0, xW1 + b1) · W2 + b2

两个线性变换,中间带 ReLU 激活。dmodel = 512,内层 dff = 2048。每个位置独立但参数层间不同(等价于两个核大小 1 的卷积)。

3.5 Positional Encoding

PE(pos, 2i) = sin(pos / 100002i/dmodel)
PE(pos, 2i+1) = cos(pos / 100002i/dmodel)

每个位置的每一维对应一个正弦或余弦,频率从 2π 到 10000·2π 呈几何级数。这样设计的好处:对于任意固定偏移 k,PEpos+k 可以表示为 PEpos 的线性函数,便于模型学习相对位置。

3.6 为什么 Self-Attention

对比三种层的复杂度(n = 序列长度, d = 表示维度):

当 n < d(这是绝大多数 NLP 场景),Self-Attention 比 RNN 更快,且远距离依赖路径最短。

四、训练与正则化

五、关键结果

六、历史意义与后续影响

这篇论文的价值远超翻译任务本身。它证明了:只要注意力够强,循环和卷积都不是必需的。 这个发现为后续几乎所有 LLM 架构奠定了基础。后续论文沿着多个方向拓展:

七、个人思考

读完之后最大的感受是:这篇论文的简洁性本身就是一种洞察。它没有引入复杂的数学工具,只是在已有的注意力机制上做了精心设计——缩放、多头、残差连接的恰当组合。回头看,拆掉 RNN 这个"行业共识"需要的不是更聪明的理论,而是勇气去问:"如果我有足够强的注意力,还需要循环顺序计算吗?" 从这篇论文往后,整个 NLP 领域彻底重塑。