# 2017 Vaswani et al.

Attention Is All You Need

Attention Is All You Need Ashish Vaswani Google Brain avaswani@google.com Noam Shazeer Google Brain noam@google.com Niki Parmar Google Research nikip@google.com Jakob Uszkoreit...

精粹译文

Attention Is All You Need

Ashish Vaswani* Google Brain avaswani@google.com

Noam Shazeer* Google Brain noam@google.com

Niki Parmar* Google Research nikip@google.com

Jakob Uszkoreit* Google Research usz@google.com

Llion Jones* Google Research llion@google.com

Aidan N. Gomez* † University of Toronto aidan@cs.toronto.edu

Łukasz Kaiser* Google Brain lukaszkaiser@google.com

Illia Polosukhin* ‡ illia.polosukhin@gmail.com


摘要

主流的序列转换模型通常基于包含编码器和解码器的复杂循环或卷积神经网络。表现最好的模型还会通过注意力机制将编码器和解码器连接起来。我们提出了一种新的简单网络架构——Transformer,它完全基于注意力机制,彻底摒弃了循环和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优,同时更易于并行化,且训练所需时间显著减少。我们的模型在 WMT 2014 英德翻译任务上达到了 28.4 的 BLEU 分数,超过了包括集成模型在内的现有最佳结果 2 个以上的 BLEU。在 WMT 2014 英法翻译任务上,我们的模型在 8 个 GPU 上训练 3.5 天后,建立了 41.8 的单模型 BLEU 分数新纪录,这仅是文献中最佳模型训练成本的一小部分。我们通过将 Transformer 成功应用于英语成分句法分析(无论是在大数据集还是有限训练数据下),证明了它在其他任务上的良好泛化能力。


1. 引言

循环神经网络(Recurrent neural networks)、长短期记忆网络(Long short-term memory, LSTM)[13] 和门控循环神经网络(Gated recurrent neural networks)[7] 已被公认为序列建模和转换问题(如语言建模和机器翻译)中的最先进方法 [35, 2, 5]。此后,无数研究工作不断推动循环语言模型和编码器-解码器架构的边界 [38, 24, 15]。

循环模型通常沿着输入和输出序列的符号位置进行计算。通过将位置与计算时间步对齐,它们生成一系列隐藏状态 hth_t,作为前一个隐藏状态 ht1h_{t-1} 和位置 tt 的输入的函数。这种固有的顺序特性阻碍了训练示例内的并行化,这在序列较长时变得至关重要,因为内存限制限制了跨示例的批处理。最近的研究通过分解技巧 [21] 和条件计算 [32] 在计算效率方面取得了显著改进,同时后者也提高了模型性能。然而,顺序计算的基本约束依然存在。

注意力机制已成为各种任务中引人注目的序列建模和转换模型不可或缺的一部分,允许在不考虑输入或输出序列中距离的情况下对依赖关系进行建模 [2, 19]。然而,除少数情况外 [27],此类注意力机制通常与循环网络结合使用。

在本文中,我们提出了 Transformer,这是一种摒弃了循环,完全依赖注意力机制来建立输入和输出之间全局依赖关系的架构。Transformer 允许进行显著更多的并行化,并且在 8 个 P100 GPU 上训练仅需 12 小时,即可达到翻译质量的最先进水平。

2. 背景

减少顺序计算的目标也构成了扩展神经 GPU(Extended Neural GPU)[16]、ByteNet [18] 和 ConvS2S [9] 的基础,所有这些模型都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,关联两个任意输入或输出位置的信号所需的操作数量随位置间距离的增加而增加,ConvS2S 为线性增长,ByteNet 为对数增长。这使得学习远距离位置之间的依赖关系变得更加困难 [12]。在 Transformer 中,这被减少为恒定数量的操作,尽管代价是通过平均注意力加权位置而降低了有效分辨率,我们通过 3.2 节中描述的多头注意力(Multi-Head Attention)来抵消这种影响。

自注意力(Self-attention),有时称为内部注意力(intra-attention),是一种将单个序列的不同位置关联起来以计算序列表示的注意力机制。自注意力已成功应用于各种任务,包括阅读理解、抽象摘要、文本蕴含和学习与任务无关的句子表示 [4, 27, 28, 22]。

端到端记忆网络(End-to-end memory networks)基于循环注意力机制而非序列对齐的循环,已被证明在简单语言问答和语言建模任务上表现良好 [34]。

据我们所知,Transformer 是第一个完全依赖自注意力来计算其输入和输出表示,而不使用序列对齐的 RNN 或卷积的转换模型。在接下来的章节中,我们将描述 Transformer,阐述自注意力,并讨论其相对于 [17, 18] 和 [9] 等模型的优势。

3. 模型架构

大多数竞争性的神经序列转换模型都具有编码器-解码器结构 [5, 2, 35]。在这里,编码器将符号表示的输入序列 (x1,...,xn)(x_1, ..., x_n) 映射为连续表示序列 z=(z1,...,zn)z = (z_1, ..., z_n)。给定 zz,解码器随后一次生成一个符号的输出序列 (y1,...,ym)(y_1, ..., y_m)。在每一步,模型都是自回归的 [10],在生成下一个符号时将先前生成的符号作为额外输入。

Transformer 模型架构 图 1:Transformer 模型架构。

Transformer 遵循这种整体架构,在编码器和解码器中都使用了堆叠的自注意力和逐点全连接层,分别如图 1 的左半部分和右半部分所示。

3.1 编码器和解码器堆栈

编码器: 编码器由 N=6N=6 个相同层的堆栈组成。每一层有两个子层。第一个是多头自注意力机制,第二个是简单的逐位置全连接前馈网络。我们在每个子层周围采用残差连接 [11],随后进行层归一化 [1]。也就是说,每个子层的输出是 LayerNorm(x+Sublayer(x))\text{LayerNorm}(x + \text{Sublayer}(x)),其中 Sublayer(x)\text{Sublayer}(x) 是由子层本身实现的函数。为了促进这些残差连接,模型中的所有子层以及嵌入层产生的输出维度均为 dmodel=512d_{\text{model}} = 512

解码器: 解码器也由 N=6N=6 个相同层的堆栈组成。除了每个编码器层中的两个子层外,解码器还插入了第三个子层,该子层对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围采用残差连接,随后进行层归一化。我们还修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种掩码(masking)结合输出嵌入偏移一个位置的事实,确保了位置 ii 的预测只能依赖于小于 ii 的位置处的已知输出。

3.2 注意力

注意力函数可以描述为将查询(query)和一组键值对(key-value pairs)映射到输出,其中查询、键、值和输出都是向量。输出被计算为值的加权和,其中分配给每个值的权重由查询与相应键的兼容性函数计算得出。

左:缩放点积注意力。右:多头注意力由多个并行运行的注意力层组成。 图 2:(左) 缩放点积注意力。(右) 多头注意力由多个并行运行的注意力层组成。

3.2.1 缩放点积注意力

我们将我们的特定注意力称为“缩放点积注意力”(Scaled Dot-Product Attention)(图 2)。输入由维度为 dkd_k 的查询和键,以及维度为 dvd_v 的值组成。我们计算查询与所有键的点积,将每个点积除以 dk\sqrt{d_k},并应用 softmax 函数来获得值的权重。

在实践中,我们同时对一组查询计算注意力函数,并将它们打包成矩阵 QQ。键和值也打包成矩阵 KKVV。我们计算输出矩阵为:

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

两种最常用的注意力函数是加性注意力(additive attention)[2] 和点积(乘法)注意力。点积注意力与我们的算法相同,只是缩放因子为 1dk\frac{1}{\sqrt{d_k}}。加性注意力使用具有单个隐藏层的前馈网络来计算兼容性函数。虽然两者在理论复杂度上相似,但点积注意力在实践中更快且更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然对于较小的 dkd_k 值,这两种机制的表现相似,但对于较大的 dkd_k 值,加性注意力优于不带缩放的点积注意力 [3]。我们怀疑对于较大的 dkd_k 值,点积的量级会变大,从而将 softmax 函数推向梯度极小的区域4^4。为了抵消这种影响,我们将点积缩放 1dk\frac{1}{\sqrt{d_k}}

3.2.2 多头注意力

我们发现,与其使用 dmodeld_{\text{model}} 维的键、值和查询执行单个注意力函数,不如将查询、键和值分别线性投影 hh 次,使用不同的、学习到的线性投影到 dkd_kdkd_kdvd_v 维度,这样更有益。然后,我们对这些投影后的查询、键和值版本并行执行注意力函数,产生 dvd_v 维的输出值。这些值被连接起来并再次投影,得到最终值,如图 2 所示。

多头注意力允许模型共同关注来自不同表示子空间在不同位置的信息。使用单个注意力头时,平均会抑制这一点。

MultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O where headi=Attention(QWiQ,KWiK,VWiV)\text{where } \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)

其中投影是参数矩阵 WiQRdmodel×dkW_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}WiKRdmodel×dkW_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}WiVRdmodel×dvW_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v} 以及 WORhdv×dmodelW^O \in \mathbb{R}^{hd_v \times d_{\text{model}}}

在本文中,我们采用 h=8h=8 个并行注意力层或头。对于每一个,我们使用 dk=dv=dmodel/h=64d_k = d_v = d_{\text{model}}/h = 64。由于每个头的维度降低,总计算成本与具有全维度的单头注意力相似。

3.2.3 我们模型中注意力的应用

Transformer 以三种不同的方式使用多头注意力:

  • 在“编码器-解码器注意力”层中,查询来自前一个解码器层,而记忆键和值来自编码器的输出。这允许解码器中的每个位置关注输入序列中的所有位置。这模仿了序列到序列模型(如 [38, 2, 9])中典型的编码器-解码器注意力机制。
  • 编码器包含自注意力层。在自注意力层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中前一层的输出。编码器中的每个位置都可以关注编码器前一层中的所有位置。
  • 同样,解码器中的自注意力层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止解码器中的向左信息流以保持自回归属性。我们在缩放点积注意力内部通过掩盖(设置为 -\infty)softmax 输入中对应于非法连接的所有值来实现这一点。参见图 2。

3.3 逐位置前馈网络

除了注意力子层外,我们编码器和解码器中的每一层都包含一个全连接前馈网络,该网络分别且相同地应用于每个位置。这由两个线性变换组成,中间有一个 ReLU 激活。

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

虽然线性变换在不同位置上是相同的,但它们在层与层之间使用不同的参数。另一种描述方式是将其描述为两个核大小为 1 的卷积。输入和输出的维度为 dmodel=512d_{\text{model}} = 512,内部层的维度为 dff=2048d_{ff} = 2048

3.4 嵌入和 Softmax

与其他序列转换模型类似,我们使用学习到的嵌入将输入标记和输出标记转换为维度为 dmodeld_{\text{model}} 的向量。我们还使用通常的学习线性变换和 softmax 函数将解码器输出转换为预测的下一个标记概率。在我们的模型中,我们在两个嵌入层和预 softmax 线性变换之间共享相同的权重矩阵,类似于 [30]。在嵌入层中,我们将这些权重乘以 dmodel\sqrt{d_{\text{model}}}


表 1:不同层类型的最大路径长度、每层复杂度和最小顺序操作数。 nn 是序列长度,dd 是表示维度,kk 是卷积的核大小,rr 是受限自注意力中邻域的大小。

层类型每层复杂度顺序操作数最大路径长度
自注意力O(n2d)O(n^2 \cdot d)O(1)O(1)O(1)O(1)
循环O(nd2)O(n \cdot d^2)O(n)O(n)O(n)O(n)
卷积O(knd2)O(k \cdot n \cdot d^2)O(1)O(1)O(logk(n))O(\log_k(n))
自注意力(受限)O(rnd)O(r \cdot n \cdot d)O(1)O(1)O(n/r)O(n/r)

3.5 位置编码

由于我们的模型不包含循环和卷积,为了使模型能够利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈的底部向输入嵌入添加“位置编码”。位置编码与嵌入具有相同的维度 dmodeld_{\text{model}},因此两者可以相加。位置编码有很多选择,包括学习到的和固定的 [9]。

在本文中,我们使用不同频率的正弦和余弦函数:

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

其中 pospos 是位置,ii 是维度。也就是说,位置编码的每个维度对应一个正弦曲线。波长形成从 2π2\pi100002π10000 \cdot 2\pi 的几何级数。我们选择这个函数是因为我们假设它能让模型轻松学习通过相对位置进行关注,因为对于任何固定的偏移量 kkPEpos+kPE_{pos+k} 可以表示为 PEposPE_{pos} 的线性函数。

我们也尝试使用学习到的位置嵌入 [9] 代替,发现这两个版本产生了几乎相同的结果(见表 3 行 (E))。我们选择正弦版本是因为它可能允许模型外推到比训练期间遇到的序列长度更长的序列。

4. 为什么选择自注意力

在本节中,我们将自注意力层与通常用于将一个可变长度的符号表示序列 (x1,...,xn)(x_1, ..., x_n) 映射到另一个等长序列 (z1,...,zn)(z_1, ..., z_n)(其中 xi,ziRdx_i, z_i \in \mathbb{R}^d,例如典型序列转换编码器或解码器中的隐藏层)的循环和卷积层进行比较。为了激发我们对自注意力的使用,我们考虑了三个需求。

一个是每层的总计算复杂度。另一个是可以并行化的计算量,由所需的最小顺序操作数衡量。

第三个是网络中长距离依赖之间的路径长度。学习长距离依赖是许多序列转换任务中的一个关键挑战。影响学习此类依赖能力的一个关键因素是前向和后向信号在网络中必须遍历的路径长度。输入和输出序列中任意位置组合之间的这些路径越短,学习长距离依赖就越容易 [12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表 1 所示,自注意力层以恒定数量的顺序执行操作连接所有位置,而循环层需要 O(n)O(n) 顺序操作。在计算复杂度方面,当序列长度 nn 小于表示维度 dd 时,自注意力层比循环层更快,这在机器翻译中最先进模型使用的句子表示中通常是这种情况,例如 word-piece [38] 和 byte-pair [31] 表示。为了提高涉及非常长序列的任务的计算性能,可以将自注意力限制为仅考虑输入序列中以相应输出位置为中心的邻域大小为 rr 的区域。这将使最大路径长度增加到 O(n/r)O(n/r)。我们计划在未来的工作中进一步研究这种方法。

核宽度 k<nk < n 的单个卷积层不会连接所有输入和输出位置对。在连续核的情况下,这样做需要 O(n/k)O(n/k) 个卷积层堆栈,或者在扩张卷积 [18] 的情况下需要 O(logk(n))O(\log_k(n)) 个卷积层堆栈,这增加了网络中任意两个位置之间最长路径的长度。卷积层通常比循环层昂贵,因子为 kk。然而,可分离卷积 [6] 将复杂度显著降低至 O(knd+nd2)O(k \cdot n \cdot d + n \cdot d^2)。即使在 k=nk=n 的情况下,可分离卷积的复杂度也等于自注意力层和逐点前馈层的组合,这是我们在模型中采用的方法。

作为一个附带的好处,自注意力可以产生更具可解释性的模型。我们检查了来自我们模型的注意力分布,并在附录中展示和讨论了示例。不仅单个注意力头清楚地学习执行不同的任务,许多似乎还表现出与句子的句法和语义结构相关的行为。

5. 训练

本节描述我们模型的训练方案。

5.1 训练数据和批处理

我们在标准的 WMT 2014 英德数据集上进行了训练,该数据集包含约 450 万个句子对。句子使用字节对编码(byte-pair encoding)[3] 进行编码,该编码具有约 37000 个标记的共享源目标词汇表。对于英法翻译,我们使用了显著更大的 WMT 2014 英法数据集,包含 3600 万个句子,并将标记拆分为 32000 个 word-piece 词汇表 [38]。句子对按近似序列长度进行批处理。每个训练批次包含一组句子对,其中包含约 25000 个源标记和 25000 个目标标记。

5.2 硬件和调度

我们在配备 8 个 NVIDIA P100 GPU 的机器上训练我们的模型。对于使用整篇论文中描述的超参数的基础模型,每个训练步骤大约需要 0.4 秒。我们总共训练了 100,000 步或 12 小时的基础模型。对于我们的大型模型(在表 3 的最后一行描述),步长为 1.0 秒。大型模型训练了 300,000 步(3.5 天)。

5.3 优化器

我们使用了 Adam 优化器 [20],其中 β1=0.9,β2=0.98\beta_1 = 0.9, \beta_2 = 0.98ϵ=109\epsilon = 10^{-9}。我们根据以下公式在训练过程中改变学习率:

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

这对应于在前 warmup_steps 个训练步骤中线性增加学习率,此后与步数的平方根倒数成比例地减小。我们使用 warmup_steps = 4000。

5.4 正则化

我们在训练期间采用三种类型的正则化:


表 2:Transformer 在英德和英法 newstest2014 测试中以极低的训练成本实现了比之前最先进模型更好的 BLEU 分数。

模型BLEU (EN-DE)BLEU (EN-FR)训练成本 (FLOPs) (EN-DE)训练成本 (FLOPs) (EN-FR)
ByteNet [18]23.75
Deep-Att + PosUnk [39]39.21.010201.0 \cdot 10^{20}
GNMT + RL [38]24.639.922.310192.3 \cdot 10^{19}1.410201.4 \cdot 10^{20}
ConvS2S [9]25.1640.469.610189.6 \cdot 10^{18}1.510201.5 \cdot 10^{20}
MoE [32]26.0340.562.010192.0 \cdot 10^{19}1.210201.2 \cdot 10^{20}
Deep-Att + PosUnk Ensemble [39]40.48.010208.0 \cdot 10^{20}
GNMT + RL Ensemble [38]26.3041.161.810201.8 \cdot 10^{20}1.110211.1 \cdot 10^{21}
ConvS2S Ensemble [9]26.3641.297.710197.7 \cdot 10^{19}1.210211.2 \cdot 10^{21}
Transformer (base model)27.338.13.310183.3 \cdot 10^{18}
Transformer (big)28.441.82.310192.3 \cdot 10^{19}

残差 Dropout 我们对每个子层的输出应用 dropout [33],在将其添加到子层输入并归一化之前。此外,我们在编码器和解码器堆栈中对嵌入和位置编码的总和应用 dropout。对于基础模型,我们使用的比率为 Pdrop=0.1P_{\text{drop}} = 0.1

标签平滑(Label Smoothing) 在训练期间,我们采用了值为 ϵls=0.1\epsilon_{ls} = 0.1 的标签平滑 [36]。这会损害困惑度(perplexity),因为模型学会了更加不确定,但提高了准确率和 BLEU 分数。

6. 结果

6.1 机器翻译

在 WMT 2014 英德翻译任务上,大型 Transformer 模型(表 2 中的 Transformer (big))的表现超过了之前报道的最佳模型(包括集成模型)超过 2.0 BLEU,建立了 28.4 的新最先进 BLEU 分数。该模型的配置列在表 3 的最后一行。在 8 个 P100 GPU 上训练了 3.5 天。即使是我们的基础模型,也以竞争模型训练成本的一小部分超过了所有之前发表的模型和集成模型。

在 WMT 2014 英法翻译任务上,我们的大型模型实现了 41.0 的 BLEU 分数,超过了所有之前发表的单模型,训练成本不到之前最先进模型的 1/4。用于英法翻译的 Transformer (big) 模型使用的 dropout 比率为 Pdrop=0.1P_{\text{drop}} = 0.1,而不是 0.3。

对于基础模型,我们使用通过平均最后 5 个检查点(以 10 分钟间隔写入)获得的单个模型。对于大型模型,我们平均了最后 20 个检查点。我们使用了束搜索(beam search),束大小为 4,长度惩罚 α=0.6\alpha = 0.6 [38]。这些超参数是在开发集上进行实验后选择的。我们在推理期间将最大输出长度设置为输入长度 + 50,但在可能时提前终止 [38]。

表 2 总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的 GPU 数量以及每个 GPU 的持续单精度浮点容量的估计值相乘,来估计训练模型所使用的浮点运算次数5^5

6.2 模型变体

为了评估 Transformer 不同组件的重要性,我们以不同方式改变了我们的基础模型,测量了英德翻译性能的变化。


表 3:Transformer 架构的变体。未列出的值与基础模型相同。所有指标均在英德翻译开发集 newstest2013 上。列出的困惑度是每个 wordpiece 的,根据我们的字节对编码,不应与每个单词的困惑度进行比较。

NNdmodeld_{\text{model}}dffd_{\text{ff}}hhdkd_kdvd_vPdropP_{\text{drop}}ϵls\epsilon_{ls}训练步数PPL (dev)BLEU (dev)参数 ×106\times 10^6
base65122048864640.10.1100K4.9225.865
(A)15125125.2924.9
41281285.0025.5
1632324.9125.8
3216165.0125.4
(B)165.1625.158
325.0125.460
(C)26.1123.736
45.1925.350
84.8825.580
25632325.7524.528
10241281284.6626.0168
10245.1225.453
40964.7526.290
(D)0.05.7724.6
0.24.9525.5
0.04.6725.3
0.25.4725.7
(E)位置嵌入代替正弦4.9225.7
big610244096160.3300K4.3326.4213

开发集 newstest2013。我们使用了如前一节所述的束搜索,但没有进行检查点平均。我们将这些结果呈现在表 3 中。

在表 3 行 (A) 中,我们改变了注意力头的数量以及注意力键和值的维度,保持计算量不变,如 3.2.2 节所述。虽然单头注意力的 BLEU 比最佳设置差 0.9,但质量也会随着头数过多而下降。

在表 3 行 (B) 中,我们观察到减少注意力键大小 dkd_k 会损害模型质量。这表明确定兼容性并不容易,并且比点积更复杂的兼容性函数可能是有益的。我们进一步观察到在行 (C) 和 (D) 中,正如预期的那样,更大的模型更好,并且 dropout 对避免过拟合非常有帮助。在行 (E) 中,我们用学习到的位置嵌入 [9] 替换了我们的正弦位置编码,并观察到与基础模型几乎相同的结果。

6.3 英语成分句法分析

为了评估 Transformer 是否能泛化到其他任务,我们进行了英语成分句法分析实验。该任务提出了具体的挑战:输出受到强结构约束,并且比输入长得多。此外,RNN 序列到序列模型在小数据机制下未能达到最先进的结果 [37]。

我们训练了一个 dmodel=1024d_{\text{model}} = 1024 的 4 层 Transformer,在 Penn Treebank [25] 的华尔街日报(WSJ)部分上,约 4 万个训练句子。我们还在半监督设置下对其进行了训练,使用了更大的高置信度和 BerkleyParser 语料库,包含约 1700 万个句子 [37]。我们为仅 WSJ 设置使用了 16K 标记的词汇表,为半监督设置使用了 32K 标记的词汇表。

我们仅进行了少量实验来选择 Section 22 开发集上的 dropout(注意力和残差,5.4 节)、学习率和束大小,所有其他参数与英德基础翻译模型保持不变。在推理期间,我们


表 4:Transformer 在英语成分句法分析上泛化良好(结果在 WSJ 的 Section 23 上)

解析器训练WSJ 23 F1
Vinyals & Kaiser el al. (2014) [37]WSJ only, discriminative88.3
Petrov et al. (2006) [29]WSJ only, discriminative90.4
Zhu et al. (2013) [40]WSJ only, discriminative90.4
Dyer et al. (2016) [8]WSJ only, discriminative91.7
Transformer (4 layers)WSJ only, discriminative91.3
Zhu et al. (2013) [40]semi-supervised91.3
Huang & Harper (2009) [14]semi-supervised91.3
McClosky et al. (2006) [26]semi-supervised92.1
Vinyals & Kaiser el al. (2014) [37]semi-supervised92.1
Transformer (4 layers)semi-supervised92.7
Luong et al. (2015) [23]multi-task93.0
Dyer et al. (2016) [8]generative93.3

将最大输出长度增加到输入长度 + 300。我们对仅 WSJ 和半监督设置都使用了 21 的束大小和 α=0.3\alpha = 0.3

我们在表 4 中的结果表明,尽管缺乏特定于任务的调整,我们的模型表现得令人惊讶地好,产生了比除循环神经网络语法(Recurrent Neural Network Grammar)[8] 之外所有之前报道的模型更好的结果。

与 RNN 序列到序列模型 [37] 相比,即使仅在 4 万个句子的 WSJ 训练集上进行训练,Transformer 的表现也优于 BerkeleyParser [29]。

7. 结论

在本文中,我们提出了 Transformer,这是第一个完全基于注意力的序列转换模型,用多头自注意力取代了编码器-解码器架构中最常用的循环层。

对于翻译任务,Transformer 的训练速度可以显著快于基于循环或卷积层的架构。在 WMT 2014 英德和 WMT 2014 英法翻译任务上,我们都达到了最先进水平。在前一个任务中,我们最好的模型甚至超过了所有之前报道的集成模型。

我们对基于注意力的模型的未来感到兴奋,并计划将它们应用于其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出模态的问题,并研究局部、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。使生成过程减少顺序性是我们的另一个研究目标。

我们用于训练和评估模型的代码可在 https://github.com/tensorflow/tensor2tensor 获取。

致谢 我们感谢 Nal Kalchbrenner 和 Stephan Gouws 的富有成效的评论、更正和启发。

参考文献

[1] Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E Hinton. Layer normalization. arXiv preprint arXiv:1607.06450, 2016. [2] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. Neural machine translation by jointly learning to align and translate. CoRR, abs/1409.0473, 2014. [3] Denny Britz, Anna Goldie, Minh-Thang Luong, and Quoc V. Le. Massive exploration of neural machine translation architectures. CoRR, abs/1703.03906, 2017. [4] Jianpeng Cheng, Li Dong, and Mirella Lapata. Long short-term memory-networks for machine reading. arXiv preprint arXiv:1601.06733, 2016. [5] Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre, FBougares, Holger Schwenk, and Yoshua Bengio. Learning phrase representations using rnn encoder-decoder for statistical machine translation. CoRR, abs/1406.1078, 2014.

[6] Francois Chollet. Xception: Deep learning with depthwise separable convolutions. arXiv preprint arXiv:1610.02357, 2016.

[7] Junyoung Chung, Çaglar Gülçehre, Kyunghyun Cho, and Yoshua Bengio. Empirical evaluation of gated recurrent neural networks on sequence modeling. CoRR, abs/1412.3555, 2014.

[8] Chris Dyer, Adhiguna Kuncoro, Miguel Ballesteros, and Noah A. Smith. Recurrent neural network grammars. In Proc. of NAACL, 2016.

[9] Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N. Dauphin. Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122v2, 2017.

[10] Alex Graves. Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850, 2013.

[11] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 770–778, 2016.

[12] Sepp Hochreiter, Yoshua Bengio, Paolo Frasconi, and Jürgen Schmidhuber. Gradient flow in recurrent nets: the difficulty of learning long-term dependencies, 2001.

[13] Sepp Hochreiter and Jürgen Schmidhuber. Long short-term memory. Neural computation, 9(8):1735–1780, 1997.

[14] Zhongqiang Huang and Mary Harper. Self-training PCFG grammars with latent annotations across languages. In Proceedings of the 2009 Conference on Empirical Methods in Natural Language Processing, pages 832–841. ACL, August 2009.

[15] Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, and Yonghui Wu. Exploring the limits of language modeling. arXiv preprint arXiv:1602.02410, 2016.

[16] Łukasz Kaiser and Samy Bengio. Can active memory replace attention? In Advances in Neural Information Processing Systems, (NIPS), 2016.

[17] Łukasz Kaiser and Ilya Sutskever. Neural GPUs learn algorithms. In International Conference on Learning Representations (ICLR), 2016.

[18] Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, Aaron van den Oord, Alex Graves, and Koray Kavukcuoglu. Neural machine translation in linear time. arXiv preprint arXiv:1610.10099v2, 2017.

[19] Yoon Kim, Carl Denton, Luong Hoang, and Alexander M. Rush. Structured attention networks. In International Conference on Learning Representations, 2017.

[20] Diederik Kingma and Jimmy Ba. Adam: A method for stochastic optimization. In ICLR, 2015.

[21] Oleksii Kuchaiev and Boris Ginsburg. Factorization tricks for LSTM networks. arXiv preprint arXiv:1703.10722, 2017.

[22] Zhouhan Lin, Minwei Feng, Cicero Nogueira dos Santos, Mo Yu, Bing Xiang, Bowen Zhou, and Yoshua Bengio. A structured self-attentive sentence embedding. arXiv preprint arXiv:1703.03130, 2017.

[23] Minh-Thang Luong, Quoc V. Le, Ilya Sutskever, Oriol Vinyals, and Lukasz Kaiser. Multi-task sequence to sequence learning. arXiv preprint arXiv:1511.06114, 2015.

[24] Minh-Thang Luong, Hieu Pham, and Christopher D Manning. Effective approaches to attention-based neural machine translation. arXiv preprint arXiv:1508.04025, 2015.

[25] Mitchell P Marcus, Mary Ann Marcinkiewicz, and Beatrice Santorini. Building a large annotated corpus of english: The penn treebank. Computational linguistics, 19(2):313–330, 1993.

[26] David McClosky, Eugene Charniak, and Mark Johnson. Effective self-training for parsing. In Proceedings of the Human Language Technology Conference of the NAACL, Main Conference, pages 152–159. ACL, June 2006.

[27] Ankur Parikh, Oscar Täckström, Dipanjan Das, and Jakob Uszkoreit. A decomposable attention model. In Empirical Methods in Natural Language Processing, 2016.

[28] Romain Paulus, Caiming Xiong, and Richard Socher. A deep reinforced model for abstractive summarization. arXiv preprint arXiv:1705.04304, 2017.

[29] Slav Petrov, Leon Barrett, Romain Thibaux, and Dan Klein. Learning accurate, compact, and interpretable tree annotation. In Proceedings of the 21st International Conference on Computational Linguistics and 44th Annual Meeting of the ACL, pages 433–440. ACL, July 2006.

[30] Ofir Press and Lior Wolf. Using the output embedding to improve language models. arXiv preprint arXiv:1608.05859, 2016.

[31] Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural machine translation of rare words with subword units. arXiv preprint arXiv:1508.07909, 2015.

[32] Noam Shazeer, Azalia Mirhoseini, Krzysztof Maziarz, Andy Davis, Quoc Le, Geoffrey Hinton, and Jeff Dean. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. arXiv preprint arXiv:1701.06538, 2017.

[33] Nitish Srivastava, Geoffrey E Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research, 15(1):1929–1958, 2014.

[34] Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, and Rob Fergus. End-to-end memory networks. In C. Cortes, N. D. Lawrence, D. D. Lee, M. Sugiyama, and R. Garnett, editors, Advances in Neural Information Processing Systems 28, pages 2440–2448. Curran Associates, Inc., 2015.

[35] Ilya Sutskever, Oriol Vinyals, and Quoc VV Le. Sequence to sequence learning with neural networks. In Advances in Neural Information Processing Systems, pages 3104–3112, 2014.

[36] Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, and Zbigniew Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015.

[37] Vinyals & Kaiser, Koo, Petrov, Sutskever, and Hinton. Grammar as a foreign language. In Advances in Neural Information Processing Systems, 2015.

[38] Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, et al. Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv preprint arXiv:1609.08144, 2016.

[39] Jie Zhou, Ying Cao, Xuguang Wang, Peng Li, and Wei Xu. Deep recurrent models with fast-forward connections for neural machine translation. CoRR, abs/1606.04199, 2016.

[40] Muhua Zhu, Yue Zhang, Wenliang Chen, Min Zhang, and Jingbo Zhu. Fast and accurate shift-reduce constituent parsing. In Proceedings of the 51st Annual Meeting of the ACL (Volume 1: Long Papers), pages 434–443. ACL, August 2013.


注意力可视化

注意力机制示例,展示了编码器自注意力在第 5 层(共 6 层)中对长距离依赖的跟踪。许多注意力头关注动词“making”的远距离依赖,完成了短语“making...more difficult”。此处仅显示单词“making”的注意力。不同颜色代表不同的头。建议查看彩色版本。 图 3:注意力机制示例,展示了编码器自注意力在第 5 层(共 6 层)中对长距离依赖的跟踪。许多注意力头关注动词“making”的远距离依赖,完成了短语“making...more difficult”。此处仅显示单词“making”的注意力。不同颜色代表不同的头。建议查看彩色版本。

两个注意力头,同样在第 5 层(共 6 层),显然参与了回指消解。上图:头 5 的完整注意力。下图:仅来自单词“its”对注意力头 5 和 6 的孤立注意力。注意,对于这个词,注意力非常尖锐。 图 4:两个注意力头,同样在第 5 层(共 6 层),显然参与了回指消解。上图:头 5 的完整注意力。下图:仅来自单词“its”对注意力头 5 和 6 的孤立注意力。注意,对于这个词,注意力非常尖锐。

许多注意力头表现出似乎与句子结构相关的行为。我们在上文中给出了两个这样的例子,来自编码器自注意力第 5 层(共 6 层)的两个不同头。这些头清楚地学习执行不同的任务。 图 5:许多注意力头表现出似乎与句子结构相关的行为。我们在上文中给出了两个这样的例子,来自编码器自注意力第 5 层(共 6 层)的两个不同头。这些头清楚地学习执行不同的任务。

硬核测试

正确率:0 / 5
1

根据论文,Transformer 架构与传统的循环神经网络(RNN)相比,最核心的区别是什么?

2

在 Transformer 的缩放点积注意力(Scaled Dot-Product Attention)中,为什么要除以 $\sqrt{d_k}$?

3

Transformer 模型中“多头注意力”(Multi-Head Attention)的主要作用是什么?

4

Transformer 模型中,为什么在解码器的自注意力层需要使用掩码(masking)?

5

关于 Transformer 中的位置编码(Positional Encoding),下列说法正确的是: