《Attention Is All Y ou Need》翻译 Ashish Vaswani Noam Shazeer Niki Parmar Jakob etc.

目录

摘要

一.介绍

二.背景

三.模型架构

3.1编码器和解码器堆栈

3.2注意力

3.2.1按比例缩小的点积的注意力

3.2.2多端注意力

3.2.3注意力在模型中的应用

3.3Position-wise前馈网络

3.4嵌入和Softmax

3.5位置编码

四.为什么Self-Attention

五.训练

5.1训练数据和批处理

5.2硬件和进度

5.3最优控制器

5.4调整

六.结果

6.1机器翻译

6.2模型的变化

6.3英语选区解析

七.结论


 

摘要

        主要的序列转导模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。表现最好的模型还通过注意力机制连接编码器和解码器。我们提出了一个新的简单的网络架构,转换器,完全基于注意机制,完全放弃递归和卷积。在两个机器翻译任务上进行的实验表明,这些模型在质量上更优越,同时具有更强的并行性,所需的训练时间明显更少。我们的模型在2014年WMT英语-德语翻译任务中实现了28.4 BLEU,比现有的最佳结果(包括集成)提高了2个BLEU以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后建立了一个新的最先进的单模型BLEU分数为41.8,仅为文献中最佳模型训练成本的一小部分。通过成功地将Transformer应用于具有大量和有限训练数据的英语选区解析,我们表明Transformer可以很好地推广到其他任务。

关于BLEU:自然语言处理——BLEU详解以及简单的代码实现_Allocator的博客-CSDN博客_bleu

一.介绍

        循环神经网络,特别是长短期记忆[13]和门控循环[7]神经网络,已经被确立为序列建模和如语言建模和机器翻译的转换问题。此后,许多努力继续推动循环语言模型和编码器-解码器架构的边界[38,24,15]。

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

        注意力机制已经成为各种任务中引人注目的序列建模和转导模型的一个组成部分,允许对依赖关系建模,而不考虑它们在输入或输出序列中的距离[2,19]。然而,除了少数[27]外,所有这些注意机制都与循环网络结合使用。

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

二.背景

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

        自我注意,有时也被称为内部注意,是一种将单个序列的不同位置联系起来的注意机制,目的是计算序列的表示。自我注意已成功地应用于多种任务中,包括阅读理解、抽象总结、文本蕴涵和学习任务无关的句子表征[4,27,28,22]。

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

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

三.模型架构

        大多数竞争的神经序列转导模型都有一个编码器-解码器结构[5,2,35]。在这里,编码器映射一个符号表示的输入序列(x1,…, xn)转化为连续表示序列z = (z1,…、zn)。给定z,解码器生成一个输出序列(y1,…, ym)符号一次一个元素。在每个步骤中,模型都是自回归的[10],在生成下一个步骤时使用先前生成的符号作为额外的输入。

        Transformer遵循这种整体架构,编码器和解码器使用堆叠的自关注层和点状的、完全连接的层,分别如图1的左半部分和右半部分所示。

5df9781e262f47378b39a73fd41ff462.png

3.1编码器和解码器堆栈

编码器:

        编码器由N = 6个相同的层组成。每一层有两个子层。第一种是多头自我注意机制,第二种是简单的、按位置完全连接的前馈网络。我们在两个子层周围分别使用一个剩余连接[11],然后使用层归一化[1]。即每个子层的输出是LayerNorm(x + subblayer (x)),其中subblayer (x)是子层自身实现的函数。为了方便这些剩余连接,模型中的所有子层以及嵌入层产生的输出维数为dmodel = 512。

解码器:

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

3.2注意力

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

图2:(左)放大的点产品注意力。(右)Multi-Head Attention由几个并行运行的注意层组成。

0b7face8239845578db07dfd32587d35.png

3.2.1按比例缩小的点积的注意力

        我们将我们的特别注意称为“Scaled Dot-Product attention”(图2)。输入由维度dk的查询和键,以及维度dv的值组成。我们计算查询的所有键的点积,每个键除以√dk,然后使用softmax函数来获得值的权重。

        在实践中,我们同时计算一组查询的注意函数,并将其打包到矩阵q中,键和值也打包到矩阵K和V中。我们计算输出矩阵为:

627c8d0d69734325abe61102844d6931.png

        最常用的两个注意函数是加性注意[2]和点积(乘性)注意。点积关注与我们的算法相同,除了比例因子为1√dk。加性注意利用带有单个隐藏层的前馈网络计算相容函数。虽然这两者在理论复杂度上相似,但点积注意在实践中要快得多,而且空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

        当dk值较小时,两种机制表现相似,但当dk[3]值较大时,加性注意优于点积注意。我们怀疑,当dk值很大时,点积的大小会变大,将softmax函数推入梯度极小的区域4。为了抵消这种影响,我们将点积缩放为1√dk。

3.2.2多端注意力

        我们发现,与其使用dmodel-维的键、值和查询来执行单一的注意函数,不如将查询、键和值分别用不同的h次线性投影到dk、dk和dv维度。然后,我们对每个查询、键和值的投影版本并行执行注意功能,产生dv维的输出值。这些数据被连接并再次进行投影,从而产生最终的值,如图2所示。

        多头注意允许模型在不同位置共同注意来自不同表示子空间的信息。对于单个注意力头,平均会抑制这种情况。

4dfc1a1df9a04a5bb4e4a826809f21d3.png

 

        其中投影为参数矩阵W Q i∈Rdmodel×dk, W Ki∈Rdmodel×dk, W Vi∈Rdmodel×dv, W O∈Rhdv×dmodel。

        在这项工作中,我们使用了h = 8个平行的注意力层,也就是大脑。对于每一个模型,我们使用dk = dv = dmodel/h = 64。由于减少了每个头部的维度,其总计算成本与全维度单头部关注的计算成本相近。

3.2.3注意力在模型中的应用

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

        在“编码器-解码器注意”层中,查询来自前一个解码器层,内存键和值来自编码器的输出。这使得解码器中的每个位置都能处理输入序列中的所有位置。这模拟了序列对序列模型(如[38,2,9])中典型的编码器-解码器注意机制。

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

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

3.3Position-wise前馈网络

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

07142ce444b94f24b4bd00e2ac9dd4c3.png

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

3.4嵌入和Softmax

        与其他序列转导模型类似,我们使用学习过的嵌入将输入标记和输出标记转换为维度dmodel的向量。我们还使用常用的线性变换和softmax函数来将解码器输出转换为预测的下一个令牌概率。在我们的模型中,我们在两个嵌入层之间共享相同的权值矩阵和前softmax线性变换,类似于[30]。在嵌入层中,我们将权重乘上√dmodel。

3.5位置编码

        由于我们的模型不包含递归和卷积,为了使模型利用序列的顺序,我们必须注入一些关于序列中的标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了“位置编码”。位置编码与嵌入具有相同的维模型,可以将两者相加。位置编码有多种选择,学习和固定[9]。

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

ba079e1a1f8f406f9ca32624eed85bcf.png

        在这项工作中,我们使用不同频率的正弦和余弦函数:

efb6311eba2c414a930afde79b1beea1.png

        其中pos为位置,I为维数。也就是说,位置编码的每个维度对应一个正弦信号。波长从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它会让模型很容易学会通过相对位置参加,因为对于任何固定的偏移k, P Epos+k可以表示为P Epos的线性函数。

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

四.为什么Self-Attention

        在本节中,我们将自我注意层的各个方面与通常用于映射一个可变长度符号表示序列的循环层和卷积层进行比较(x1,…, xn)到另一个相等长度的序列(z1,…, zn),与xi, zi∈Rd,如典型序列转导编码器或解码器中的一个隐层。激励我们使用自我关注我们考虑三个需求。

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

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

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

        一个核宽度为k < n的卷积层并不连接所有的输入和输出位置对。在相邻核的情况下,这样做需要O(n/k)卷积层的堆栈,在扩大卷积[18]的情况下需要O(logk(n)),增加网络中任意两个位置之间的最长路径的长度。卷积层通常比递归层昂贵k倍。然而,可分离卷积[6]大大降低了复杂性,为O(k·n·d + n·d2)。然而,即使k = n,可分离卷积的复杂性等于自我注意层和点前馈层的组合,这是我们在模型中采用的方法。

        作为附带的好处,自我关注可以产生更多可解释的模型。我们检查注意分布从我们的模型,并提出和讨论的例子在附录。个体的注意力头不仅学习执行不同的任务,而且许多注意力头似乎表现出与句子的句法和语义结构相关的行为。

五.训练

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

5.1训练数据和批处理

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

5.2硬件和进度

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

5.3最优控制器

        我们使用Adam优化器[20],其中β1 = 0.9, β2 = 0.98和?= 10−9。在整个训练过程中,我们根据公式改变学习率:

1278eae4874c43df8d0a86d824585b6a.png

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

5.4调整

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

残差Dropout

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

标签平滑

        在训练过程中,我们对值?ls = 0.1[36]进行了标签平滑。这就造成了困惑,因为模型学会了更多的不确定,但提高了准确性和BLEU分数。

表2:在2014年最新的英语-德语和英语-法语测试中,Transformer的BLEU分数比之前的最先进的型号更高,而培训成本只是培训成本的一小部分。

145ac9eb69174207bb9acb4eb73888da.png

六.结果

6.1机器翻译

        在2014年WMT英语-德语翻译任务中,大变压器模型(transformer (big)在表2)比之前报告的最好的模型(包括集成)的表现超过2.0 BLEU,建立了新的最先进的BLEU分数28.4。这个模型的配置列在表3的底线中。训练时间为3.5天,使用的是8p100 gpu。甚至我们的基础模型也超过了所有之前发布的模型和集合,其训练成本只是任何竞争模型的一小部分。

        在2014年WMT英语-法语翻译任务中,我们的大模型获得了41.0的BLEU分数,超过了之前发布的所有单一模型,而培训成本不到之前最先进模型的1/4。为英语-法语训练的Transformer(大)模型的辍学率Pdrop = 0.1,而不是0.3。

        对于基本模型,我们使用一个通过平均最后5个检查点获得的单一模型,这些检查点每10分钟编写一次。对于大型模型,我们平均使用最后20个检查点。我们使用波束搜索,波束大小为4,长度惩罚α = 0.6[38]。这些超参数是在开发集上进行实验后选择的。我们将推断期间的最大输出长度设置为输入长度+ 50,但在可能的情况下提前终止[38]。

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

6.2模型的变化

        为了评估Transformer不同组件的重要性,我们以不同的方式改变我们的基础模型,测量开发集上英语-德语翻译的性能变化。我们使用前一节中描述的波束搜索,但没有检查点平均。我们在表3中展示了这些结果。

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

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

7e5411e45a2b4023a3da68d6cfb7f9e3.png

表4:《变形金刚》很好地概括了英国选民的分析(结果见《华尔街日报》第23节)

3fa3dfe48018440796448dbfd4b38028.png

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

6.3英语选区解析

        为了评估Transformer是否可以推广到其他任务,我们对英语选区解析进行了实验。这项任务带来了具体的挑战:产出受到强大的结构性约束并且产出比输入要长得多。此外,RNN序列到序列模型还不能在小数据区[37]中获得最先进的结果。

        我们在Penn Treebank[25]的华尔街日报(WSJ)部分上训练了一个dmodel = 1024的4层变压器,大约40K训练句子。我们还在半监督设置中训练它,使用较大的高置信度和BerkleyParser语料库,从大约17M句[37]。我们使用16K代币的词汇表用于WSJ仅设置和32K代币的词汇表用于半监督设置。

        在section 22开发集上,我们只进行了少量的实验来选择dropout、注意力和残差(章节5.4)、学习率和波束大小,所有其他参数都保持英语到德语基础翻译模型不变。在推断过程中,我们将最大输出长度增加到输入长度+ 300。对于WSJ和半监督设置,我们都使用了21和α = 0.3的光束大小。

        我们在表4中的结果显示,尽管缺乏特定任务的调优,我们的模型表现得惊人地好,产生的结果比之前报告的所有模型都好,除了循环神经网络语法[8]。

        与RNN序列到序列模型[37]相比,即使只在包含40K个句子的WSJ训练集上训练,Transformer的表现也优于BerkeleyParser[29]。

七.结论

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

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

        我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、有限的注意力机制,以有效地处理大量的输入和输出,如图像、音频和视频。我们的另一个研究目标是让世代不那么连续。

        我们用来训练和评估模型的代码可以在 https://github.com/tensorflow/tensor2tensor.中查到

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值