前段时间看了一些transformer相关的文章,但讲解的都不太清楚,想着还是读一读论文理解起来更加深刻,所以翻译了这篇Attention Is All You Need

论文中的作者贡献是相同的,而名单的排列顺序是随机的。Jakob 提出了用自注意力机制替换循环神经网络 (RNN) 的想法,并开启了验证这一构想的工作。Ashish 与 Illia 共同设计并实现了首个 Transformer 模型,对这项工作的各个方面都有着至关重要的贡献。Noam 提出了缩放的点积注意力、多头注意力和无需参数的位置表示法,几乎参与了项目的每个细节。Niki 在我们的原始代码库和 tensor2tensor 中设计、实现、调整并评估了无数的模型变种。Llion 也探索了新型模型变种,负责我们最初的代码库、高效的推理和可视化工作。Lukasz 和 Aidan 贡献了无数的时间来设计和实现 tensor2tensor 的各个部分,这不仅取代了我们之前的代码库,还大幅提高了研究结果并极大地加速了我们的研究进展。这些工作是在 Google Brain 和 Google Research 期间完成的。

摘要

目前主流的序列转换模型依赖于包含编码器和解码器的复杂循环或卷积神经网络体系。这些模型的高性能部分得益于编解码器之间的注意力机制连接。我们提出了一种全新的网络架构——Transformer,这一架构完全基于注意力机制,彻底摒弃了递归和卷积。通过在两个机器翻译任务上的实验,我们发现这些模型在质量上更为优异,且具备更高的并行处理能力,训练时间也大幅缩短。我们的模型在 WMT 2014 年的英德翻译任务上获得了 28.4 的 BLEU 分数,超过了包括集成模型在内的现有最佳结果2个 BLEU 分以上。在 WMT 2014 的英法翻译任务上,我们的模型在仅使用八个 GPU 训练了 3.5 天后,刷新了单模型最高 BLEU 记录,达到了 41.8 分,这仅是文献中最佳模型训练成本的一小部分。我们还证明了 Transformer 能够成功地广泛应用于其他任务,比如英语成分句法分析,无论训练数据是丰富还是有限。

1 简介

循环神经网络(RNN)、长短期记忆(LSTM)网络和门控循环单元(GRU)网络,特别是在语言建模和机器翻译等序列建模和转换问题上,已被公认为最先进的技术。从那时起,一直有许多尝试不断地推动循环语言模型和编解码器架构的发展边界。

循环模型的计算通常沿着输入和输出序列的符号位置进行分解。它们通过将位置与计算时间的步骤对齐来生成一系列隐藏状态,这些隐藏状态${h_t}$是基于之前的隐藏状态$h_{t-1}$和当前位置t的输入。这种计算的顺序性质限制了训练样本内部的并行处理能力,特别是在处理更长序列时,由于内存限制,这成为一个关键问题。近期的研究通过采用因式分解技巧和条件计算在提高计算效率的同时,也在某些情况下提升了模型的性能。然而,顺序计算的基本限制仍然存在。

注意力机制已经成为多个任务中高效序列建模和转换模型的核心部分,它允许模型无视输入或输出序列中依赖关系的距离进行建模。尽管如此,除了少数情况外,注意力机制通常与循环网络结合使用。

在本工作中,我们提出了一种新的架构——Transformer,这种架构放弃了递归,完全依靠注意力机制来处理输入和输出之间的全局依赖关系。Transformer架构支持更高程度的并行处理,并且在使用八个 P100 GPU 训练仅12小时后,就能在翻译质量上达到新的最高标准。

2 背景

减少顺序计算的目标也是扩展神经GPU、ByteNet 和 ConvS2S等模型的基础,这些模型都采用了卷积神经网络作为基础构件,能够对所有输入和输出位置的隐藏表示进行并行计算。在这些模型中,将两个任意输入或输出位置的信号相关联所需的操作数会随着位置之间的距离增加而增长,对于ConvS2S是线性增长,而对于ByteNet则是对数增长。这增加了学习远距离位置间依赖性的难度。而在Transformer模型中,这种操作数量被减少到了一个固定的数目,虽然这样做降低了有效分辨率,因为它通过平均注意力加权的位置,但我们通过多头注意力机制(如第3.2节所述)来弥补这一点。

自注意力Self-attention,也称为内部注意力,是一种注意力机制,通过关联单一序列内不同位置来计算序列的表示。自注意力已经在阅读理解、摘要生成、文本蕴含以及学习独立于任务的句子表示等多种任务上成功应用。

端到端记忆网络基于循环注意力机制,而非序列对齐的循环,已在简单的语言问答和语言建模任务上展现了良好的性能。

然而,据我们所知,Transformer 是第一个完全依赖自注意力来计算其输入和输出表示的转换模型,不依赖于序列对齐的RNN或卷积。在后续部分,我们将详细介绍Transformer模型,阐述自注意力的动机,并讨论其相较于如扩展神经GPU、ByteNet和ConvS2S等模型的优势。

3 模型架构

图 1:Transformer - 模型架构

大多数表现出色的神经序列转换模型采用了编解码器结构(如 cho2014learning、bahdanau2014neural 和 sutskever14 等研究所示)。这种结构中,编码器负责将一系列输入符号 $(x_1,…,x_n)$ 转换成一系列连续的表示形式 $𝐳 = (z_1,…,z_n)$。在获得 𝐳 之后,解码器接着逐个元素地生成符号的输出序列 $(y_1,…,y_n)$。在此过程中,模型采用自回归方式工作(如 graves2013generating 所述),在生成下一个符号时,会将先前生成的符号作为附加输入。

Transformer 模型遵循了这样的基本架构,不过它在编码器和解码器上均采用了堆叠自注意力机制和点对点全连接层,如图 1 的左半部分和右半部分分别所示。

3.1 编码器与解码器层

编码器:

编码器包含六层(N=6)完全相同的层组成的堆栈。每一层由两个子层构成:第一个子层是多头自注意力机制,第二个子层是一个简易的逐位置全连接前馈网络。在这两个子层周围,我们采用了残差连接(参考 he2016deep),随后进行了层归一化(参考 layernorm2016)。这意味着每个子层的输出形式为 LayerNorm(x+Sublayer(x)),其中 Sublayer(x) 表示子层自身实现的功能。为了支持这些残差连接,模型中所有的子层及嵌入层输出的维度均设为 $d_{model}=512$。

解码器:

解码器同样由六层(N=6)完全相同的层构成的堆栈组成。除了每层编码器中的两个子层外,解码器还添加了第三个子层,用于对编码器堆栈的输出进行多头注意力处理。与编码器类似,我们对每个子层周围也采用了残差连接后跟层归一化。我们对解码器堆栈中的自注意力子层进行了调整,防止某个位置关注到后面的位置。这种掩码技术,结合输出嵌入被向后偏移一个位置的事实,确保了对于任意位置 i 的预测只能依赖于小于 i 的已知位置的输出。

3.2 注意力机制

注意力机制可被理解为一个将查询及一组键-值对映射到输出的过程,其中查询、键、值及输出均为向量形式。输出是值的加权求和,每个值的权重由查询与相应键的兼容性函数决定。

3.2.1 缩放点积注意力

我们将我们的特定注意力机制称为“缩放点积注意力”(见图 2)。输入包括维度为 $d_k$ 的查询和键,以及维度为 $d_v$的值。我们先计算查询与所有键的点积,然后每个结果除以 $\sqrt{d_k}$,接着应用 softmax 函数以获取值的权重。

在实际操作中,我们会同时对一组查询执行注意力函数计算,把它们组合成一个矩阵 Q。键和值同样组合成矩阵 K 和 V。我们这样计算得到输出矩阵:

$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V $       (1)

两种最广泛应用的注意力机制是加法注意力(bahdanau2014neural,)和点积(也称乘法)注意力。点积注意力机制和我们的算法几乎一样,只是在缩放因子上有所不同,使用了 $\frac{1}{\sqrt{d_k}}$ 。而加法注意力则通过一个包含单一隐藏层的前馈网络来计算各元素间的兼容性。尽管这两种方法在理论上的复杂度相当,点积注意力在实际应用中更为高效,主要是因为它能够利用高度优化的矩阵乘法代码,从而达到更快的处理速度和更低的空间占用。

对于小的 $d_k$ 值,加法和点积注意力的性能相当,但当 $d_k$ 的值较大时,未经缩放的加法注意力在性能上超越了点积注意力 (DBLP:journals/corr/BritzGLL17,)。我们认为,对于大的 $d_k$ 值,点积的数值会变得非常大,这会使得 softmax 函数进入到其梯度极小的区域。为了解决这个问题,我们通过 $\frac{1}{\sqrt{d_k}}$ 对点积进行了缩放。

3.2.2 多头注意力机制

图片描述1

缩放点积注意力

图片描述2

多头注意力

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

与其使用 $d_{model}$ 维的键、值和查询执行单个注意力机制,我们发现,将查询、键和值通过不同的学习到的线性投影,分别投影到 $d_k$、$d_k$ 和 $d_v$ 维度上 ℎ 次,是更为有益的做法。在这些被投影的查询、键和值的版本上,我们接着并行地执行注意力函数,从而得到 $d_v$ 维的输出值。这些输出值被串联起来后再次进行投影,最终得到如图 2 所示的结果值。

多头注意力使得模型能够在不同位置,共同关注来自不同表示子空间的信息。如果只使用单一的注意力头,这种平均化作用会限制该能力。

$MultiHead(Q,K,V) = Concat(head_1,…,head_h)w^O$

where $head_i = Attention(QW_{i}^Q,KW_{i}^K,VW_{i}^V)$

其中,这些投影对应的参数矩阵为 $W^Q_i \in \mathbb{R}^{d_{model} \times d_k}$, $W^K_i \in \mathbb{R}^{d_{model} \times d_k}$, $W^V_i \in \mathbb{R}^{d_{model} \times d_v}$ and $W^O \in \mathbb{R}^{hd_v \times d_{model}}$.

在这项研究中,我们部署了 $h=8$ 个并行运行的注意力层,即头。对于每一个头,我们设置 $d_k=d_v=d_{model}/h=64$。 由于每个头的维度减小,其总计算成本与全维单头注意力的计算成本相当。

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

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

  • 在“编码器-解码器注意力”层中,来自前一解码层的查询与来自编码器输出的记忆键和值相结合。这种设置使得解码器的每一个位置都能关注到输入序列中的全部位置,类似于(wu2016google,; bahdanau2014neural,; JonasFaceNet2017,)等序列到序列模型中的典型编码器-解码器注意机制。
  • 编码器内部包含自注意力层。在自注意力层中,键、值和查询全部来源于同一个地方,即编码器中前一层的输出。这使得编码器内的每一个位置都能够关注到前一层中的所有位置。
  • 解码器中的自注意力层同理,允许每个位置关注到解码器中直至该位置的所有位置。为了维护自回归特性,我们需要阻止解码器内的信息向左流动。我们通过在缩放点积注意力内部,将softmax输入中对应非法连接的所有值遮蔽(设为 -∞)来实现这一点。参见图 2。

3.3 按位置的前馈网络

这种机制独立且一致地应用于每个位置。它包括两次线性变换,两者之间通过一个 ReLU 激活函数连接。

$\mathrm{FFN}(x)=\max(0, xW_1 + b_1) W_2 + b_2$

尽管这些线性变换在不同位置上是相同的,它们在不同层次中使用的参数却是不同的。这也可以被看作是核大小为 1 的两次卷积操作。输入和输出的维度均为 $d_{model}=512$,而内部层的维度为 $d_{ff}=2048$。

3.4 嵌入和Softmax

与其他序列转换模型类似,我们采用学习得到的嵌入技术,将输入和输出的 tokens 转换为 $d_{model}$ 维的向量。同时,我们使用了标准的学习型线性变换和softmax函数,以将解码器的输出转化为预测下一个token的概率。在我们的模型中,我们让两个嵌入层与softmax之前的线性变换共享同一个权重矩阵,这一点与 (press2016using) 类似。在嵌入层,我们将这些权重乘以 $\sqrt{d_{model}}$。

3.4 位置编码

鉴于我们的模型既不包含递归也不包含卷积,为了让模型能识别序列中的顺序信息,我们需要向模型中注入有关tokens在序列中相对或绝对位置的信息。因此,我们在编码器和解码器的底部嵌入层添加了“位置编码”。位置编码的维度与嵌入层的维度 $d_{model}$ 一致,这样就可以将两者进行相加。关于位置编码,有多种选择方法,包括学习得到的和固定的 (JonasFaceNet2017)。

在本研究中,我们采用了不同频率的正弦和余弦函数来实现位置编码:

$PE_{(pos,2i)} = sin(pos / 10000^{2i/d_{model}}) $

$PE_{(pos,2i+1)} = cos(pos / 10000^{2i/d_{model}}) $

这里,$pos$ 表示位置,$i$ 表示维度。换句话说,位置编码的每个维度都对应着一个正弦波形。这些波长形成了一个从 $2\pi$ 到 $10000 \cdot 2\pi$ 的几何级数。我们选择这种方法是因为我们假设它能够使模型更容易地通过相对位置进行学习和关注,因为对于任何固定的偏移量 $k$,$PE_{pos+k}$ 都可以用 $PE_{pos}$ 的线性函数来表示。

我们还尝试过使用学习得到的位置嵌入 (JonasFaceNet2017),并发现这两种方法产生的结果几乎无差别(见Table 3 row (E))。我们选择了正弦函数版本,因为它可能使模型能够推广到训练过程中未遇到的更长序列长度。

4 为什么是自注意力机制

在这一节中,我们将自注意力层与通常用于将一个变长的符号表示序列 $(x_1, …, x_n)$ 转换为另一个等长序列 $(z_1, …, z_n)$ 的循环层和卷积层进行了比较,其中 $x_i, z_i \in \mathbb{R}^d$,比如在典型的序列转换编码器或解码器的隐藏层中。我们使用自注意力的动机基于三个考虑因素。

首先是每层的总计算复杂度。其次是可并行化的计算量,这是通过需要的最少序列操作数来衡量的。

第三个考虑因素是网络中处理长期依赖关系的路径长度。在许多序列转换任务中,学习长期依赖关系是一个关键挑战。影响学习这种依赖性的一个关键因素是信号在网络中前进和后退时必须跨越的路径长度。输入和输出序列之间任意两点的路径越短,就越容易学习长期依赖关系 (hochreiter2001gradient)。因此,我们还比较了由不同层类型构成的网络中任意两个输入和输出位置之间的最大路径长度。

表 1:不同层类型的最大路径长度、每层复杂度和最小序列操作数量。其中 $n$ 表示序列长度,$d$ 代表表示的维度,$k$ 是卷积核的大小,而 $r$ 是受限自注意力中的邻域大小。

层类型 每层复杂度 顺序操作次数 最大路径长度
自注意力 (Self-Attention) O($n^2 \cdot d$) O(1) O(1)
循环 (Recurrent) O($n \cdot d^2$) O(n) O(n)
卷积 (Convolutional) O($k \cdot n \cdot d^2$) O(1) O($log_k(n)$)
自注意力 (限制) (Self-Attention (restricted)) O($r \cdot n \cdot d$) O(1) O(n/r)

如表 1 中提到的,自注意力层通过一系列固定数量的操作连接所有位置,而循环层则需要 $O(n)$ 的序列操作。在计算复杂度方面,当序列长度 $n$ 小于表征维度 $d$ 时,自注意力层比循环层效率更高,这一情况在当前机器翻译领域最先进模型使用的句子表示中非常普遍,比如词片 (wu2016google) 和字节对 (sennrich2015neural) 表示法。为了提高处理极长序列任务的计算效率,可以将自注意力限制在输入序列中仅考虑以相应输出位置为中心、大小为 $r$ 的邻域。这会将最大路径长度增加到 $O(n/r)$。我们计划在未来的工作中进一步探索这种方法。

单个的卷积层,如果核宽度 $k < n$,不会连接所有输入和输出位置。在使用连续核的情况下,做到这一点需要叠加 $O(n/k)$ 层卷积层,或者在使用扩张卷积的情况下需要 $O(log_k(n))$ 层 (NalBytenet2017),这会增加网络任意两点之间最长路径的长度。通常,卷积层的成本高于循环层,成本因子为 $k$。然而,可分离卷积 (xception2016) 显著降低了复杂度,到 $O(k \cdot n \cdot d + n \cdot d^2)$。即便如此,当 $k=n$ 时,一个可分离卷积的复杂度也仅相当于自注意力层加上点对点前馈层的组合,这正是我们模型采用的方法。

作为一个额外的优势,自注意力能够让模型更加易于解释。我们审视了模型中的注意力分布,并在附录中展示并讨论了一些例子。这些例子不仅显示出单个注意力头显著地学会了执行不同的任务,而且很多还展现了与句子的句法和语义结构相关的行为。

5 训练

本节介绍了我们模型的训练方案。

5.1 训练数据与批处理

我们使用了标准的 WMT 2014 英德数据集进行训练,该数据集包含约 450 万对句子。这些句子通过字节对编码 (DBLP:journals/corr/BritzGLL17) 进行编码,共享一个大约包含 37000 tokens 的源-目标词汇表。对于英法,我们采用了规模更大的 WMT 2014 英法数据集,它包含了 3600 万句子,并使用一个 32000 词片词汇表 (wu2016google) 对 tokens 进行了划分。句子对是按照大致的序列长度进行批次组合的。每个训练批次大约包含了 25000 个源 tokens 和 25000 个目标 tokens。

5.2 硬件配置与训练计划

我们的模型是在一台装有 8 块 NVIDIA P100 GPU 的机器上训练的。对于基础模型,按照论文中描述的超参数设置,每一步训练大约耗时 0.4 秒。我们总共训练了基础模型 100,000 步,约 12 小时。对于我们的大型模型(如表 3 底部所述),每步训练时间为 1.0 秒。大型模型训练了 300,000 步,共 3.5 天。

5.3 优化器

我们采用了 Adam 优化器 (kingma2014adam),设置 $\beta_1=0.9$,$\beta_2=0.98$ 和 $\epsilon=10^{-9}$。我们根据以下公式动态调整了学习率:

$lrate = d_{model}^{-0.5} \cdot \min({step_{num}}^{-0.5},{step_{num}} \cdot {warmup_steps}^{-1.5})$

这意味着在训练的最初 $warmup_steps$ 步骤中,我们会线性增加学习率,之后则根据步骤数的逆平方根进行减少。我们设置的预热步数($warmup_steps$)为 4000。

5.4 正则化

在训练过程中,我们采用了三种正则化策略:

残差 Dropout

我们在每个子层的输出上应用了 dropout (srivastava2014dropout),这一操作在输出加入到子层输入并进行归一化处理之前进行。此外,我们还在编解码器堆栈中的嵌入向量和位置编码的和上应用了 dropout。对于基础模型,我们设置的 dropout 率为 $P_{drop}=0.1$。

标签平滑

在训练过程中,我们使用了 $\epsilon_{ls}=0.1$ 的标签平滑技术 (DBLP:journals/corr/SzegedyVISW15)。虽然这会增加模型的困惑度,让模型的预测更加不确定,但它能够提高模型的准确率和 BLEU 得分。

6 结果

6.1 机器翻译

表 2:在英德和英法的 newstest2014 测试中,Transformer 模型不仅超越了以往的最佳模型,获得了更高的 BLEU 分数,而且其训练成本也大大减少。

model BLEU
EN-DE
BLEU
EN-FR
Training Cost (FLOPs)
EN-DE
Training Cost(FLOPs)
EN-FR
ByteNet [NalBytenet2017] 23.75
Deep-Att + PosUnk [ZhouCWLX16] 39.2 $1.0\cdot10^{20}$
GNMT + RL [wu2016google] 24.6 39.92 $2.3\cdot10^{19}$ $1.4\cdot10^{20}$
ConvS2S [JonasFaceNet2017] 25.16 40.46 $9.6\cdot10^{18}$ $1.5\cdot10^{20}$
MoE [shazeer2017outrageously] 26.03 40.56 $2.0\cdot10^{19}$ $1.2\cdot10^{20}$
Deep-Att + PosUnk Ensemble [ZhouCWLX16] 40.4 $8.0\cdot10^{20}$
GNMT + RL Ensemble [wu2016google] 26.30 41.16 $1.8\cdot10^{20}$ $1.1\cdot10^{21}$
ConvS2S Ensemble [JonasFaceNet2017] 26.36 41.29 $7.7\cdot10^{19}$ $1.2\cdot10^{21}$
Transformer (base model) 27.3 38.1 $3.3\cdot10^{18}$
Transformer (big) 28.4 41.8 $2.3\cdot10^{19}$

在 2014 年的 WMT 英德翻译竞赛中,我们的大型 Transformer 模型(见表 2 中的 Transformer (big))以超过 2.0 BLEU 分的成绩,超越了此前报告过的最好模型(包括那些集成模型),创下了 28.4 的新高 BLEU 分数纪录。该模型的配置详见表 3 的底部。模型在 8 个 P100 GPU 上训练了 3.5 天。甚至我们的基础模型也超过了所有已发布的模型和集成模型,且训练成本只是其他竞争模型的一小部分。

在同年的 WMT 英法翻译任务中,我们的大型模型取得了 41.0 的 BLEU 分数,超越了所有之前发布的单模型,并且其训练成本不到先前最先进模型的四分之一。训练英法翻译的 Transformer (big) 模型使用了 0.1 的 dropout 率,不同于先前模型的 0.3。

对于基础模型,我们采用了一个简单的方法,即平均最后 5 个每隔 10 分钟保存一次的检查点得到的单一模型。而对于大型模型,则平均了最后 20 个检查点。我们采用了 beam size 为 4、长度惩罚系数为 0.6 的 beam 搜索策略(wu2016google)。这些超参数是在开发集上试验后选定的。我们将推断阶段的最大输出长度设置为输入长度加 50,但会尽可能提前结束(wu2016google)。

表 2 总结了我们的成果,并把我们的翻译质量和训练成本与文献中其它模型架构做了比较。我们通过训练时间、使用的 GPU 数量以及每个 GPU 的持续单精度浮点计算能力的预估值来计算训练模型所需的浮点运算数。(备注:我们分别采用了 K80、K40、M40 和 P100 的 2.8、3.7、6.0 和 9.5 TFLOPS 的数据。)

6.2 模型变体

表 3:这是对 Transformer 架构的各种调整。所有未提及的参数都与基础模型保持一致。所有的评测指标都是基于英德翻译的开发数据集 newstest2013。此处列出的困惑度是基于我们使用的字节对编码(BPE)的每个 wordpiece 计算的,因此不宜与按单词计算的困惑度直接对比。

N $d_{model}$ $d_{ff}$ h $d_k$ $d_v$ $P_{drop}$ $\epsilon_{ls}$ train steps PPL (dev) BLEU (dev) params x $10^6 $
base 6 512 2048 8 64 64 0.1 0.1 100K 4.92 25.8 65
(A) 1 512 512 5.29 24.9
(A) 4 128 128 5.00 25.5
(A) 16 32 32 4.91 25.8
(A) 32 16 16 5.01 25.4
(B) 16 5.16 25.1 58
(B) 32 5.01 25.4 60
(C) 2 6.11 23.7 36
(C) 4 5.19 25.3 50
(C) 8 4.88 25.5 80
(C) 256 32 32 5.75 24.5 28
(C) 1024 128 128 4.66 26.0 168
(C) 1024 5.12 25.4 53
(C) 4096 4.75 26.2 90
(D) 0.0 5.77 24.6
(D) 0.2 4.95 25.5
(D) 0.0 4.67 25.3
(D) 0.2 5.47 25.7
(E) 位置嵌入代替正弦曲线 4.92 25.7
big 6 1024 4096 16 0.3 300K 4.33 26.4 213

为了探究 Transformer 各个组成部分的重要性,我们对基础模型进行了多种修改,并在英德翻译的开发数据集 newstest2013 上测试了这些变化所带来的性能差异。我们采用了之前部分提到的 beam search 策略,但未进行检查点的平均处理。相关结果展示在表 3 中。

在表 3 的 A 行中,我们调整了注意力机制头的数量以及键和值的维度,如第 3.2.2 节所述,同时保持了计算量的不变。结果显示,单头注意力模式的 BLEU 分数比最优设置低 0.9,而头数过多也会导致模型性能下降。

在 B 行,我们发现减小注意力键的维度 $d_k$ 降低了模型的性能,这说明确定不同元素之间的兼容性是一个复杂过程,可能需要比简单的点乘更复杂的兼容性函数。C 行和 D 行的观察结果符合预期,即模型越大,性能越好,同时 dropout 对于防止过拟合极为有效。在 E 行,我们将原本的正弦位置编码替换为学习得到的位置嵌入 (JonasFaceNet2017),结果显示与基础模型的表现几乎无差别。

6.3 英语成分句法分析

表 4:Transformer 模型在英语成分句法分析任务上表现出了良好的泛化能力(具体结果见 WSJ 第 23 节)

Parser Training WSJ 23 F1
Vinyals & Kaiser el al. (2014) KVparse15 WSJ only, discriminative 88.3
Petrov et al. (2006) petrov-EtAl:2006:ACL WSJ only, discriminative 90.4
Zhu et al. (2013) zhu-EtAl:2013:ACL WSJ only, discriminative 90.4
Dyer et al. (2016) dyer-rnng:16 WSJ only, discriminative 91.7
Transformer (4 layers) WSJ only, discriminative 91.3
Zhu et al. (2013) zhu-EtAl:2013:ACL semi-supervised 91.3
Huang & Harper (2009) huang-harper:2009:EMNLP semi-supervised 91.3
McClosky et al. (2006) mcclosky-etAl:2006:NAACL semi-supervised 92.1
Vinyals & Kaiser el al. (2014) KVparse15 semi-supervised 92.1
Transformer (4 layers) semi-supervised 92.7
Luong et al. (2015) multiseq2seq multi-task 93.0
Dyer et al. (2016) dyer-rnng:16 generative 93.3

为了探究 Transformer 是否能适应其他类型的任务,我们对其在英语成分句法分析任务上的表现进行了实验。这一任务具有其特定的挑战,例如输出结果受到严格的结构限制,而且输出的长度通常会明显超过输入。另外,已有研究表明,在数据量较少的情况下,基于 RNN 的序列到序列模型无法达到最先进的性能水平 (KVparse15)。

我们在包含约 40K 训练句子的宾夕法尼亚树库中的华尔街日报(WSJ)数据集上,训练了一个四层、模型维度为 1024 的 Transformer。同时,我们还尝试了半监督学习的方式,利用了包含约 1700 万句子的更大的高可信度和 BerkleyParser 语料库 (KVparse15)。对于仅限 WSJ 的设置,我们使用了一个包含 16K tokens 的词汇表;而在半监督学习的设置下,我们使用了一个包含 32K tokens 的词汇表。

在选择 dropout、注意力和残差机制(参见章节 5.4)、学习率和 beam size 的过程中,我们只进行了少量的实验。这些实验都是在第 22 节的开发集上完成的,除此之外,所有其他的参数设置均与英德基础翻译模型保持一致。在推理阶段,我们将最大输出长度设置为输入长度加 300。无论是在仅限 WSJ 的设置还是半监督学习的设置中,我们都使用了 21 的 beam size 和 0.3 的 α 值。

表 4 中的结果表明,尽管我们的模型没有进行任务特定的优化调整,但它的表现出奇的好,超过了所有之前报道的模型,除了循环神经网络语法 (dyer-rnng:16)。

与基于 RNN 的序列到序列模型 (KVparse15) 不同,Transformer 在仅使用 WSJ 训练集(约 40K 句子)进行训练的情况下,其表现甚至超过了 BerkeleyParser (petrov-EtAl:2006:ACL)。

7 结论

在本研究中,我们介绍了 Transformer,这是首个完全建立在注意力机制之上的序列转换模型,它通过采用多头自注意力机制,摒弃了编解码器架构中通常采用的循环层。

就翻译任务而言,Transformer 的训练速度远快于那些基于循环或卷积层的架构。在 WMT 2014 的英德和英法翻译任务中,我们的模型达到了新的最佳水平,特别是在英德翻译任务中,我们的最佳模型甚至超越了以往所有报道过的集成模型。

我们对基于注意力机制模型的未来前景感到十分期待,并计划将其应用于更多的任务中。我们打算将 Transformer 应用于文本之外的输入和输出形式的问题,并探索局部的、受限的注意力机制,以高效处理如图像、音频和视频等大型输入和输出。另外,我们还致力于研究如何减少生成过程的序列依赖性,这也是我们的一个研究目标。

我们训练和评估模型所使用的代码已经开源,可以在 https://github.com/tensorflow/tensor2tensor 上找到。

鸣谢

我们非常感谢 Nal Kalchbrenner 和 Stephan Gouws 对于他们宝贵的评论、指正和启发。

注意力机制可视化

图 3: 这是一个展示注意力机制如何捕捉长距离依赖关系的例子,特别是在第 6 层的第 5 层编码器的自注意力机制中。很多注意力头专注于与动词 ‘making’ 相关的远程依赖,从而构成了 ‘making…more difficult’ 这个短语。这里只展示了对 ‘making’ 这个词的注意力分布。不同的颜色表示不同的注意力头。建议以彩色查看以获得最佳效果。

图片描述1
图片描述2
图 4: 在第 6 层的第 5 层中,有两个注意力头显著参与到了指代消解中。左边图示展示了第 5 个注意力头的全部注意力分布。右边图示专门展示了来自 ‘its’ 这个词的第 5 和第 6 注意力头的关注点。值得注意的是,这个词的注意力分布非常集中。
图片描述1
图片描述2

图 5: 很多注意力头的行为看起来与句子的结构密切相关。这里我们展示了两个例子,它们分别来自第 6 层的第 5 层编码器自注意力机制中的两个不同注意力头。显然,这些注意力头已经学会了执行不同的任务。