Post
Attention Is All You Need:为什么序列建模可以把循环拿掉
基于论文原文重建 Transformer 的核心论证:作者为何要摆脱 recurrence,self-attention 与 multi-head 分别解决了什么问题,以及训练与实验究竟支撑了哪些结论。
论文信息
| 项目 | 内容 |
|---|---|
| 论文标题 | Attention Is All You Need |
| 作者 | Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin |
| 年份 | 2017 |
| 会议 | NeurIPS 2017 |
| 版本依据 | arXiv:1706.03762v7 |
| DOI | 无 |
| 主要任务 | Sequence transduction,重点是机器翻译 |
| 核心主张 | 用完全基于 attention 的 encoder-decoder 替代 recurrent / convolutional 主干 |
| 主要证据 | WMT 2014 英德、英法翻译结果;结构变体实验;英语 constituency parsing |
这篇论文最重要的问题很具体:在序列到序列建模里,能不能把沿时间步展开的主干计算拿掉,只保留 attention,并且仍然得到强结果与更好的并行性。 论文的价值不只在于提出了一个新名字,而在于它把这个问题拆成了可验证的几个部分:为什么 recurrence 会成为瓶颈,self-attention 如何承担序列内部的信息交换,multi-head 为什么能缓解单头平均化带来的表达损失,以及实验是否真的支撑这些设计。
为什么作者要去掉 recurrence
论文开头首先针对的是当时主流的 encoder-decoder 路线。无论是 RNN、LSTM 还是 GRU,它们都把序列位置和计算时间绑定在一起。若第 个隐藏状态写成
那么同一个样本内部的计算天然带有顺序依赖:第 步要等第 步完成。这会直接限制训练并行化。随着序列变长,显存又限制了 batch 大小,这个问题会更明显。
作者在背景部分还比较了卷积路线,例如 ByteNet 和 ConvS2S。卷积能把不同位置的表示并行算出来,但如果两个位置相隔很远,它们之间的交互通常仍要经过多层传播。论文把这个差别讲得很清楚:对于长距离依赖,网络中信号要跨过的路径长度很重要。路径越短,学习越容易。
这正是 Transformer 的切入点。作者不是先宣称 attention “更先进”,而是先指出两个目标:
- 减少顺序操作数,提高并行性;
- 缩短远距离位置之间的交互路径。
在这个意义上,去掉 recurrence 是一项围绕计算组织方式展开的结构性决策。Transformer 仍然保留 encoder-decoder 框架,也仍然做自回归生成,但序列内部信息流动的主要载体换成了 attention。
self-attention 如何承担序列内部的计算
Transformer 的整体形式仍是标准 seq2seq:编码器把输入序列 映射成表示序列 ,解码器再基于这些表示逐步生成输出 。变化集中在每一层内部。
编码器每层包含两个子层:
- multi-head self-attention
- position-wise feed-forward network
解码器每层则包含三个子层:
- masked multi-head self-attention
- encoder-decoder attention
- position-wise feed-forward network
每个子层外都有 residual connection 和 layer normalization。论文 base 模型取 、、、头数 。
真正的核心公式是 scaled dot-product attention:
这里:
- 是 query matrix;
- 是 key matrix;
- 是 value matrix;
- 是 key 的维度。
它的含义可以按步骤理解。先用 计算当前位置与所有候选位置之间的相关性分数,再经过 softmax 变成权重,最后对 做加权求和。若 都来自同一序列,这就是 self-attention:一个位置可以直接根据整段序列的内容汇总自己所需的信息。
论文对缩放项 也给了明确理由。作者指出,当 较大时,点积数值会变大,使 softmax 进入梯度很小的区域,训练变难。脚注里进一步说明:如果 与 的各分量独立、均值为 0、方差为 1,那么 的方差与 成正比。所以这项缩放服务于训练稳定性。
self-attention 相比 recurrence 的优势,论文在 Table 1 中总结得非常直接:
| 层类型 | 每层复杂度 | 最少顺序操作数 | 最大路径长度 |
|---|---|---|---|
| Self-Attention | |||
| Recurrent | |||
| Convolutional | |||
| Restricted Self-Attention |
这张表最值得记住的是最后一列。self-attention 让任意两个位置可以在一层内直接发生交互,因此路径长度是常数级。对 recurrent 网络,信息要沿时间步连续传递,路径长度随序列长度增长。作者因此认为 self-attention 更适合学习长距离依赖。
论文也没有回避代价。self-attention 的复杂度中有 项,所以当序列极长时,attention matrix 会变得昂贵。原文明确提到:在机器翻译这类句子级任务中,序列长度 往往小于表示维度 ,self-attention 更有优势;若面对更长序列,可以考虑 restricted self-attention。这说明论文的结论是带条件的。
multi-head、FFN 与位置编码分别补上了什么
如果只有一个 attention 头,模型会在同一个表示空间里完成一次加权汇总。作者认为这会带来一个问题:不同类型的依赖关系会被平均化,表达能力受限。因此他们把 attention 扩展成 multi-head:
其中
也就是说,模型先把 线性投影到多个子空间,在每个子空间里并行做 attention,再把结果拼接回来。论文对它的解释非常明确:multi-head attention 允许模型在不同表示子空间、不同位置上联合关注信息;若只有单头,这种能力会被 averaging 抑制。
base 模型里 ,并设置
这样每个 head 的维度变小了,总计算量仍与全维单头 attention 处在相近量级。multi-head 的作用因此不只是“多几个通道”,更是让模型把不同依赖模式拆开学习。
在 attention 之外,每层还接一个 position-wise feed-forward network:
它对每个位置独立作用,所以 attention 与 FFN 的分工很清楚:
- attention 负责跨位置的信息交换;
- FFN 负责单位置上的非线性变换。
剩下还有一个关键问题:既然没有 recurrence,也没有 convolution,模型从哪里知道顺序?论文的答案是 positional encoding。作者把位置编码直接加到 input embedding 上,并采用正弦余弦形式:
其中 表示位置, 表示维度下标。原文给出的动机有两点。第一,这种编码与 embedding 同维,可以直接相加。第二,对于任意固定偏移 , 可以表示成 的线性函数,作者据此推测模型可能更容易学习相对位置信息。
值得注意的是,论文还做了 learned positional embeddings 的对比实验,结果与正弦位置编码“nearly identical”。因此,原文并没有证明正弦编码在当时实验里明显更强;它更像是一个兼顾外推性的设计选择。
训练设置与实验如何支撑论文结论
论文的核心证据来自两类实验:机器翻译主结果,以及结构变体实验。
训练数据方面:
- WMT 2014 English-German:约 450 万句对,共享 BPE 词表约 37000;
- WMT 2014 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,参数为:
学习率 schedule 写成
其中 。这意味着前期线性升高,之后按 衰减。论文还使用 dropout 和 label smoothing,且明确指出 label smoothing 会损害 perplexity,但会提升 accuracy 和 BLEU。这一细节很重要,因为它说明作者关心的是最终任务指标,而不是单一训练损失。
机器翻译主结果
在 Table 2 中,Transformer 同时报告了 BLEU 和训练成本(FLOPs 估计):
| 模型 | EN-DE BLEU | EN-FR BLEU | EN-DE 训练成本 | EN-FR 训练成本 |
|---|---|---|---|---|
| ConvS2S | 25.16 | 40.46 | ||
| MoE | 26.03 | 40.56 | ||
| Transformer (base) | 27.3 | 38.1 | — | |
| Transformer (big) | 28.4 | 41.8 | — |
作者据此声称两件事:
- 翻译质量具有竞争力,英德任务上超过此前最佳结果,英法任务上达到当时单模型最优;
- 训练成本明显更低,尤其是 base 模型。
这正好对应论文一开始的目标:不仅要证明“attention-only 模型能工作”,还要证明它在并行化和训练效率上是有现实收益的。
结构变体实验
Table 3 的意义在于检查关键设计是否真的重要,而不是靠主结果“顺便成功”。论文在英德开发集上改变模型配置,得到几条很清楚的结论:
- 单头 attention 比最佳多头设置低 0.9 BLEU,说明 multi-head 本身有贡献;
- head 数继续增多也会掉点,表明头数并非越多越好;
- 减小 会损害效果,作者据此认为 compatibility 的判断并不轻松;
- 更大的模型通常效果更好;
- dropout 对避免过拟合同样重要;
- learned positional embeddings 与 sinusoidal encoding 结果几乎相同。
这些实验没有把每个机制都“严格隔离”到因果证明的程度,但足以说明 Transformer 的主要部件并非任意拼接。论文中的设计选择与观测到的性能变化之间是有对应关系的。
跨任务泛化
作者还把 Transformer 用在英语 constituency parsing。4-layer Transformer 在 WSJ only 设定上得到 91.3 F1,在 semi-supervised 设定上达到 92.7 F1。原文对这个结果的措辞相对谨慎:它说明 attention-only 的 transduction 架构不只适用于翻译,也能迁移到结构约束更强、输出更长的任务。
这里最稳妥的解读是:论文为 Transformer 的泛化能力提供了初步证据。它没有由此证明 Transformer 已经在所有结构化预测任务上占优,但足以说明这套架构不是翻译场景里的偶然特例。
这篇论文真正证明了什么
如果只保留论文本身能够支撑的结论,可以归纳为四点。
第一,作者提出了第一个完全依赖 self-attention 来计算输入与输出表示、同时去掉 sequence-aligned RNN 和 convolution 的 sequence transduction 模型。这一点是明确的方法主张。
第二,self-attention 之所以能承担主干计算,不只是因为它“能聚合上下文”,更因为它降低了顺序操作数,并把任意两位置之间的交互路径压缩到常数级。这是论文替换 recurrence 的理论动机。
第三,multi-head attention 的作用是让模型在不同表示子空间、不同位置上并行建立关系,从而减轻单头平均化带来的表达损失。Table 3 给了经验支持。
第四,在 2017 年的机器翻译设定下,这套架构同时展现了强性能与较优训练效率。WMT 2014 英德、英法实验构成了论文最核心的证据链。
同样需要保留边界。论文没有证明 attention 在任何长度、任何任务、任何资源条件下都优于 recurrence 或 convolution;也没有解决长序列下的 成本问题。作者自己在第四节和结论里都承认,restricted attention 是未来方向之一。正因为这个边界存在,后来一系列稀疏注意力、局部注意力和线性化注意力工作才会继续出现。
从今天回看,《Attention Is All You Need》的关键贡献可以概括为:它把 sequence transduction 的核心计算从“沿时间步推进”改写成了“通过 attention 在全局范围内直接路由信息”,并用训练配方与实验结果证明这件事在当时已经足够可行。