欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

变形金刚》翻译:《你只需要关注》。

最编程 2024-04-15 19:46:13
...

摘要:主要序列转导模型基于包括编码器(encoder)和解码器(decoder)的复杂递归或卷积神经网络。 性能最佳的模型还通过注意机制连接编码器和解码器。 我们提出了一种新的简单网络架构,Transformer,完全基于注意机制,完全免除递归和卷积。 两个机器翻译任务的实验表明,这些模型质量优越,同时可以更加并行化,并且需要更少的时间进行训练。我们的模型在WMT 2014英语 - 德语翻译任务中达到28.4BLEU,超过现有的最佳成绩,包括集成,超过2 BLEU。在WMT 2014英语到法语翻译任务中,我们的模型在8个GPU上训练3.5天后,建立了一个新的单模型最新BLEU分数41.8,这是最好的训练成本的一小部分文献中的模型。

 

1 Introduction(简介)

循环神经网络(Recurrent neural networks),长期短期记忆(long short-term memory)[12]和特别是GRU(gated recurrent)[7]神经网络已经成为最先进的方法,用于序列建模和语言转换问题,如语言建模和机器翻译[29,2,5]。自那以后,许多努力继续推动循环语言模型和编码器-解码器架构的界限[31,21,13]

递归模型通常考虑沿输入和输出序列的符号位置的计算。将位置与计算时间中的步骤对齐,它们产生一系列隐藏状态ht,是先前隐藏状态ht−1和位置t的输入的函数。这种固有的顺序性质排除了训练样本中的并行化,这在较长的序列长度中变得至关重要,因为内存约束限制了跨越示例的批处理。最近的工作通过分解技巧[18]和条件计算[26]实现了计算效率的显着提高,同时在后者的情况下也提高了模型性能。然而,顺序计算的基本约束仍然存在。

注意机制已成为各种任务中引人注目的序列建模和转换模型的组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离[2,16]。然而,在少数情况下[22],这种注意机制与复发网络一起使用。

在这项工作中,我们提出了Transformer,一种避免重现的模型架构,而是完全依赖于注意机制来绘制输入和输出之间的全局依赖关系。在8个P100 GPU上经过长达12小时的训练后,该Transformer可以显着提高并行度,并可以在翻译质量方面达到新的水平。

2 Background(背景)

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

自我注意(Self-attention),有时也称为内部关注,是一种与单个序列的不同位置相关的注意力机制,目的是计算序列的表示形式。自我关注已经成功地用于各种任务,包括阅读理解,抽象性概括,文本蕴涵和学习任务独立的句子表示[4,22,23,19]。

端到端内存网络基于循环注意机制而不是序列对齐重复,并且已被证明在简单语言问答和语言建模任务中表现良好[28]。

然而,据我们所知,Transformer是第一个完全依靠自我关注的转换模型来计算其输入和输出的表示,而不使用序列对齐的RNN或卷积。在接下来的部分中,我们将描述Transformer,激发自我关注并讨论其优于[14,15]和[8]等模型的优势。

3 Model Architecture(模型结构)

大多数竞争性神经序列转换模型具有编码器-解码器结构[5,2,29]。这里,编码器将符号表示的输入序列(x1​,....,xn​)映射到连续表示序列z=(z1,....,zn)。给定z,然后解码器一次一个元素地生成符号的输出序列(y1,....,ym)。每一步模型都是自回归的,即之前生成的符号序列会作为额外的输入,用来生成下一个输出。

Transformer这种整体架构,使用堆叠的自注意和逐点(point-wise),全连接层用于编码器和解码器,分别如图1的左半部分和右半部分所示。

 

图1 Transformer模型架构

3.1编码器和解码器堆栈

编码器:

编码器由N=6个基本层堆叠起来,每个基本层包含两个子层。第一个是多头自我注意机制,第二个是简单的全连接的前馈网络。我们在两个子层的每一层周围采用了残差连接[10],然后然后有一个归一化层[1]。也就是说,每个子层的输出是LayerNorm(x+Sublayer(x)) 其中Sublayer(x)是子层sub-layer的函数,为了促进这些残留连接,模型中的所有子层以及嵌入层均产生尺寸为dmodel = 512的输出。

解码器:

解码器也由N = 6个基本层的堆栈组成。每个基本层除了编码器层中两个子层以外,解码器还插入一个第三子层,该子层对编码器堆栈的输出执行多头关注。与编码器类似,我们在每个子层周围采用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自我注意子层,以防止位置关注后续位置。修订decoder的self-attention sub-layer 来保留位置。因为输出的嵌入层由偏移了一个位置。确保对i位置的预测值只取决于已知的在i之前的输出。

3.2注意力

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

3.2.1缩放了的点乘注意力

我们称我们特别注意"点乘积注意"(图2)。输入由维数为的查询(queries)和键值(keys)以及维的值(values)组成。计算query和所有keys的点积,每个都除以,然后应用softmax函数获得values的权重。实际上,我们在一组查询上同时计算注意力函数,将它们打包成矩阵Q。键和值也打包成矩阵K和V。我们将输出矩阵计算为:

 

两个最常用的注意力功能是加性注意力[2]和点积(乘法)注意力。点积注意与我们的算法相同,除了比例因子。加法注意力使用具有单个隐藏层的前馈网络来计算兼容性函数。尽管两者在理论上的复杂度相似,但由于可以使用高度优化的矩阵乘法代码来实现,因此点积的注意力在实践中要快得多,并且空间效率更高。

对于较小的而言,这两种机制的表现相似,但加法注意要优于点积注意,而不会扩大的值[3]。我们怀疑对于较大的值,点积会增大,从而将softmax函数推入梯度极小的区域4。为抵消这种影响,我们将点积缩放。

3.2.2多头注意机制

我们发现,不对dmodel维的键,值和查询执行单个注意功能,而是将查询,键和值分别以不同的,学习的线性投影分别线性地投影到,和维度h时间是有益的。然后,在查询,键和值的每个这些预计的版本上,我们并行执行关注功能,从而产生维输出值。如图2所示,将它们串联起来并再次投影,以得到最终值。

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

其中投影是参数矩阵和在这项工作中,我们采用h = 8个平行注意层或头部。对于这些中的每一个,我们使用==/h=64。由于每个头部的尺寸减小,因此总的计算成本类似于具有全尺寸的单头注意力的计算成本。

3.2.3注意力机制在模型中的应用

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

  • 在"编码器-解码器注意"层中,查询来自上一个解码器层,而存储键和值来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模仿了序列到序列模型(例如[31、2、8])中的典型编码器-解码器注意机制。
  • 编码器包含自我注意层。在自我关注层中,所有键,值和查询都来自同一位置,在这种情况下,是编码器中上一层的输出。编码器中的每个位置都可以覆盖编码器上一层中的所有位置。
  • 类似地,解码器中的自我注意层允许解码器中的每个位置都参与解码器中的所有位置,直到该位置为止。我们需要防止解码器中向左流动的信息,以保持自回归属性。我们通过屏蔽(设置为-∞)softmax输入中与非法连接相对应的所有值,从而在点积乘积内实现了这一目标。参见图2。

3.3位置前馈网络

除了关注子层之外,我们的编码器和解码器中的每个层还包含一个完全连接的前馈网络,该网络分别单独应用于相同位置。这由两个线性变换组成,两个线性变换之间具有ReLU激活。

虽然线性变换在不同位置上相同,但是它们使用不同的参数。描述它的另一种方式是将两个卷积核尺寸为1。输入和输出的维数为= 512,而内层的维数为dff = 2048。

3.4嵌入和Softmax

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

3.5位置编码

由于我们的模型不包含重复性和卷积,因此为了使模型能够利用序列的顺序,我们必须注入一些有关令牌在序列中的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加"位置编码"。位置编码的维数与嵌入的维数相同,因此可以将两者相加。位置编码有很多选择,可以学习和固定[8]。在这项工作中,我们使用不同频率的正弦和余弦函数:

pos是位置,i是尺寸。即,位置编码的每个维度对应于正弦曲线。波长形成从2π到10000·2π的几何级数。我们选择此函数是因为我们假设它会允许模型轻松学习相对位置的参与,因为对于任何固定的偏移量k,可以表示为的线性函数。

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

4.为什么是自我关注

在本节中,我们将自我注意层的各个方面与通常用于将一个可变长度的符号表示序列(x1,...,xn)映射到另一个长度相等的序列(z1,... ,zn)的循环层和卷积层进行比较。当xi,zi∈Rd,例如典型序列转导编码器或解码器中的隐藏层。为了激发我们的自我注意力,我们考虑了三个愿望。一种是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最少顺序操作数衡量。第三个是网络中远程依赖关系之间的路径长度。在许多序列转导任务中,学习远程依赖性是一项关键挑战。影响学习这种依赖性的能力的一个关键因素是网络中前向和后向信号必须经过的路径长度。输入和输出序列中位置的任何组合之间的这些路径越短,就越容易学习远程依赖性[11]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。如表1所示,自我注意层将所有位置以恒定数量的顺序执行的操作连接起来,而循环层需要O(n)个顺序的操作。在计算复杂度方面,当序列长度n小于表示维数d时,自注意力层比循环层要快,这是机器翻译中最新模型所使用的句子表示的最常见情况,例如词段[31]和字节对[25]表示形式。为了提高涉及非常长序列的任务的计算性能,可以将自我注意限制为仅考虑大小为r的邻域。

输入序列以相应的输出位置为中心。这会将最大路径长度增加到O(n / r)。我们计划在以后的工作中进一步研究这种方法。内核宽度k

5.训练

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

5.1训练数据和批处理

我们对标准的WMT2014英语-德语数据集进行了培训,该数据集包含约450万个句子对。句子是使用字节对编码[3]编码的,字节对编码[3]具有约37000个令牌的共享源目标词汇。对于英语-法语,我们使用了明显更大的WMT2014英语-法语数据集,该数据集由3,600万个句子组成,并将标记拆分为32000个词条词汇[31]。句子对以大约相等的长度缩短。每个训练批次包含一组句子对,其中包含大约25000个源标记和25000个目标标记。

5.2硬件和时间表

我们在一台配备8个NVIDIA P100 GPU的计算机上训练了模型。对于使用本文所述的超参数的基本模型,每个训练步骤大约需要0.4秒。我们对基本模型进行了总共100,000步或12个小时的训练。对于我们的大型模型(如表3的底行所述),步长为1.0秒。大型模型接受了300,000步(3.5天)的培训。

5.3优化器

我们使用亚当优化器[17],其中β1=0.9,β2=0.98和=10-9。根据以下公式,我们在培训过程中改变了学习率:

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

5.4正则化

我们在培训期间采用三种类型的正则化:

剩余失活

在将其添加到子层输入并进行归一化之前,我们将子集[27]应用于每个子层的输出。 另外,我们对编码器和解码器堆栈中的嵌入和位置编码的总和应用丢包。 对于基本模型,我们使用Pdrop = 0.1的比率。

标签平滑 在训练过程中,我们采用值ls = 0.1 [30]的标签平滑。 随着模型变得更加不确定,这会减轻困惑,但会提高准确性和BLEU得分。

6. 结果

6.1机器翻译

在WMT 2014英语到德语的翻译任务中,大型变压器模型(表2中的变压器(大))比以前报告的最佳模型(包括合奏)高出2.0 BLEU,建立了新的状态。最先进的BLEU得分为28.4。表3的底部列出了该模型的配置。在8个P100 GPU上进行了3.5天的培训。甚至我们的基本模型都超过了以前发布的所有模型和集合,而其培训成本只是任何竞争模型的一小部分。

在WMT 2014英语到法语的翻译任务中,我们的大型模型的BLEU得分达到41.0,优于以前发布的所有单个模型,而培训费用不到以前最新技术的1/4模型。为英语到法语训练的Transformer(大型)模型使用的辍学率Pdrop = 0.1,而不是0.3。

对于基本模型,我们使用通过平均最近5个检查点(平均间隔为10分钟)获得的单个模型。对于大型模型,我们平均了最后20个检查点。我们使用波束大小为4且长度损失为α= 0.6的波束搜索[31]。这些超参数是在开发集上进行实验后选择的。我们在推断时将最大输出长度设置为输入长度+ 50,但在可能的情况下尽早终止[31]。

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

6.2模型变化

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

在表3的行(A)中,按3.2.2节中的说明,将注意头的数量以及注意键和值的维数保持不变。尽管单头注意比最佳设置差0.9个BLEU,但头太多时质量也会下降。

在表3中的行(B)中,我们观察到减小注意键大小dk会损害模型质量。 这表明确定兼容性并不容易,并且比点乘积更复杂的兼容性功能可能是有益的。 我们认为,要增加(C)和(D)的行数,可以发现更大的模型更好,而退出则对避免过度拟合很有帮助。Inrow(E)替换了具有学习到的位置嵌入的正弦位置编码[8],并观察到与基本模型几乎相同的结果。

7 总结

在这项工作中,我们介绍了完全基于注意力的第一个序列转导模型Transformer,用多头自注意力代替了编码器-解码器体系结构中最常用的循环层。

对于翻译任务,与基于循环层或卷积层的体系结构相比,可对Transformer进行的培训明显更快。在WMT 2014英语到德语和WMT 2014英语到法语翻译任务上,我们都达到了最新水平。在前一项任务中,我们最好的模型甚至胜过所有先前报告的合奏。

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

我们用于训练和评估模型的代码可从https://github.com/tensorflow/tensor2tensor获得。

致谢 我们感谢Nal Kalchbrenner和Stephan Gouws的富有成效的评论,更正和启发。