Attention is all you need

Abstract

摘要主要的序列转换模型是基于复杂的递归或卷积神经网络,其中包括编码器和解码器。性能最好的模型还通过注意机制连接编码器和解码器。我们提出了一种新的简单的网络结构——变形金刚,它完全基于注意力机制,完全省去了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优,同时具有更大的并行性,并且需要更少的训练时间。我们的模型在2014年WMT英德翻译任务中达到28.4 BLEU。改进现有的最佳结果。包括超过2个BLEU的合奏。在2014年的WMT英法翻译任务中,我们的模型在8个gpu上进行3.5 天的训练后,建立了一个新的单模型——最先进的BLEU评分41.8。从文献中获得的最佳模型的一小部分培训成本。我们表明,转换器可以很好地将其推广到其他任务,方法是成功地将其应用到具有大量和有限训练数据的英语集合解析

1 Introduction

RNN,LSTM和GRN已经为序列模型运用于机器翻译等创建了坚实的基础,许多力气用于去除RNN和编码器和解码器框架 的障碍。循环模型通常沿着输入、输出序列的符号位置进行计算。调整位置步骤计算时间,他们生成一个隐藏的状态序列h, ht-1作为前面的隐藏状态的函数和输入位置t。这内在的顺序自然排除了并行化训练的例子,在长序列的长度变得非常关键,因为内存约束限制批处理的例子。最近的工作已经通过因子分解技巧[21和条件计算321]在计算效率方面取得了显著的改进。同时也提高了模型的性能。然而,顺序计算的基本约束仍然存在。

在各种任务中,注意机制已经成为引人注目的序列建模和转换模型的一个组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离[2]。19. 除少数情况外[271,然而,这种注意机制经常用在链接循环 网络。

在这项工作中,我们提出了Transformer,这是一种避免递归的模型架构,而是完全依赖于一种注意力机制来绘制输入和输出之间的全局依赖关系。Transformer允许更多的并行化,并且可以在8个P100 GPUs.I上进行最少12小时的培训,从而在翻译质量方面达到新的水平

 

2 Background

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

Self-attention。有时称为内注意,是一种将单个序列的不同位置联系起来以计算序列表示的注意机制。自注意已经成功地应用于各种各样的任务中,包括阅读理解、抽象概括、文本蕴涵和学习独立于任务的句子表达4,27,28,221。

端到端记忆网络基于一种周期性注意机制,而不是按顺序排列的递归,并已被证明在简单语言问题回答和语言建模任务中表现良好[34]

然而,据我们所知。Transformer是第一个完全依赖于自我注意来计算输入和输出的表达式而不使用序列的转换模型 依赖RNNs或卷积。在下面的章节中。我们将描述Transformer,激发self-attention,并讨论它相对于[17,18]和19等模型的优点

3 Model Architecture

大多数竞争性的神经序列转导模型具有编码-解码器结构15,2,35l。在这里,编码器映射一个输入序列的符号表示(x1…(xn)到一个连续表示序列z= (z1,.zn).给定z,解码器生成输出序列(y1…yn)符号一次一个元素。在每个步骤中,模型都是自动回归的[10],在生成下一个步骤时,使用之前生成的符号作为额外的输入。Transformer使用stacked self-attention and point-wise,遵循这个整体架构。编码器和解码器都是全连接,分别显示在图1的左半边和右半边。

Attention is all you need

3.1

编码器:

编码器是由一堆N =6个相同的层。每个层有两个子层。第一个是一个多头自我注意机制,第二个是一个简单的。位置全连通前馈网络。我们在每两个子层周围使用一个残余连接11l,然后进行层归一化[1]。这是。每个子层的输出是LaverNorm(x + subblaver (z)),其中subblayer (z)是子层本身实现的函数。为了方便这些剩余的连接,模型中的所有子层以及嵌入层产生尺寸d维度=512的输出。

解码器:

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

3.2 Attention

注意力函数可以描述为将query和一组键-值对映射到输出。其中query、 键、值和输出都是向量。输出计算为值的加权和,其中分配给每个值的权重由query与相应键的compatibility函数计算。

Attention is all you need

3.2.1 Scaled Dot-Product Attention

如上作图,通常的attention,输入包括Q K V,其中K V分别是dk,dv维度。计算query和keys的点积,每一个被dk开根号数去,输入一个softmax函数,计算权重。

实际上,我们同时计算,打包进一个矩阵Q,键和值被打包进K,V,计算矩阵输出:

Attention is all you need

两个最常用的注意函数是加法注意[21]和点积(乘法)注意。点积注意与我们的算法是相同的,除了缩放因子dk开根号。加法注意计算compatibility函数使用一个前馈网络与一个隐藏的laver。虽然两者在理论上的复杂性相似,但在实践中,点积的注意力要快得多,空间利用率也更高。因为它可以使用高度优化的矩阵乘法代码来实现。

而对于较小的d值,两种机制的表现相似,对于较大的d值[31],加法注意优于不缩放的点积注意。我们怀疑,当dk很大时,点积的值很大,将softmax函数推到梯度非常小的区域以抵消这种影响,我们将点积按dk开根号 进行缩放。

3.2.2 Multi-Head Attention

与使用dmodel-dimensional键、值和查询执行单个注意函数不同,我们发现分别线性投影查询、键和值h次到学习了的线性投影到dk。dk和dv维数是有益的。在查询、键和值的每个投影版本上,我们并行执行注意力函数,生成d维输出值。这些值被连接起来并再次投影(projected,),产生最终的值,如图上2所示

多头注意允许模型在不同postions注意来自不同表示子空间的信息。只有一个注意力头,平均化会抑制这种情况。

Attention is all you need

3.2.3 Applications of Attention in our Model

3个不同的使用:

a在“编解码器注意”层中,查询来自于先前的解码器层,而存储键和值来自于编码器的输出。这使得解码器中的任意位置都可以参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编码-解码器注意机制,例如[3829.

b编码器包含自我注意层。在一个self-attention layer里所有的键、值;查询来自相同的地方,在本例中,是编码器中前一层的输出。编码器中的每个位置都可以参加到编码器的前一个layer中的所有位置。

c类似地,解码器中的自我注意层允许解码器中的每个位置关注解码器中的所有位置,直到该位置并包括该位置。我们需要防止解码器中的左向信息流,以保持自回归特性。我们通过屏蔽(设置为-inf)与非法连接相对应的softmax的inpu中的所有值来实现这个内部缩放点积 attention。看Figure2

3.3 Position-wise Feed-Forward Networks

除了注意子层,我们的编码器和解码器的每一层都包含一个完全连接的前馈网络,它分别应用于每个位置,并完全相同。它由两个线性变换组成,中间有一个ReLU**;

Attention is all you need

 

虽然不同位置的线性变换是相同的,但是它们在不同的层之间使用不同的参数。另一种描述它的方法是用内核大小为1的两个卷积。输入输出维度为dmodel = 512,内层维度为dff = 2048。

3.4 Embeddings and Softmax

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

3.5 Positional Encoding

由于我们的模型不包含递归和卷积,为了使模型能够利用序列的顺序,我们必须注入一些关于的相对或绝对位置的信息。

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

Attention is all you need

序列中的标记。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码具有与嵌入相同的维度dmodel。这两个可以相加。位置编码有很多种选择,有习得的,也有固定的。在这工作。我们使用不同频率的正弦和余弦函数:

Attention is all you need

其中pos是位置,i是维度。这是。pbsitional编码的每个维都对应于一个正弦波。波长从27到10000*2pi形成一个几何级数。我们选择这个函数是因为我们假设它可以让模型很容易地学会通过相对位置来参与。因为对于任何固定偏移量k, PEpos+k都可以表示为的线性函数PEpos。我们也试着用学习到的位置嵌入来代替。并发现两个版本产生了几乎相同的结果(见表3行(E))。我们选择正弦版本,因为它可能允许模型外推序列长度比在训练中遇到的更长。

4 Why Self-Attention

在本节中,我们将自我注意层的各个方面与循环层和卷积层进行比较,这两个层通常用于映射一个可变长度的符号表示序列(x1,…xn)到另一个长度相等的序列(z1,..zn)、xi、zi E Rd,如在典型的序列转换编码器或解码器中的隐藏层。激发我们使用它的因素有三。

一个是每层的计算复杂度。另一个是可以并行化的计算量,由所需的最小顺序操作数来衡量。第三个是网络中远程依赖之间的路径长度。在许多序列转换任务中,学习长期依赖关系是一个关键的挑战。影响学习这种依赖关系能力的一个关键因素是在网络中前进和后退信号必须经过的路径的长度。输入和输出序列中任意位置组合之间的这些路径越短,就越容易了解长期依赖关系[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

如表I所示,“自我注意”层通过固定数量的顺序执行操作将所有位置连接起来,而“循环层”则需要O(n)个顺序操作。在计算复杂度方面,当序列长度n小于表示维数d时,自我注意层比循环层次更快,这在最先进的机器翻译模型中最常见的情况是句子表示。例如字块[38]和字节对[31]表示。为了提高涉及很长序列任务的计算性能,可以将自我注意限制为只考虑一个大小为r的邻域在输入序列以各自的输出位置为中心。这将把最大路径长度增加到O(n/r)。

我们计划在未来的工作中进一步研究这种方法。一个内核宽度为k< n的卷积laver不能连接所有的输入和输出位置对。这样做需要O(n/k)卷积层的堆栈(在连续内核的情况下),或者O(logk (n))在扩展卷积[18]的情况下,增加网络中任意两个位置之间最长路径的长度。卷积层通常比递归层要昂贵一些,大约是k的一倍。然而,可分离卷积[6]大大降低了复杂度。Ok.n.dn.d2)。然而,即使k =n,可分离卷积的复杂度也等于我们在模型中采用的方法,即一个自我注意层和一个点向前馈层的组合。

作为附带的好处,。自我关注可以提供更多的解释模型。我们从我们的模型中检查注意分布,并在附录中展示和讨论示例。单独的注意者不仅清楚地学会了执行不同的任务,而且许多人表现出了与句子的句法结构和语义结构相关的行为。

5 Training

5.1 Training Data and Batching

我们在标准的WMT 2014英德数据集上进行训练,该数据集包含大约450万对句子。句子使用字节对编码进行编码[31]。它拥有一个大约37000个tokens的共享源目标词汇表。对于英法两种语言,我们使用了更大的WMT 2014英法两种语言的数据集,其中包含3600万个句子,并将标记拆分为32000个单词词汇表[38]。句子对 以近似的顺序长度排列在一起。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

5.2 Hardware and Schedule

我们在一台装有8台NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤花费大约0.4秒。我们对基本模型进行了总共10万步或12小时的训练。我们的大模型。(见表3).步长为1.0秒。大模型训练30万步(3.5天)

 

5.3优化器

我们使用Adam优化器[20 with 31 =0.9, B2= 0.98, e= 10-9]。我们在训练过程中根据公式改变了学习率:

Attention is all you need

这对应于在第一个热身步骤的训练步骤中线性地增加学习率,然后在第一个热身步骤的步骤数的平方根的倒数中成比例地减少学习率。我们使用了warmup_steps =4000。

5.4 Regularization

我们在train中采用了三种类型的正规化:

我们对每个子层的输出应用Dropout[331],然后将其添加到子层的输入并归一化。此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码。对于基本模型,我们使用的速率是Parop = 0.1。

Attention is all you need

 

6.Results

6.1 Machine Translation

在2014年WMT英语-德语翻译任务中,大变压器模型(transformer(表2中的大))的性能比之前报告的最佳模型(包括集成电路)高出了2.0倍以上。建立一个新的最先进的BLEU得分28.4。这个模型的配置是在表3的底线上进行的,在8个P100 gpu上花费了3.5天的时间。甚至我们的基本模型也超越了所有以前发布的模型和集成。

比任何一款竞争机型的train成本都要低。关于2014年WMT英法翻译任务。我们的大模型达到了BLEU评分41.0。优于所有以前发表的单一模型,不到四分之一的tain cost用的前一个最先进的模型。接受英法双语的Transformer (big)模型使用dropout rate Paron = 0.1,而不是0.3对于基本模型,我们使用一个单独的模型,这个模型是通过平均最后5个检查点得到的,这些检查点每隔10分钟编写一次。对于大的模型。我们平均计算了最后20个检查点。我们使用波束搜索,波束大小为4,长度惩罚a = 0.6[38]。这些超参数是在开发集上进行实验后选择的。我们将推理时的最大输出长度设置为输入长度+ 50,但在可能的情况下提前终止[38]表[2总结了我们的结果,并将我们的翻译质量和培训成本与文献中的其他模型架构进行了比较。我们通过乘以训练时间、使用的gpu数量和每个GPU5持续单精度浮点容量来估计用于训练模型的浮点操作的数量

6.2模型的变化

评估变压器不同部件的重要性。我们以不同的方式改变了我们的基本模式,测量了在开发集newstest2013中英德翻译的性能变化。我们使用前一节描述的波束搜索,但没有检查点平均。我们在表3中给出了这些结果在表3行(A)中,我们改变了注意头的数量、注意键和值维度,保持计算量不变,如第3.2.2节所述,当单head注意比最佳设置差0.9个BLEU时,质量也会下降,因为头太多。

表3:Transformer架构的变化。未列出的值与基本模型的值相同。所有指标都在英德翻译开发集newstest2013上。根据我们的字节对编码,列出的perplexities.是每个单词,不应该与每个单词的perplexities.相比较

Attention is all you need

Attention is all you need

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

6.3 English Constituency Parsing

为了评估Transformer是否可以推广到其他任务,我们对英语的选民解析进行了实验。这项任务提出了具体的挑战:输出受制于强结构约束,而且明显比输入长。此外,RNN序列到序列模型还不能在小数据状态[37]中获得最新的结果我们在《华尔街日报》上对一个四层变压器进行了dmadel = 1024的训练,这是Penn Treebank 251的一部分,大约40K的训练语句。我们还在半监督的环境下训练它,使用更大的高置信度和BerkleyParser语料库,大约有1700万句37. 在“华尔街日报”场景中,我们使用了16K的词汇量,而在“半监督”场景中,我们使用了32K的词汇量。在Section 22 development set上,我们只进行了少量的实验来选择dropout、attention和residual (section5.4)、learning rate和beam size,其他所有参数都与英德base translation模型保持不变。在推理过程中,我们将最大输出长度增加到输入长度+ 300。我们使用的光束尺寸为21,a = 0.3,这两种情况都只适用于华尔街日报和半监督设置。我们在表中的结果显示,尽管缺乏特定于任务的调优,我们的模型执行得出奇的好,比所有以前报告的模型产生了更好的结果,除了递归神经网络文法18与RNN sequence-to-sequence模型[37]相比,Transformer即使只在华尔街日报的40K句子训练集上进行训练,也比BerkeleyParser[29]做得更好。

7 Conclusion

在这项工作中,我们提出了转换器,第一个完全基于注意的序列转换模型,用多头自注意取代了编码-解码器架构中最常用的循环层。对于转换任务,转换器的训练速度比基于循环或卷积循环的架构要快得多。在2014年WMT英法翻译任务和2014年WMT英法翻译任务中,我们达到了一个新的水平。在前一个任务中,我们的最佳模型甚至比所有先前报道的集成电路都要好。我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限制的注意机制,以有效地处理大型输入和输出,例如图像、音频和视频。减少世代的连续性是我们的另一个研究目标。我们用来训练和评估我们的模型的代码可以在https://github.com/ensorflow /tensor2tensor

https://github.com/tensorflow/tensor2tensor上找到。感谢Nal Kalchbrenner和Stephan Gouws富有成效的评论、更正和灵感

参考文献....