attention is all you need

本篇推文引自:Attention Is All You Need

摘要

主要的序列数据转导模型都是基于复杂的递归或卷积神经网络,其中包括一个编码器和一个解码器。我们提出了一种新的简单网络结构,Transformer,完全基于注意机制,避免了递归和卷积。在两个机器翻译任务上的实验表明,该模型具有更高的质量,同时具有更强的并行性和更少的训练时间。我们的模型在WMT 2014英德语翻译任务中达到28.4 BLEU,比现有的最佳结果(包括集成)提高了2倍以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后,最好的BLEU分数为41.8。我们表明,通过成功地将其应用于具有大量和有限训练数据的英语选区解析,Transformer可以很好地推广到其他任务。

1. 介绍

递归神经网络,特别是LSTM和GRU神经网络,已经作为序列建模和转导问题(如语言建模和机器翻译)的最先进的方法。自那以后,许多努力不断地推动循环语言模型和编码器-解码器体系结构的边界。

递归模型通常沿着输入和输出序列的符号位置进行因子计算。顺序计算导致了不能并行化,最近的工作通过分解技巧和条件计算在计算效率上取得了显著的改进,同时也提高了模型性能。然而,顺序计算的基本约束仍然存在。

注意机制已经成为各种任务中强制序列建模和转导模型的重要组成部分,允许不考虑其在输入或输出序列中的距离的相关性建模。然而,几乎所有的注意力机制都与循环网络结合使用。

在这项工作中,我们提出了Transformer,一个避免递归的模型体系结构,而完全依赖于一个注意机制来绘制输入和输出之间的全局依赖关系。Transformer允许更多的并行化,并且在8个P100 gpu上经过12个小时的训练后,翻译质量达到了一个新的水平。

2. 背景

减少顺序计算的目标也构成了扩展神经GPU、ByteNet和convs2的基础,它们都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,从两个任意输入或输出位置关联信号所需的操作数随着位置之间的距离增加而增加,convs2为线性,ByteNet为对数。这使得学习远距离位置之间的依赖关系变得更加困难。在Transformer中,这种情况被减少为一个恒定的操作数,尽管代价是由于平均注意力加权位置而降低了有效分辨率,正如第3.2节所述,我们用多头注意力抵消了这种影响。

自我注意,有时也称为内注意,是一种将单个序列的不同位置联系起来的注意机制,目的是为了计算序列的表示法。自我注意已经成功地应用于阅读理解、抽象摘要、文本蕴涵和学习任务无关的句子表征等多种任务中。

然而,据我们所知,Transformer是第一个完全依靠自注意力来计算输入和输出表示的转导模型,而不使用序列对齐的循环或卷积网络。在下面的章节中,我们将描述Transformer,自注意力,并讨论它相对于其他模型的优势。

3. 模型架构

大多数具有竞争力的序列转换模型都具有编码器-解码器结构。这里,编码器映射一个符号表示的输入序列(x1,…, xn)到连续表示的序列z = (z1,…、zn)。给定z,解码器然后生成一个输出序列(y1,…,yn)。在每个步骤中,模型都是自回归的,在生成下一个步骤时,使用之前生成的符号作为额外的输入。

Transformer遵循这种总体架构,使用了编码器和解码器的堆叠自注意层和点向全连接层,分别如图1的左、右两部分所示。 在这里插入图片描述 # 3.1 Encoder and Decoder Stacks 编码器:编码器由N = 6个相同的层组成。每一层有两个子层。第一个子层是多头自我注意机制,第二个子层是一个简单的的全连接前馈网络。我们在两个子层周围使用一个残差连接,然后进行层规范化。也就是说,每个子层的输出都是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层自身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都产生了维度dmodel = 512的输出。

解码器:解码器也是由N = 6个相同的层组成的堆栈。除了在每个编码器层的两个子层之外,解码器插入第三个子层,它对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用残差连接,然后进行层标准化。我们还修改了译码器堆栈中的自我注意子层,以防止位置注意到后续位置。这种屏蔽,结合输出嵌入偏移一个位置的事实,确保位置i的预测只能依赖于小于i位置的已知输出。

3.2 Attention

注意函数可以被描述为将一个查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由查询的兼容函数和相应的键计算。 在这里插入图片描述 ### 3.2.1 Scaled Dot-Product Attention 在这里插入图片描述 ### 3.2.2 多头注意力 在这里插入图片描述 ### 3.2.3 注意力机制在我们模型中的应用

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

在“编码器-解码器关注”层中,查询来自前一个解码器层,记忆键和值来自编码器的输出。这允许译码器中的每个位置参加输入序列中的所有位置。这模仿了序列对序列模型。

编码器包含自我注意层。在自我注意层中,所有的键、值和查询都来自同一个地方,在本例中是编码器上一层的输出。编码器中的每个位置都可以处理编码器上一层中的所有位置。

同样,解码器中的自我注意层允许解码器中的每个位置关注到解码器中的所有位置,直到并包括该位置。为了保持解码器的自回归特性,我们需要防止信息在解码器中向左流动。通过屏蔽(设置为−∞)softmax输入中与非法连接对应的所有值,我们在缩放点积注意内部实现了这一点。参见图2。

3.3 Position-wise Feed-Forward Networks

在这里插入图片描述 ## 3.4 Embeddings and Softmax 类似于其他序列转换模型,我们使用学习嵌入将输入标记和输出标记转换为向量。我们还使用常用的学习线性变换和softmax函数将解码器输出转换为预测的下一个token概率。在我们的模型中,我们在两个嵌入层之间共享相同的权矩阵和pre-softmax线性变换。在嵌入层中,我们将权重乘以√dmodel。

3.5 位置编码

由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了“位置编码”。位置编码具有与嵌入相同的维数,因此两者可以相加。 在这里插入图片描述 在这项工作中,我们使用不同频率的正弦和余弦函数: 在这里插入图片描述 我们也尝试使用学习过的位置嵌入,并发现两个版本产生了几乎相同的结果(见表3 row (E))。我们选择正弦版本是因为它可以让模型推断出比训练过程中遇到的序列长度更长的序列。

4. 为什么是自注意力

在本节中,我们将自我注意层与通常用于映射一个可变长度符号表示序列(x1,…,xn)转换为另一个等长序列(z1,…, zn)的循环层和卷积层进行比较。促使我们使用自注意力的原因,我们认为有三个需求。

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

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

如表1所示,自我注意层用固定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。为了提高涉及非常长的序列的任务的计算性能,自注意可以被限制为只考虑以各自输出位置为中心的输入序列中大小为r的邻域。这将把最大路径长度增加到O(n/r)。我们计划在未来的工作中进一步研究这种方法。 在这里插入图片描述 作为附带的好处,自我关注可以产生更多可解释的模型。我们将检查模型中的注意力分布,并在附录中给出并讨论示例。独立的注意力头不仅清楚地学习执行不同的任务,许多似乎表现出与句子的句法和语义结构相关的行为。

5. 训练

本节描述我们的模型的训练机制。

5.1 训练数据和批处理

我们使用标准的WMT 2014英语-德语数据集进行训练,该数据集包含约450万个句子对。句子使用字节对编码进行编码,该编码具有大约37000个token的共享源-目标词汇表。对于英语-法语,我们使用了更大的WMT 2014英语-法语数据集,该数据集包含3600万个句子,并将标记拆分为32000词块词汇。根据近似序列长度对句子对进行批处理。每个训练批包含一组大约25000个源token和25000个目标token的句子对。

5.2 Hardware and Schedule

我们在一台拥有8个NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们一共训练了基础模型10万步,12个小时。对于我们的大型模型(在表3的底线上描述),步进时间是1.0秒。大型模型接受了30万步(3.5天)的训练。

5.3 优化

在这里插入图片描述 ## 5.4 正则化 我们在训练过程中采用了三种正规化方式:

在添加到子层输入并归一化之前,我们将Dropout应用到每个子层的输出。此外,我们对编码器和解码器堆栈中的嵌入和位置编码的总和应用dropout。对于基本模型,我们使用Pdrop = 0.1的比率。 在这里插入图片描述 # 6. 结果 结果证明模型好。

7.结论

在这项工作中,我们提出了Transformer,即完全基于注意力的序列转换模型,用多头自我注意取代了编码器-解码器体系结构中最常用的循环层。

对于翻译任务,Transformer的训练速度明显快于基于循环或卷积层的架构。在2014年WMT英德翻译和2014年英法翻译任务中,我们都达到了一个新的水平。在前一个任务中,我们最好的模型甚至比以前报告的所有集合都要好。

我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到文本以外的输入和输出模式的问题,并研究局部的、受限制的注意力机制,以有效地处理大型输入和输出,如图像、音频和视频。