返回首页

Post

Attention Is All You Need:全局注意力如何重写序列计算

基于论文原文重建 Transformer 的核心论证:sequence transduction 为什么要减少顺序计算,self-attention 如何承担序列内部的信息交换,multi-head、FFN 与位置编码分别补上什么,以及训练和实验究竟支撑了哪些边界内的结论。

分类
标签
合集

《Attention Is All You Need》压中的问题并不抽象:序列到序列建模能否去掉沿时间步展开的主干计算,只用 attention 完成输入和输出表示的构造,同时保留机器翻译上的强结果与更好的并行性。论文的贡献不只在于给出了 Transformer 这个后来极其重要的模型名,还在于把这个主张拆成了几段可以检验的论证:recurrent 主干为什么限制并行化,self-attention 如何缩短远距离依赖的路径,multi-head 为什么补偿单头平均化的问题,训练配方和实验结果又支持到什么程度。

Transformer 仍然处在 encoder-decoder sequence transduction 框架中,也仍然自回归生成目标序列。真正变化的是序列内部表示更新的主干:RNN 和 convolution 被移除,每层用 self-attention 直接建立任意位置之间的信息通路,再用 position-wise feed-forward network 做位置内的非线性变换。这个结构选择同时服务两个目标:减少单个样本内部的顺序操作数,并缩短长距离依赖的传播路径。

recurrence 的并行化瓶颈

论文开头针对的是当时主流的 encoder-decoder 路线。RNN、LSTM 和 GRU 都把序列位置与计算时间绑定在一起。若隐藏状态写成

ht=f(ht1,xt),h_t=f(h_{t-1},x_t),

那么第 tt 步必须等待第 t1t-1 步完成。同一个样本内部存在不可并行的顺序依赖,序列越长,训练越受限;显存约束又会压缩 batch 大小,使这个问题更加突出。论文将其称为 recurrent 模型的 fundamental constraint of sequential computation。

卷积路线缓解了这个问题。ByteNet、ConvS2S 等模型可以并行计算不同位置的隐藏表示,但远距离位置之间的交互仍需要跨越多层卷积。论文在背景部分强调,学习长距离依赖时,前向和后向信号需要穿过的路径长度很重要。卷积把顺序操作数降下来,却没有让任意两个位置在一层内直接交互。

Transformer 的设计由此落到三个 desiderata:每层计算复杂度、可并行化程度,以及任意两位置之间的最大路径长度。self-attention 的吸引力来自这三者的组合:它让所有位置可以同时计算,并让任意两个位置在一层内建立直接联系。代价也同时出现:attention matrix 带来 O(n2)O(n^2) 的序列长度成本。

self-attention 接管序列交互

Transformer 的整体形式仍是标准 seq2seq:编码器把输入序列 (x1,,xn)(x_1,\dots,x_n) 映射为连续表示序列 z=(z1,,zn)z=(z_1,\dots,z_n),解码器再基于这些表示逐步生成输出 (y1,,ym)(y_1,\dots,y_m)。编码器每层由 multi-head self-attention 与 position-wise feed-forward network 两个子层组成;解码器在此基础上增加 encoder-decoder attention,并在 decoder self-attention 中加入 mask,保证生成位置不能访问未来 token。每个子层外都有 residual connection 和 layer normalization。base 模型采用 N=6N=6dmodel=512d_{model}=512dff=2048d_{ff}=2048h=8h=8

graph TD A[输入 token embedding + positional encoding] --> B[Encoder self-attention + FFN stack] B --> C[编码后的序列表示] D[目标端已生成 token + positional encoding] --> E[Masked decoder self-attention] E --> F[Encoder-decoder attention] C --> F F --> G[Decoder FFN + Linear + Softmax] G --> H[下一个 token 概率]

scaled dot-product attention 是核心公式:

Attention(Q,K,V)=softmax(QKTdk)V.\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V.

QQ 是 query matrix,KK 是 key matrix,VV 是 value matrix,dkd_k 是 key 的维度。计算顺序可以直接读成三步:用 QKTQK^T 得到 query 与所有 key 的 compatibility scores;除以 dk\sqrt{d_k} 后经过 softmax 得到权重;用这些权重对 value 做加权求和。若 Q,K,VQ,K,V 都来自同一序列,这就是 self-attention:每个位置都能根据整段序列内容重新汇总自己的表示。

缩放项 dk\sqrt{d_k} 不是随意补丁。论文指出,当 dkd_k 较大时,dot product 的数值会变大,使 softmax 落入梯度很小的区域。脚注给出直观解释:如果 qqkk 的各分量独立、均值为 0、方差为 1,则

qk=i=1dkqikiq\cdot k=\sum_{i=1}^{d_k}q_i k_i

的方差为 dkd_k。除以 dk\sqrt{d_k} 可以把分数尺度拉回较稳定的范围,使训练更可控。

论文 Table 1 把 self-attention 与 recurrent、convolutional layer 的差异压缩成三列:

层类型 每层复杂度 最少顺序操作数 最大路径长度
Self-Attention O(n2d)O(n^2 d) O(1)O(1) O(1)O(1)
Recurrent O(nd2)O(n d^2) O(n)O(n) O(n)O(n)
Convolutional O(knd2)O(k n d^2) O(1)O(1) O(logkn)O(\log_k n)
Restricted Self-Attention O(rnd)O(r n d) O(1)O(1) O(n/r)O(n/r)

这张表说明 self-attention 的主张带有条件。对于机器翻译中的句子级序列,论文认为 nn 通常小于表示维度 dd,self-attention 在并行化和路径长度上更有优势;对于极长序列,O(n2d)O(n^2d) 会成为瓶颈,论文也明确把 restricted self-attention 作为可能方向。

多头、前馈层与位置编码的分工

单头 attention 会在一个表示空间里完成一次加权汇总。论文指出,单头会受到 averaging 的限制:不同类型的依赖关系可能在同一次汇总中相互混合。multi-head attention 的作用是把 query、key、value 投影到多个子空间,在每个子空间并行执行 attention,再拼接结果:

MultiHead(Q,K,V)=Concat(head1,,headh)WO,\mathrm{MultiHead}(Q,K,V)=\mathrm{Concat}(head_1,\dots,head_h)W^O,

其中

headi=Attention(QWiQ,KWiK,VWiV).head_i=\mathrm{Attention}(QW_i^Q,KW_i^K,VW_i^V).

base 模型取 h=8h=8,并设

dk=dv=dmodel/h=64.d_k=d_v=d_{model}/h=64.

每个 head 的维度降低后,总计算量仍接近全维单头 attention。multi-head 因而承担的是表达分解功能:让模型在不同表示子空间和不同位置关系上并行建立联系。

attention 子层负责跨位置的信息交换,position-wise feed-forward network 负责每个位置内部的非线性变换。论文将 FFN 写成

FFN(x)=max(0,xW1+b1)W2+b2.\mathrm{FFN}(x)=\max(0,xW_1+b_1)W_2+b_2.

它对每个位置相同地独立作用,也可以理解为 kernel size 为 1 的两层卷积。没有 FFN,层内计算主要是线性投影和加权求和;加入 FFN 后,每个位置的表示能够在接收上下文信息后继续经历非线性变换。

移除 recurrence 和 convolution 之后,模型还需要注入顺序信息。论文使用 sinusoidal positional encoding,并将其直接加到 input embedding 上:

PE(pos,2i)=sin(pos/100002i/dmodel),PE(pos,2i)=\sin\left(pos/10000^{2i/d_{model}}\right), PE(pos,2i+1)=cos(pos/100002i/dmodel).PE(pos,2i+1)=\cos\left(pos/10000^{2i/d_{model}}\right).

pospos 是位置,ii 是维度。论文选择这种编码的理由包括:它与 embedding 同维,可以直接相加;对于固定偏移 kkPEpos+kPE_{pos+k} 可以表示为 PEposPE_{pos} 的线性函数,因此作者推测模型可能更容易学习相对位置关系。论文也比较了 learned positional embeddings,结果 nearly identical;选择 sinusoidal version 的额外理由是可能外推到比训练时更长的序列。

训练配方与实验支撑

论文的证据主要来自 WMT 2014 机器翻译实验、模型变体实验和英语 constituency parsing 迁移。训练数据方面,English-German 约 450 万句对,共享 BPE 词表约 37000;English-French 约 3600 万句对,采用 32000 word-piece 词表。batch 按近似序列长度组织,每个 batch 约含 25000 source tokens 和 25000 target tokens。硬件为 8 张 NVIDIA P100 GPU。base 模型训练 100,000 steps,约 12 小时;big 模型训练 300,000 steps,约 3.5 天。

优化器使用 Adam,参数为 β1=0.9\beta_1=0.9β2=0.98\beta_2=0.98ϵ=109\epsilon=10^{-9}。学习率 schedule 为

lrate=dmodel0.5min(step_num0.5, step_numwarmup_steps1.5),lrate=d_{model}^{-0.5}\cdot \min(step\_num^{-0.5},\ step\_num\cdot warmup\_steps^{-1.5}),

其中 warmup_steps=4000warmup\_steps=4000。这意味着学习率先线性升高,随后按 step0.5step^{-0.5} 衰减。论文还使用 dropout 和 label smoothing,并指出 label smoothing 会损害 perplexity,但会提升 accuracy 和 BLEU。这个细节说明作者优化的是最终任务指标,而非单一困惑度。

Table 2 同时报告 BLEU 和训练成本估计:

模型 EN-DE BLEU EN-FR BLEU EN-DE 训练成本 EN-FR 训练成本
ConvS2S 25.16 40.46 9.6×10189.6\times10^{18} 1.5×10201.5\times10^{20}
MoE 26.03 40.56 2.0×10192.0\times10^{19} 1.2×10201.2\times10^{20}
Transformer (base) 27.3 38.1 3.3×10183.3\times10^{18}
Transformer (big) 28.4 41.8 2.3×10192.3\times10^{19}

这些结果支撑论文的两个核心声称:attention-only 模型能够达到强翻译质量,且训练成本具有竞争力。英德任务上,Transformer big 达到 28.4 BLEU,超过此前最佳结果;英法任务上,big 模型达到 41.8 BLEU,并在 8 张 P100 上训练 3.5 天。

Table 3 的模型变体实验检查关键设计。单头 attention 比最佳多头设置低 0.9 BLEU,说明 multi-head 本身有经验贡献;head 数继续增多并不保证提升;减小 dkd_k 会损害效果,作者据此认为 compatibility 判断并不轻松;更大的模型通常更好;dropout 对避免过拟合重要;learned positional embeddings 与 sinusoidal encoding 结果几乎相同。这些实验不能把每个机制都隔离成严格因果证明,但它们把主要设计选择和性能变化之间的关系讲得相当清楚。

论文还把 Transformer 用于 English constituency parsing。4-layer Transformer 在 WSJ only 设定上得到 91.3 F1,在 semi-supervised 设定上达到 92.7 F1。这个结果提供了 attention-only transduction 架构可以迁移到结构约束更强任务的初步证据,但它并不证明 Transformer 已经在所有结构化预测任务上占优。

attention-only 架构的证据边界

论文真正证明的是一个边界清晰的主张:在 2017 年的机器翻译设定下,一个完全依赖 self-attention 来计算输入和输出表示、去掉 sequence-aligned RNN 与 convolution 的 sequence transduction 模型,可以同时取得强性能和较优训练效率。self-attention 的优势来自较少的顺序操作数和常数级最大路径长度;multi-head attention 缓解单头平均化造成的表达限制;训练配方和大规模翻译实验给出了经验支撑。

这篇论文没有证明 attention 在任何长度、任何任务、任何资源条件下都优于 recurrence 或 convolution。O(n2)O(n^2) 的 attention cost 在长序列中会成为真实问题,论文也在第四节和结论中把 restricted attention 列为未来方向。后来稀疏注意力、局部注意力、线性化注意力和长上下文模型的发展,正是沿着这个边界继续推进。

如果把本文作为复习材料,最应该记住的是这条论证链:sequence transduction 的顺序计算限制训练并行化;self-attention 以全局直接路由降低最大路径长度;multi-head、FFN 与 positional encoding 分别补上表达分解、位置内非线性和顺序信息;WMT 翻译实验显示这套 attention-only 架构在当时已经足够有效。

较新文章舍入误差、Taylor 系数与 reverse-mode 的数值分析前史2026年4月23日

相关文章