主要的序列转录模型是基于复杂的循环/或卷积神经网络,包含一个编码器和一个解码器。最好的模型也通过一个注意力机制连接着编码器和编码器。我们提出一个新的简单的网络架构,Transformer,仅仅基于注意力机制,完全不需要循环和卷积。在两个机器翻译任务上的实验表明这些模型在质量上优于其他模型,同时具有更好的并行性,并且需要的时间明显更少。我们的模型在 WMT 2014 English-to-German 翻译任务上取得了 28.4 BLEU,比现有的最佳模型,包括集成,提高了 2 BLEU 以上。在 WMT 2014 English-to-French 翻译任务上,我们的模型在 8 个 GPUs 上训练了 3.5 天后,建立了一个新的单模型 start-of-the-art BLEU,分数为 41.8,这是现有文献中最好的模型的训练成本的一小部分。通过将 Transformer 成功地应用到大型的和有限的训练数据的 English constituency parsing (英语句法分析),我们证明了 Transformer 是可以很好地泛化到其他任务。
循环神经网络,特别是长短期记忆 (LSTM) 和门控循环神经网络,已经被牢牢地确定为序列建模和转录问题 (如语言建模和机器翻译) 的 state-of-the-art 方法。此后,许多工作继续推动循环语言模型的边界和编码器-解码器的架构。
循环模型通常沿着输入和输出序列的符号位置分解计算。在计算时间内将 positions 与 steps 对齐,它们生成一系列隐藏状态
注意力机制已经成为各种任务中的引人注目的序列建模和转录模型的不可或缺的一部分,它允许对依赖关系建模,而不考虑它们在输入或输出序列的距离。然而,在所有的情况下,除了 [27],这种注意力机制是与循环神经网络一起使用的。
在本文中,我们提出了 Transformer,一种避开循环神经层而完全依赖注意力机制来绘制输入和输出之间的全局依赖的的模型架构。Transformer 允许有明显更多的并行化,并在 8 个 P100 GPUs 上训练 12 个小时后,在翻译质量上达到了一个新的 state-of-the-art。
减少时序的计算的目标也构成了 Extended Neural GPU、ByteNet 和 ConvS2S 的基础,所有这些都使用卷积神经网络作为基础构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将任意两个来自输入或者输出位置的信号关联起来所需的操作数随着位置之间的距离而增长,对于 ConS2S 是线性增长,对于 ByteNet 是对数级增长。这使得学习相隔遥远的位置之间的依赖变得更加困难。在 Transformer 中,这被减少到一个常量级的操作数,虽然是以降低有效分辨率为代价的,但由于对注意力加权的位置的平均,我们在 3.2 节中使用多头注意力抵消了这种影响。
自注意力,有时也被叫做内部注意力,是一种将单个序列的不同位置关联起来的一种注意力机制,以便计算该序列的表示。自注意力已经成功地被应用于多种任务,包括阅读理解、摘要总结、文本蕴含和学习任务无关的句子表示。
端到端的记忆网络是基于一个循环注意力机制而不是序列对齐的循环,并已被证明在简单语言问题问答和语言建模任务种表现得好。
然而,据我们所知,Transformer 是第一个不使用序列对齐的 RNNs 或卷积,完全依赖自注意力来计算其输入和输出的表示的语言转录模型。在下面的章节,我们将描述 Transformer,自注意力的动机和讨论它相对于 [17, 18] 和 [9] 这些模型的优势。
大多数有竞争性的神经序列转录模型都有一个编码器-解码器结构。解码器映射一个符号表示的输入序列
Transformer 遵循这种整体架构,编码器和解码器都是将自注意力和逐点的、完全连接的层一个个堆叠在一起的,分别展示在图 1 的左半和右半部分。
图 1: Transformer-模型架构
编码器: 编码器由一个 N = 6 个相同的层的堆叠组成。每层有两个子层。第一层是一个多头自注意力机制,而第二层是一个简单的,逐位置完全连接的前馈网络。我们在两个子层周围分别使用一个残差连接,然后使用层归一化。即每个子层的输出是
解码器: 解码器也是由一个 N = 6 个相同的层的堆叠组成。除了每个解码器中的两个子层,解码器插入第三个子层,它在编码器的输出上执行多头注意力。与编码器类似,我们在每个子层周围采用残差连接,然后使用层归一化。我们也修改解码器堆叠中的自注意力子层,以防止位置注意后续的位置 (避免在生成当前时刻输出时,看见当前时刻之后的输入,以确保训练和预测行为一致)。这种掩码,结合输出嵌入被偏移了一个位置,确保了位置
注意力函数可以被描述为将一个查询 (query) 和一组键值 (key-value) 对映射到一个输出。其中查询、键、值和输出都是向量。输出是计算值的加权和,其中分配给每个值的权重是由查询与相对应的键通过一个 compatibility 函数计算。
图 2: (左) 缩放的点积注意力。(右) 由几个并行运行注意力层组成的多头注意力。
我们将我们特别关注的注意力称为 "缩放的点积注意力"。输入由
实践中,我们同时在一组查询上计算注意力函数,将它们打包成一个矩阵
当
与其对
多头注意力允许模型联合地处理来自不同位置的不同表示子空间的信息。对于单头注意力,平均会抑制这种情况。
$$
{\rm MultiHead}(Q,K,V) = {\rm Concat(head_1,\cdots,head_h)}W^O \
{\rm where \ head_i} = {\rm Attention}(QW^Q_i,KW^K_i,VW^V_i)
$$
其中投影维参数矩阵
在这项工作中,我们采用
Transformer 以三种不同的方式使用多头注意力:
- 在 "编码器-解码器注意力" 层,查询来自前一解码器层,memory 键和值来自编码器的输出。这允许解码器中的每个位置都能处理输入序列中的全部位置。这模拟了序列到序列模型 (如 [38, 2, 9]) 中经典的编码器-解码器注意力机制。
- 编码器包含自注意力层。在自注意力层中,所有的键、值和查询都来自相同的地方,在本例中是编码器中前一层的输出。编码器中的每个位置都能处理编码器的前一层中的所有位置。
- 类似地,解码器中的自注意力层允许解码器中的每个位置处理直到 (包括) 该位置的所有位置。我们需要在解码器中防止信息向左流动,以保持自回归特性。我们在点积注意力内通过遮掩 (设为
$-\infty$ ) 对应不合法的 softmax 的输入中所有的值来实现这一点。见图 2。
除了注意力子层,我们的编码器和解码器中的每个层都包含一个全连接的前馈网络,它独立地并同等地应用在每个位置。它由两个线性编号组成,中间隔着一个 ReLU 激活。
$$
{\rm FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2 \tag{2}
$$
虽然跨越不同位置的线性变换是相同的,但从一层到另一层使用不同的参数。描述它的另外一种方法是使用两个核大小为 1 的卷积。输入和输出的维度是
与其他序列转录模型相似,我们使用学习后的嵌入将输入词元和输出词元转换为
由于我们的模型没有循环层和卷积层,为了让模型利用序列的时序性,我们必须注入一些关于序列中词元的相对位置或绝对位置的信息。为此,我们将 "位置编码" 添加到编码器和解码器堆叠的底部的输入嵌入中。位置编码具有与嵌入一样的维度
在本工作中,我们使用不同频率的 sine 和 cosine 函数:
$$
PE(pos,2i) = sin(pos/10000^{2i/d_{model}}) \
PE(pos,2i+1) = cos(pos/10000^{2i/d_{model}})
$$
其中
我们还尝试了使用学习过的位置嵌入来代替,发现这两个版本产生了几乎相同的结果 (见表 3 行(E))。我们选择正弦信号版本,因为它可以让模型推断出比训练中遇到的序列长度更长的序列。
表 1: 对于不同层类型的最大路径长、每层的复杂度和最小的时序性操作数。$n$ 是序列长度,$d$ 是表示的维度,$k$ 是卷积核的大小,$r$ 是受限的自注意力的领域大小。
在本节中,我们将自注意力层的各个方面与循环层和卷积层进行比较,循环层和卷积层通常用于映射一个可变长度的符号表示序列
一个是每层的总计算复杂度。另一个是可以并行化的计算量,通过需要的最少的时序操作数来衡量。
第三个是网络中长距离依赖之间的路径长度。在许多序列转录任务中,学习长距离依赖是一个关键的挑战。影响学习这种依赖关系能力的一个关键的因素是前向传播和后向传播信号不得不在网络中遍历的路径 的长度。输入和输出序列中任意位置的组合之间的路径越短,就越容易学习长距离依赖。因此我们还比较了由不同层类型组成的网络中的任意两个输入和输出位置之间的最大路径长度。
如表 1 所示,一个自注意力层用常数级的顺序操作将所有的位置连接起来,而循环层需要
一个核宽度
作为附带的好处,自注意力层能产生更多可解释的模型。我们检查我们模型中的注意力的分布,并在附录中提出和讨论示例。不仅每个注意力清楚地学习到执行不同的任务,而且其中许多表现出与句子的句法和语义结构相关的行为。
本节描述我们模型的训练机制。
我们在由 450 万个句子对组成的标准的 WMT 2014 English-German 数据集上训练。句子使用字节对编码 (byte-pair encoding) [3] 进行编码,该编码具有大约 37000 个词元 (tokens) 的共享的源-目标词表 (vocabulary)。对于 English-French,我们使用更大的 WMT 2014 English-French 数据集,该数据集由 3600 万个句子对组成,并拆分成 32000 个 word-piece 词表。句子对按相近的长度批量在一起。每个训练批量包含一组句子对,其中大约包含 25000 个源词元和 25000 个目标词元。
我们在一台有 8 块 NVIDIA P100 GPUs 的机器上训练我们的模型。对于使用本文中描述的超参数的基础模型,每个训练 step 大约需要 0.4 秒。我们基础模型总共训练 100,000 steps 或 12 小时。对于我们的大模型 (在表 3 底部的行中描述),step 时间是 1.0 秒。大模型训练了 300,000 steps (3.5 天)。
我们使用 Adam 优化器,其中
我们在训练期间采用三种类型的正则化:
Residual Dropout 我们将 dropout 应用于每个子层的输出,然后将它与子层的输入相加并规范化 (normalized)。此外,我们将 dropout 应用于堆叠的解码器和编码器中的嵌入和位置编码的和。对于基础模型,我们使用
Label Smoothing 训练期间,我们采用
表 2: Transformer 以一部分训练成本在 English-to-German 和 English-to-French newstest2014 测试上取得比之前的 state-of-the-art 模型更好的 BLEU 分数。
在 WMT 2014 English-to-German 翻译任务中,大型的 Transformer 模型 (表 2 中的 Transformer (big)) 比之前报告的最好的模型好超过 2.0 BLEU,建立了新的 state-of-the-art BLEU 分数 28.4。这个模型的配置展示在表 3 的底部的行。训练在 8 块 P100 GPUs 中花费 3.5 天。甚至我们的基础模型都超过了所有以前发布的模型和集成,而训练成本只是有竞争力的模型的训练成本的一部分。
在 WMT 2014 English-to-French 翻译任务中,我们的大型模型取得了 41.0 的 BLEU 分数,胜过之前发布的所有的单模型,而训练成本少于之前的 state-of-the-art 模型的
对于基础模型,我们使用通过平均最后 5 个检查点获得的单模型,这些检查点每 10 分钟写入一次。对于大模型,我们平均最后的 20 个检查点。我们使用束大小为 4 和长度惩罚
表 2 总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的 GPUs 数量和每个 GPU 持续的单精度浮点运算能力的评估相乘来评估训练一个模型所需的浮点运算量。
为了评估 Transformer 不同组件的重要性,我们以不同的方式改变了我们的基础模型,测量在开发集、newstest 上 English-to-German 的性能的变化。我们使用前一节所述的束搜索,但没有检查点平均。我们在表 3 中展示了这些结果。
在表 3 行 (A) 中,我们改变注意力头的数量和注意力键和值的维度,保持计算量不变,如 3.2.2 节所述。虽然单头注意力比最好的设置差 0.9 BLEU,但过多的头也会导致质量下降。
在表 3 行 (B) 中,我们观察到减少注意力键的大小
表 3: Transformer 架构的变体。为列出的值与基础模型的值相同。所有的指标是在 English-to-German 开发集,newstest2013 上的。所列出的困惑度是每个单词的,按照我们的字节对编码的,并且不应该与每个单词的困惑度进行比较。
表 4: Transformer 很好地泛化到英语句法分析 (结果是在 WSJ 的第 23 节上的)
为了评估 Transformer 是否能够泛化到其他任务,我们在英语句法分析上进行了实验。这个任务提出了明确的挑战:输出受到强烈的结构的约束,并且远远长于输入。此外,RNN 序列到序列的模型还没有在小数据上取得 state-of-the-art 的结果。
我们在 Wall Street Journal (WSJ) of the Penn Treebank,大约 40K 训练句子上训练了一个
在第 22 节的开发集上,我们只进行了少量的实验来选择 dropout、注意力和残差、学习率和束大小,其他所有的参数都保持跟 English-to-German 基础翻译模型一致。推理期间,我们将最大的输出长度增加到输入长度
表 4 中的结果表明,尽管缺少特定任务的调优,我们的模型还是表现得令人惊讶地好,产生了结果比之前报告的所有模型都好,除了 Recurrent Neural Network Grammar [8]。
与 RNN 序列到序列模型相比,Transformer 甚至在仅 40K 句子的 WSJ 训练集上训练时也优于 BerkeleyParser。
本工作中,我们提出了 Transformer,第一个完全基于注意力的序列转录模型,用多头自注意力替换了编码器-解码器架构中最常用的循环层。
对于翻译任务,Transformer 能比基于循环层或卷积层的架构显著地训练得更快。在 WMT 2014 English-to-German 和 WMT 2014 English-to-French 翻译任务中,我们取得了一个新的 state-of-the-art。在前一个任务中,我们最好的模型胜过所有之前报告的集成 (ensembles)。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用到其他任务。我们计划将 Transformer 扩展到涉及文本以外的输入和输出形态的问题,并研究局部的、受限的注意力机制,以有效地处理大量的输入和输出,如图像、音频和视频。使生成的不那么时序化是我们的另一研究目标。