Attention Is All You Need(论文)
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin. Attention Is All You Need. NIPS 2017. arXiv:1706.03762(HTML、PDF)。八位作者均标注为同等贡献。文首注明:在注明出处的前提下,Google 允许在学术或新闻作品中复制该文的表与图。
中文译本:Arthur Chiao、GitHub LaTeX 中译、博客园。民间译本质量不一,英德/英法 BLEU 有的把摘要 41.8 和正文 41.0 抄混。
摘要
当时占主导的序列转换(sequence transduction)模型,建立在编码器—解码器结构上的复杂循环网络或卷积网络。表现最好的模型还会用注意力把编码器与解码器连起来。
本文提出一种简单网络架构 Transformer:只基于注意力机制,完全不用循环和卷积。在两项机器翻译任务上,质量更高、更易并行、训练时间显著更短。
- WMT 2014 英→德:28.4 BLEU,比此前最佳结果(含模型集成)高 2 个 BLEU 以上。
- WMT 2014 英→法:单模型 41.8 BLEU(正文 6.1 节叙述为 41.0;表 2 为 41.8),在 8 块 GPU 上训练 3.5 天,成本只占文献中最佳模型的一小部分。
- 在英语成分句法分析上,无论训练数据多还是少,都表明该架构可以推广到翻译以外的任务。
1 引言
循环神经网络,尤其 LSTM 与门控循环网络,已被确立为语言建模、机器翻译等序列建模与转换任务的主流。循环模型把计算沿符号位置展开:位置 (t) 的隐状态 (h_t) 依赖 (h_{t-1}) 与当前位置输入。这种顺序性阻碍单个训练样本内部的并行;序列一长,内存又限制跨样本的 batch,问题更严重。因子分解技巧、条件计算可以提高效率,但顺序计算这一条约束仍然在。
注意力已经是序列模型里的常规组件:它可以建模依赖,而不必管依赖在输入或输出里隔了多远。但除少数工作外,注意力仍与循环网络一起用。
本文提出 Transformer:去掉循环,完全靠注意力建立输入与输出之间的全局依赖。并行度显著提高;在 8 块 P100 上训练约 12 小时,即可达到新的翻译质量水平(指 base 模型)。
2 背景
减少顺序计算,也是 Extended Neural GPU、ByteNet、ConvS2S 的出发点。它们用卷积对所有位置并行算隐表示。任意两个位置之间要建立联系,所需运算次数随距离增长:ConvS2S 线性,ByteNet 对数。远距离依赖因此更难学。
在 Transformer 里,这一次数变成常数。代价是对注意力加权位置做平均会降低有效分辨率;第 3.2 节用多头注意力抵消。
自注意力(self-attention,也称 intra-attention)把同一序列里不同位置联系起来,以计算该序列的表示。它已用于阅读理解、摘要、文本蕴含、与任务无关的句子表示等。端到端记忆网络用循环式注意力代替按序列对齐的循环,在简单问答与语言建模上有效。
据作者所知,Transformer 是第一个完全靠自注意力计算输入与输出表示、而不使用按序列对齐的 RNN 或卷积的转换模型。
3 模型架构
多数有竞争力的神经序列转换模型是编码器—解码器。编码器把输入符号序列 ((x_1,\ldots,x_n)) 映射为连续表示 (\mathbf{z}=(z_1,\ldots,z_n))。解码器据此一次一个符号地生成 ((y_1,\ldots,y_m))。每一步是自回归的:生成下一个符号时,把已经生成的符号当作额外输入。
Transformer 沿用这一总体结构。编码器、解码器都用堆叠的自注意力和逐位置全连接层(原文 Figure 1 左右两半)。
3.1 编码器栈与解码器栈
编码器。 (N=6) 层相同的层。每层两个子层:多头自注意力;逐位置全连接前馈网络。每个子层外包残差连接,再接层归一化:
[ \mathrm{LayerNorm}(x + \mathrm{Sublayer}(x)) ]
所有子层以及嵌入层的输出维度均为 (d_{\mathrm{model}}=512),以便做残差。
解码器。 同样 (N=6) 层。在编码器那两个子层之外,插入第三个子层:对编码器栈的输出做多头注意力。同样使用残差与层归一化。解码器里的自注意力被改成不能看后续位置。这种掩码,再加上输出嵌入右移一个位置,保证对位置 (i) 的预测只依赖小于 (i) 的已知输出。
3.2 注意力
注意力:把一个 query 和一组 key–value 对映射到一个输出;四者都是向量。输出是 value 的加权和;每个 value 的权重由 query 与对应 key 的兼容性函数算出。
3.2.1 缩放点积注意力
输入:维度 (d_k) 的 query 与 key,维度 (d_v) 的 value。用 query 与所有 key 做点积,再除以 (\sqrt{d_k}),经 softmax 得到 value 上的权重。一组 query 打成矩阵 (Q),key、value 打成 (K)、(V):
[ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V ]
两种常用注意力:加性注意力(Bahdanau 等)与点积(乘性)注意力。点积注意力与上式相同,只是没有 (1/\sqrt{d_k}) 这个缩放。加性注意力用单隐层前馈网算兼容性。理论复杂度相近,实践上点积可用高度优化的矩阵乘,更快、更省空间。
(d_k) 较小时两者表现接近;(d_k) 较大且不缩放时,加性更好。作者认为 (d_k) 大时点积幅值变大,把 softmax 推到梯度极小的区域(若 (q,k) 各维独立、均值 0 方差 1,则 (q\cdot k) 的方差为 (d_k))。因此除以 (\sqrt{d_k})。
3.2.2 多头注意力
不是用 (d_{\mathrm{model}}) 维做一次注意力,而是把 (Q,K,V) 用不同的、可学习的线性投影做 (h) 次,投影到 (d_k,d_k,d_v),再并行做注意力,把 (d_v) 维输出拼接起来,再投影一次:
[ \mathrm{MultiHead}(Q,K,V)=\mathrm{Concat}(\mathrm{head}_1,\ldots,\mathrm{head}_h)W^{O} ]
[ \mathrm{head}_i=\mathrm{Attention}(QW_i^{Q},,KW_i^{K},,VW_i^{V}) ]
其中 (W_i^{Q}\in\mathbb{R}^{d_{\mathrm{model}}\times d_k}) 等。多头让模型能同时从不同表示子空间、不同位置取信息;单头会被平均抑制。
本文 (h=8)。每个头 (d_k=d_v=d_{\mathrm{model}}/h=64)。头变窄之后,总计算量与全维度单头相近。
3.2.3 在本模型中的三种用法
- 编码器—解码器注意力。 query 来自上一解码器层;key 与 value 来自编码器输出。解码器每个位置可以关注输入序列所有位置。对应以往 seq2seq 里的编码器—解码器注意力。
- 编码器自注意力。 (Q,K,V) 都来自编码器上一层输出。每个位置可以关注上一层所有位置。
- 解码器自注意力。 每个位置可以关注解码器中不超过该位置的位置。为保持自回归、禁止信息左流,在缩放点积注意力里把 softmax 输入中非法连接置为 (-\infty)。
3.3 逐位置前馈网络
每个编码器、解码器层除注意力子层外,还有对每个位置单独、相同地施加的全连接前馈网:两层线性,中间 ReLU。
[ \mathrm{FFN}(x)=\max(0, xW_1+b_1)W_2+b_2 ]
不同位置共享同一套线性变换;层与层之间参数不同。也可看成核大小为 1 的两次卷积。输入输出维 (d_{\mathrm{model}}=512),内层 (d_{ff}=2048)。
3.4 嵌入与 Softmax
与其他序列转换模型一样,用可学习嵌入把输入、输出 token 变成 (d_{\mathrm{model}}) 维向量。解码器输出经线性变换与 softmax,得到下一个 token 的概率。两个嵌入层与 softmax 前的线性变换共享同一权重矩阵。嵌入层中把这些权重乘以 (\sqrt{d_{\mathrm{model}}})。
3.5 位置编码
模型没有循环也没有卷积,必须向序列注入相对或绝对位置信息。在编码器、解码器栈底部,把位置编码加到输入嵌入上;维度同为 (d_{\mathrm{model}}),以便相加。
本文用不同频率的正弦与余弦:
[ PE_{(pos,2i)}=\sin(pos/10000^{2i/d_{\mathrm{model}}}) ]
[ PE_{(pos,2i+1)}=\cos(pos/10000^{2i/d_{\mathrm{model}}}) ]
(pos) 是位置,(i) 是维度。波长从 (2\pi) 到 (10000\cdot 2\pi) 成几何级数。选择该函数是因为:对任意固定偏移 (k),(PE_{pos+k}) 可写成 (PE_{pos}) 的线性函数,便于按相对位置做注意力。
也试过可学习的位置嵌入,与正弦版本结果几乎相同(表 3 行 E)。选用正弦,是因为它可能外推到训练时未见过的序列长度。
4 为什么用自注意力
比较自注意力、循环、卷积三类层:把变长符号序列 ((x_1,\ldots,x_n)) 映到等长 ((z_1,\ldots,z_n)),(x_i,z_i\in\mathbb{R}^{d})。三条标准:每层计算复杂度;可并行程度(最少顺序操作数);网络中长程依赖的路径长度。路径越短,长程依赖越好学。
表 1. (n) 为序列长度,(d) 为表示维度,(k) 为卷积核宽,(r) 为受限自注意力的邻域大小。
| 层类型 | 每层复杂度 | 顺序操作 | 最大路径长度 |
|---|---|---|---|
| 自注意力 | (O(n^{2}\cdot d)) | (O(1)) | (O(1)) |
| 循环 | (O(n\cdot d^{2})) | (O(n)) | (O(n)) |
| 卷积 | (O(k\cdot n\cdot d^{2})) | (O(1)) | (O(\log_{k} n)) |
| 受限自注意力 | (O(r\cdot n\cdot d)) | (O(1)) | (O(n/r)) |
自注意力用常数次顺序操作连接所有位置;循环需要 (O(n))。当 (n<d) 时(机器翻译里 word-piece / BPE 句子表示常见如此),自注意力比循环更快。极长序列可以把注意力限制在半径 (r) 的邻域,最大路径变为 (O(n/r));文中列为未来工作。
单层卷积在 (k<n) 时连不满所有位置对;要连满需要堆 (O(n/k)) 层(连续核)或 (O(\log_{k} n)) 层(膨胀卷积),从而加长最长路径。
附带好处:自注意力可能更可解释。附录可视化显示,不同头学会不同工作,不少头与句法、语义结构有关。
5 训练
5.1 数据与 batch
英德:WMT 2014,约 450 万句对;BPE,源/目标共享约 37,000 token 词表。英法:WMT 2014,3600 万句,32,000 word-piece 词表。按近似长度组 batch;每个训练 batch 约 25,000 个源 token 与 25,000 个目标 token。
5.2 硬件与日程
一台机器、8 块 NVIDIA P100。base:每步约 0.4 秒,共 100,000 步(12 小时)。big:每步 1.0 秒,300,000 步(3.5 天)。
5.3 优化器
Adam,(\beta_1=0.9),(\beta_2=0.98),(\epsilon=10^{-9})。学习率:
[ lrate = d_{\mathrm{model}}^{-0.5}\cdot \min(\mathrm{step_num}^{-0.5},; \mathrm{step_num}\cdot \mathrm{warmup_steps}^{-1.5}) ]
前 (\mathrm{warmup_steps}) 步线性升高,之后按步数平方根的倒数下降。(\mathrm{warmup_steps}=4000)。
5.4 正则
残差 Dropout。 每个子层输出在与输入相加、归一化之前做 dropout;嵌入与位置编码之和也做 dropout。base 模型 (P_{drop}=0.1)。
标签平滑。 (\epsilon_{ls}=0.1)。会损害困惑度(模型学得更不确定),但提高准确率与 BLEU。
6 结果
6.1 机器翻译
表 2(newstest2014;训练成本为估计 FLOPs)。Transformer (big) 英德 28.4,英法 41.8;base 英德 27.3,英法 38.1。英德 big 比此前最佳(含集成)高 2 BLEU 以上。base 也超过此前所有已发表模型与集成,训练成本只占竞争模型的一小部分。英法 big 的训练成本不到此前 SOTA 的 1/4。英法 big 使用 (P_{drop}=0.1) 而非 0.3。
推理:base 对最后 5 个 checkpoint 做平均(每 10 分钟一个);big 平均最后 20 个。束搜索束宽 4,长度惩罚 (\alpha=0.6)。最大输出长度为输入长度 + 50,可提前结束。
6.2 模型变体
在英德开发集 newstest2013 上改 base(束搜索,不做 checkpoint 平均)。要点(表 3):
- (A) 头数与 (d_k,d_v):单头比最佳设置差 0.9 BLEU;头太多质量也下降。
- (B) 减小 (d_k) 损害质量,说明兼容性不容易,可能需要比点积更复杂的函数。
- (C)(D) 更大的模型更好;dropout 对过拟合很有帮助。
- (E) 正弦位置编码换成可学习位置嵌入,结果几乎相同。
- big:(N=6),(d_{\mathrm{model}}=1024),(d_{ff}=4096),(h=16),(P_{drop}=0.3),300K 步,约 2.13 亿参数。base 约 6500 万参数。
6.3 英语成分句法分析
输出有强结构约束,且比输入长得多。RNN seq2seq 在小数据上未达到当时 SOTA。4 层 Transformer,(d_{\mathrm{model}}=1024)。仅 WSJ(约 4 万句)F1 91.3;半监督(约 1700 万句)92.7。除 RNN Grammar 外,好于此前报告的模型。仅用 WSJ 4 万句时,也超过 BerkeleyParser。任务相关调参很少。
7 结论
Transformer 是第一个完全基于注意力的序列转换模型,用多头自注意力替换编码器—解码器里最常用的循环层。翻译任务上,训练显著快于基于循环或卷积的架构;英德、英法均达到新的 SOTA,英德上最佳模型超过此前所有集成。
作者计划把 Transformer 扩展到文本以外的输入输出模态,研究局部、受限注意力以处理图像、音频、视频等大输入输出,并使生成不那么顺序化。
训练与评测代码:https://github.com/tensorflow/tensor2tensor。
附录中的注意力可视化(论文所述)
编码器第 5 层(共 6 层)的自注意力:多个头关注动词 making 的远距离依赖,补全 making…more difficult。另有头表现为指代消解(如 its)。许多头表现出与句子结构相关的行为,且不同头做不同的事。