「论文阅读」Attention Is All You Need - Transformer 札记

Transformer 的整体架构示意
为什么读这篇
2017 年 Google Brain 发的这篇论文,标题叫《Attention Is All You Need》。名字听起来很"凡尔赛",但它真的做到了——把 RNN/CNN 从序列建模主流里挤了出去,让 Self-Attention 成为 NLP 乃至整个深度学习的基础模块。我第一次读是两年前,最近重看一遍,发现有些理解当时是错的,记录一下。
Attention 的本质
Attention 机制的核心操作可以用一行公式表示:
Attention(Q, K, V) = softmax(QK^T / sqrt(d_k)) · V
Q(Query)、K(Key)、V(Value)都是从同一个输入线性变换来的(Self-Attention),或者 Q 来自解码器、K/V 来自编码器(Cross-Attention)。
除以 sqrt(d_k) 是为了防止点积的值域随维度增大而爆炸,导致 softmax 进入梯度消失区。这个细节论文里一句话带过,但很重要。

Multi-Head Attention 示意图
Multi-Head 的意义
论文里用了 h=8 个头,每个头的维度 d_k = d_model/h = 64。Multi-Head 的直觉是:让不同的头学到不同"位置"上的依赖关系——有的头关注句法,有的关注语义,有的关注远程共指。
我之前的误解是以为多头只是为了并行计算。实际上,即使总参数量和单头相同,多头的表达能力也更强,因为每个头可以在低维子空间里独立做 Attention。
Position Encoding
Transformer 没有 RNN 那样天然的时序感知,所以需要显式注入位置信息。原始论文用的是 sin/cos 固定编码:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
频率从低到高,每个维度对应不同尺度的位置信息。这个设计的好处是可以外推到比训练序列更长的输入,但后来 BERT 直接换成了可学习的位置 embedding,效果差不多但更直觉。

论文中的训练结果对比(WMT EN-DE 翻译任务)
我觉得被低估的细节
- Label Smoothing:训练时把目标分布从 one-hot 软化,epsilon=0.1。这提高了 BLEU 但降低了 perplexity,论文里直接承认了这个矛盾,这种诚实很少见。
- Warmup + 衰减的学习率调度:先线性升温 4000 步,再按步数的 -0.5 次方衰减。这个调度现在几乎是 Transformer 训练的标配,但当时是新东西。
- Dropout 加在哪:每个子层的输出、Attention 权重本身、词嵌入和位置编码加和后都有 Dropout。位置挺分散的,重现时容易漏掉。
结论
重读的最大收获是意识到这篇论文的工程细节有多扎实——不是一个"突发奇想",而是很多细节都有对应的消融实验。Table 3 把架构变体一一对比,现在看来几乎就是后续 BERT/GPT 系列调参的预演。