译(Transformer) NIPS-2017 ---Attention Is All You Need

Attention Is All Y ou Need

文章链接:https://arxiv.org/abs/1706.03762
摘要
  包括编码器和解码器的主要序列转换(sequence transduction)模型是基于复杂的循环或卷积神经网络的。性能最好的模型还通过注意机制(attention
mechanism)连接编码器和解码器。我们提出了一种新的简单网络架构—Transformer,它完全基于(based solely on)注意力机制,且完全摒弃了循环和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优,同时具有更强的并行性(parallelizable),需要的训练时间显著减少。我们的模型在WMT 2014英德翻译任务中获得28.4个BLEU,比现有的最佳结果(包括全体)提高了2个BLEU。在WMT 2014英法翻译任务中,我们的模型在8个gpu上经过3.5天的训练后,建立了一个新的单一模型,达到最高水平的(state-of-the-art)BLEU得分为41.0,这只是文献中最好的模型训练成本的一小部分。

1 介绍(Introduction)
  循环神经网络,尤其是长短期记忆[12]和门控循环[7]神经网络,已经作为序列建模和转换问题(如语言建模和机器翻译[29,2,5])的最先进方法。
  循环模型通常根据输入和输出序列的符号位置进行计算。将位置与计算时间中的步骤对齐,它们生成一个隐藏状态序列ht,作为前一个隐藏状态ht-1和位置t的输入的函数。这种内在的顺序性质阻碍了训练示例中的并行化,因为内存约束限制了示例之间的批处理,这在序列长度较长时变得至关重要。最近的工作通过分解技巧(factorization tricks)[18]和条件计算(conditional computation)[26]在计算效率方面取得了显著的改进,同时也提高了后者的模型性能。然而,顺序计算的基本约束(fundamental constraint)仍然存在。
  注意力机制已经成为各种任务中引人注目的序列模型和转换模型中不可或缺的一部分,允许在不考虑输入或输出序列中的距离的依赖关系进行建模[2,16]。然而,在除了少数情况以外的所有情况下,这种注意机制都与循环网络结合使用。
  在本工作中,我们提出了Transformer,它是一种模型架构,避免了循环,而是完全依赖于注意力机制来绘制输入和输出之间的全局依赖关系。Transformer支持更多的并行化,在8个P100 GPU上经过12个小时的训练后,可以在翻译质量上达到一个新的水平。
2 背景(Background)
  减少顺序计算的目标也构成了扩展神经GPU[20]、ByteNet[15]和ConvS2S[8]的基础,所有这些都使用卷积神经网络作为基本构件,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将两个任意输入或输出位置的信号关联起来所需的操作数量会随着位置之间的距离而增加,对ConvS2S来说是线性增长,对ByteNet来说是对数增长。这使得学习遥远位置之间的依赖关系变得更加困难。在Transformer中,这被缩减为一个常数量的操作,尽管由于平均了加权的注意力位置而付出降低了有效分辨率的代价,但我们用3.2节中描述的多头注意力抵消了这一影响。
  自注意力(Self-attention),有时也被称为内部注意力(intra-attention),是一种为了计算序列表示而将单个序列的不同位置关联起来的注意力机制。自注意力已经被成功应用于多种任务中,例如在阅读理解、抽象摘要、文本蕴涵和学习句子独立表征等。
  基于循环注意力机制,而不是序列对齐循环(sequence-aligned recurrence)的端到端记忆网络(End-to-end memory networks),已被证明在简单语言问答和语言建模任务中表现良好。
  然而据我们所知,Transformer是第一个完全依赖于自我注意而不使用序列对齐的rnn或卷积来计算其输入和输出表示的转换模型。在下一节中,我们将描述Transformer、激发自注意力(motivate self-attention ),并讨论其相对于[14,15]和[8]等模型的优势。
3 模型结构(Model Architecture)
  最具竞争力的神经序列转换模型都有一个编码器-解码器结构[5,2,29]。在这里,编码器映射一个符号表示的输入序列(x1,…, xn)到一个连续表示序列z =(z1,…、zn)。给定z后,解码器生成一个输出序列(y1,…ym),每次生成一个元素。在每个步骤中模型都是自回归的[9],当生成下一个步骤时,使用前面生成的符号作为额外的输入。
  Transformer 遵循这种总体架构,使用堆叠式自注意和点式全连接层,用于编码器和解码器,如图1的左右两部分所示。
在这里插入图片描述

3.1 编码器和解码器堆栈
编码器: 编码器由N = 6个相同层的堆栈组成。每个层有两个子层。第一个子层是多头自注意机制(multi-head self-attention mechanism),第二个子层是简单的位置式自注意机构,第一种是多头自注意机构,第二种是简单的位置式全连接前馈网络。我们在两个子层中的每一层周围使用一个残差连接[10] ,然后进行层归一化[1]。也就是说,每个子层的输出是 LayerNorm (x + Sublayer (x)) ,其中 Sublayer (x)是由子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都产生维数 dmodel = 512的输出。
解码器: 解码器也是由N = 6个相同层的堆栈组成的。另外出了编码器中的两个子层外,解码器还插入了第三个子层,它对编码器堆栈的输出执行多头注意力。类似于编码器,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意力子层,以防止位置对后续位置的影响。这就是遮挡 (masking),其结合输出嵌入偏移一个位置的事实,确保对位置 i 的预测只能依赖于位置小于 i 的已知输出。

3.2 注意力
  注意力函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值(query, keys, values)和输出都是向量。输出是作为值(keys)的加权和计算的,其中分配给每个values的权重是通过query与相应keys的兼容性函数计算的。
3.2.1 Scaled Dot-Product Attention(缩放点积注意力)
  我们称我们的特别注意为“缩放的点积注意”(图2)。输入由维度dk的查询、键和维度dv的值组成。我们计算查询与所有键的点积,每个键除以√dk,并应用softmax函数来获得值的权重。
在这里插入图片描述
图2:(左)缩放点积注意力。(右)多头注意由几个并行运行的注意层组成。

  在实践中,我们同时计算一组查询的注意函数,这些查询打包成一个矩阵q。键和值也打包成矩阵K和V。我们计算输出的矩阵为:
在这里插入图片描述
  最常用的两个注意函数是additive attention [2]和dot-product (multi-
plicative) attention(点积(乘法)注意)。点积注意与我们的算法相同,除了比例因子为1/√dk。additive attention使用带有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似,但点积注意力在实践中要快得多,而且空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。
  当dk值较小时,两种机制表现相似,当dk[3]值较大时,不需缩放的additive attention优于点积注意。我们猜想当dk值较大时,点积的幅度会变大,从而使softmax函数进入其梯度极小的区域。为了抵消这种影响,我们将点积乘以1√dk。
3.2.2 多头注意力
  我们发现,将查询、键和值分别用不同的、学习过的线性投影h次地线性投影到dk、dk和dv维上,比用模型维键、值和查询执行单一的注意函数更为有效。然后,在查询、键和值的每一个投影版本上,我们并行执行注意力函数,产生dv维的输出值。这些被连接起来并再次投影,最终得到图2所示的值。
  多头注意力允许模型联合注意来自不同位置的不同表示子空间的信息。用一个单一的注意力头,平均抑制这一点。

  上图中投影是参数矩阵W……
  在这项工作中,我们采用了h = 8个平行注意层或头。对于每一个,我们使用dk = dv = dmodel/h = 64。由于每个头的维度减小了,总的计算成本与全维度的单头注意相似。
3.2.3注意力在模型中的应用
Transformer以三种不同的方式使用多头注意力:
  1.在“编码器-解码器注意”层中,查询来自先前的解码器层,而记忆键和值来自编码器的输出。这使得解码器中的每个位置都能处理输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,如[31,2,8]。
  编码器包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在本例中,即编码器中前一层的输出。所述编码器中的每个位置可以处理所述编码器的前一层中的所有位置。
  类似地,解码器中的自注意层允许解码器中的每个位置处理解码器中直到并包括该位置的所有位置。我们需要防止信息在解码器中向左流动,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中与非法连接对应的所有值来实现缩放点乘注意。参见图2。
3.3 Position-wise前馈网络
  除了注意子层外,我们的编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别和相同地应用于每个位置。这包括两个线性转换,中间有一个ReLU激活。
在这里插入图片描述
  虽然在不同的位置上线性转换是相同的,但它们在不同的层中使用不同的参数。另一种描述它的方法是两个卷积,内核大小为1。输入输出维数为dmodel = 512,内层维数为df f = 2048。
3.4 Embeddings and Softmax
  与其他序列转换模型类似,我们使用学习过的embeddings将输入标记和输出标记转换为维数dmodel的向量。我们还使用通常学到的线性变换和softmax函数将解码器输出转换为预测的下一个单词的概率。在我们的模型中,我们共享两个embedding层之间的权值矩阵和pre-softmax线性变换,类似于[24]。在嵌入层中,我们将这些权重乘以√dmodel
3.5 位置编码(Positional Encoding)
  由于我们的模型不包含递归和卷积,为了让模型利用序列的顺序,我们必须注入一些关于序列中记号的相对或绝对位置的信息。为此,我们将“位置编码”添加到编码器和解码器堆栈的底部。位置编码与嵌入具有相同的维数模型,因此可以将两者相加。有许多位置编码的选择,学习和固定的[8]。
  在这项工作中,我们使用不同频率的正弦和余弦函数:
在这里插入图片描述
  其中pos是位置,i是维数。也就是说,位置编码的每个维度都对应一个正弦信号。波长从2π到10000·2π呈几何级数。我们选择这个函数是因为我们假设它可以让模型很容易学会使用相对位置,因为对于任何固定偏移量k, PEpos+k可以表示为PEpos的线性函数。
  我们还使用学习过的位置嵌入[8]进行了实验,发现两个版本产生了几乎相同的结果(见表3行(E))。我们选择正弦版本是因为它可以让模型外推到比训练中遇到的序列更长的序列长度。

表1:不同层类型的最大路径长度、每层复杂度和最小顺序操作数。N为序列长度,d为表示维数,k为卷积的核大小,r为受限自注意的邻域大小。
在这里插入图片描述
表2:在2014年英语-德语和英语-法语的最新测试中,Transformer比以前的最先进的模型取得了更好的BLEU分数,而培训成本仅为一小部分。
在这里插入图片描述
表3:Transformer架构的V变体。未列出的值与基本模型的值相同。所有指标都在英德翻译开发集,newstest2013。根据我们的字节对编码,列出的困惑是逐词的,不应该与逐词困惑进行比较。
在这里插入图片描述
4 为什么是自注意力
  在本节中,我们比较了自我注意层和卷积层的各个方面,后者通常用于将一个可变长度的符号表示序列(x1,… ,xn)映射到另一个等长序列(z1,… ,zn)。激励我们使用自我注意力,我们考虑三个需求。
  一个是每一层的总计算复杂度。另一个是可以并行化的计算量,由所需的最小顺序操作数来衡量。
  第三个是网络中远程依赖关系之间的路径长度。在许多序列转换任务中,学习长期依赖是一个关键的挑战。影响学习这种依赖关系的能力的一个关键因素是信号在网络中必须穿越的前向和后向路径的长度。输入和输出序列中任意位置组合之间的路径越短,学习远程依赖关系[11]就越容易。因此,我们也比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
  如表1所示,自注意层用固定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。在计算复杂性方面,self-attention层速度比周期性层当序列长度n小于表示维数d,这是最常使用的情况下与句子表示最先进的机器翻译模型,如word-piece[31]和byte-pair[25]表示。为了提高涉及非常长的序列的任务的计算性能,可以将自我注意限制在只考虑大小为r的邻域以各自的输出位置为中心的输入序列。这将增加最大路径长度到O(n/r)。我们计划在未来的工作中进一步研究这种方法。
  核宽度为k < n的单个卷积层并不连接所有的输入和输出位置对。在相邻核的情况下,这样做需要O(n/k)卷积层的堆栈,或者O(logk(n))在扩张卷积[15]的情况下,增加网络中任意两个位置之间的最长路径的长度。卷积层通常比循环层昂贵k倍。然而,可分离卷积[6]大大降低了复杂度,达到O(k·n·d + n·d2)。然而,即使在k = n的情况下,可分离卷积的复杂性也等于自注意层和点前馈层的结合,这是我们在模型中采用的方法。
  作为附带优点,自我关注可以产生更多可解释的模型。我们检查了我们模型中的注意力分布,并在附录中展示和讨论了一些例子。不仅个别注意头清楚地学会了执行不同的任务,许多注意头似乎表现出与句子的句法和语义结构有关的行为。
5 训练
  本节描述了我们模型的训练制度。
5.1训练制度和批处理
  我们使用由450万对句子组成的WMT 2014英德标准数据集进行训练。使用[3]编码的字节对对句子进行编码,该编码具有大约37000个标记的共享源目标词汇表。对于英法两种语言,我们使用更大的WMT 2014英法数据集,其中包含3600万个句子,并将令牌分解为32000个单词块词汇[31]。句子对按照近似的序列长度进行分组。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记。
5.2 硬件和进度
  我们在一台装有8个NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤(each training step)大约需要0.4秒。我们对基本模型进行了总共10万步或12小时的训练。对于我们的大型模型(如表3所示),步长为1.0秒。这些大型模型被训练了30万步(3.5天)。
5.3 优化器(Optimizer)
  我们使用Adam优化器[17],β1 = 0.9, β2 = 0.98和ϵ= 10−9。根据公式,我们在训练过程中改变学习速率:
在这里插入图片描述
  这对应于第一个warmup_steps训练步骤的学习速率线性增加,然后与步骤数的平方根倒数成比例减少。我们使用warmup_steps = 4000。
5.4 正则化Regularization
在训练过程中,我们采用了三种正则化方法:
Residual Dropout 我们对每个子层的输出应用dropout[27],然后将其添加到子层输入并进行规范化。此外,我们在编码器和解码器堆栈中对嵌入和位置编码的和应用了dropout。对于基础模型,我们使用Pdrop = 0.1的速率。
Label Smoothing 在训练过程中,我们使用标签平滑值ϵls = 0.1[30]。
6 结果
6.1 机器翻译
  在WMT 2014英语到德语的翻译任务中,大变压器模型(表2中的transformer (big))比之前报道的最好的模型(包括合集)高出2.0 BLEU以上,建立了新的最先进的BLEU评分28.4。该模型的配置列于表3的底部。对8个P100 gpu的培训花了3.5天。甚至我们的基础模型超过了所有以前发表的模型和集合,而训练成本只是任何竞争模型的一小部分。
  在WMT 2014英法翻译任务中,我们的大模型获得了41.0的BLEU分数,超过了之前发布的所有单个模型,而训练成本不到之前最先进的模型的1/4。Transformer(大)模型的英语-法语训练的辍学率Pdrop = 0.1,而不是0.3。
  对于基本模型,我们使用了通过平均最后5个检查点获得的单个模型,这些检查点每10分钟编写一次。对于大型模型,我们计算了最后20个检查点的平均值。我们采用波束尺寸为4,长度惩罚α = 0.6[31]的波束搜索。这些超参数是在开发台上经过实验后选定的。在推理期间,我们将最大输出长度设置为输入长度+ 50,但在可能的情况下提前终止[31]。
  表2总结了我们的结果,并将我们的翻译质量和培训成本与文献中的其他模型架构进行了比较。我们通过将训练时间、所使用的GPU数量和每个GPU 的持续单精度浮点容量相乘,来估计用于训练一个模型的浮点运算的数量。
6.2模型的变化
  为了评估Transformer不同组件的重要性,我们以不同的方式改变了我们的基本模型,并在开发集(newstest2013)上测量了英语到德语翻译的性能变化。我们使用了前一节所描述的波束搜索,但没有使用检查点平均。我们在表3中展示了这些结果。
  在表3行(A)中,我们改变注意头的数量以及注意键和值维度,保持计算量不变,如章节3.2.2所述。虽然单头注意力比最好的设置差0.9蓝色,但过多的头也会降低质量。
  在表3行(B)中,我们观察到降低注意键大小dk会影响模型质量。这表明确定兼容性并不容易,一个比点积更复杂的兼容性函数可能是有益的。我们在©和(D)行进一步观察到,正如预期的那样,更大的模型更好,并且dropout在避免过度拟合方面非常有帮助。在行(E)中,我们将正弦位置编码替换为学习过的位置嵌入[8],并观察到与基模型几乎相同的结果。
7 结论
  在本工作中,我们提出了Transformer,这是第一个完全基于注意力的序列转换模型,用多头自注意替换了编码器-解码器架构中最常用的循环层。
  对于翻译任务,Transformer的训练速度比基于循环或卷积层的体系结构快得多。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们都达到了一个新的水平。在前一个任务中,我们的最佳模型甚至优于所有之前报告的集合。
  我们对基于注意力的模型的未来感到兴奋,并计划将其应用到其他任务中。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。减少世代顺序是我们的另一个研究目标。
  我们用来训练和评估模型的代码可以在https://github.com/tensorflow/tensor2张量中找到。
参考文献
[17] Diederik Kingma and Jimmy Ba. Adam: A method for stochastic optimization. In ICLR, 2015.
[27] Nitish Srivastava, Geoffrey E Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research, 15(1):1929–1958, 2014.
[30] Christian Szegedy, Vincent V anhoucke, Sergey Ioffe, Jonathon Shlens, and Zbigniew Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值