Attention is all your need(原文翻译)
注意力是你所需要的
摘要:占优势的序列转换模型基于复杂的循环或卷积神经网络,其中包括一个编码器和一个解码器。表现最好的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单的网络架构,即Transformer,它完全基于注意力机制,完全摒弃了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时具有更强的并行性,需要的训练时间明显更少。我们的模型在WMT 2014英语-德语翻译任务上实现了28.4个BLEU,比现有的最佳结果(包括集成)提高了超过2个BLEU。在WMT 2014英法翻译任务中,我们的模型在8个GPU上进行了3.5天训练后,建立了一个新的单模型最先进的BLEU分数为41.8,这是文献中最好模型的训练成本的一小部分。通过成功地将Transformer应用于大量和有限的训练数据的英语选区解析,我们证明了它可以很好地推广到其他任务。
1、引言
循环神经网络,特别是长短期记忆[13]和门控循环[7]神经网络,已经被确定为序列建模的最先进的方法语言建模和机器翻译等转导问题[35,2,5]。从那以后,大量的努力继续推动循环语言模型和编码器-解码器架构的边界[38,24,15]。
循环模型通常沿着输入和输出序列的符号位置进行计算。在计算时间中,将位置与步长对齐,它们生成一个隐藏状态序列,作为前一个隐藏状态和位置t输入的函数。这种固有的序列性质妨碍了训练示例中的并行化,这在序列长度较长的情况下变得至关重要。由于内存约束限制了跨示例的批处理。通过因式分解技巧[21]和条件计算[32],最近的工作在计算效率方面取得了显著的改进,同时也改善了后者的模型性能。然而,顺序计算的基本约束仍然存在。
注意机制已经成为各种任务中引人注目的序列建模和转换模型的组成部分,允许建模依赖关系,而不考虑它们在输入或输出序列中的距离[2,19]。然而,在所有[27]案例中,这种注意机制与循环网络一起使用。
在这项工作中,我们提出了Transformer,这是一种避免递归的模型体系结构,而完全依赖于一种注意机制来提取输入和输出之间的全局依赖关系。Transformer允许更多的并行化,在8个P100GPU上训练12个小时后,可以达到翻译质量的新水平。
2、背景
减少顺序计算的目标也构成了扩展神经GPU[16]、ByteNet[18]和ConvS2S[9]的基础,它们都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将来自两个任意输入或输出位置的信号关联起来所需的操作数随着位置之间的距离而增加,对于ConvS2S是线性的,而对于ByteNet则是对数的。这使得学习远距离位置[12]之间的依赖关系变得更加困难。在Transformer中,这被减少为固定的操作次数,尽管这是以平均注意力加权位置降低有效分辨率为代价的,我们用3.2节中描述的多头注意力抵消了这种影响。
自我注意,有时也被称为内注意,是一种注意机制,将单个序列的不同位置联系起来,以计算该序列的表示。自我注意已经成功地应用于各种任务,包括阅读理解、摘要总结、文本蕴涵和学习任务无关的句子表征[4,27,28,22]。端到端记忆网络基于循环注意机制,而不是序列对齐的循环注意机制,在简单语言问答和语言建模任务[34]中表现良好。
然而,据我们所知,Transformer是第一个完全依赖自注意来计算其输入和输出表示,而不使用序列对齐的RNN或卷积的转换模型。在下面的章节中,我们将描述Transformer,激发自我关注,并讨论它相对于[17,18]和[9]等模型的优点。
3、模型结构
大多数竞争神经序列转导模型都有一个编码器-解码器结构[5,2,35]。这里,编码器映射一个符号表示的输入序列到连续表示序列。给定z,解码器然后生成一个输出序列的符号,一次一个元素。在每个步骤中,模型都是自回归的[10],在生成下一个步骤时将之前生成的符号作为额外的输入。Transformer遵循这种总体架构,为编码器和解码器使用堆叠的自注意和逐点式、完全连接的层,分别如图1的左半部分和右半部分所示。
图1:Transformer模型结构
3.1 编码器和解码器堆栈
编码器:编码器由N = 6个相同层组成。每一层都有两个子层。第一种是多头自注意机构,第二种是简单的、位置上全连接的前馈网络。我们在这两个子层的每一层使用一个剩余连接[11],然后进行层归一化[1]。也就是说,每个子层的输出是,其中是子层本身实现的函数。为了方便这些残留连接,模型中的所有子层以及嵌入层产生维度为的输出。
解码器:解码器也是由N = 6个相同层组成的堆栈。除每个编码器层中的两个子层外,解码器插入第三个子层,该子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意子层,以防止位置对后续位置的关注。这种掩蔽,结合输出嵌入被偏移一个位置的事实,确保了位置i的预测只能依赖于小于i位置的已知输出。
3.2 注意力
注意函数可以描述为将查询和一组键-值对映射到输出,其中查询、键、值和输出都是向量。输出是作为值的加权和计算的,其中分配给每个值的权重是通过具有相应键的查询的兼容性函数计算的。
图2:(左)缩放的点积注意力。(右)多头注意力由并行运行的几个注意层组成。
3.2.1按比例缩小的点积的注意力
我们将我们的特别注意称为“缩放的点-产品注意”(图2)。输入由维度的查询和键和维度的值组成。我们计算查询中所有键的点积,每一个都除以,然后应用一个softmax函数获得这些值的权值。
在实践中,我们同时在一组查询上计算注意力函数,并将其打包成矩阵q。键和值也打包成矩阵K和V。我们将输出矩阵计算为:
最常用的两个注意函数是附加注意[2]和点积(乘法)注意。点积注意事项与我们的算法相同,只是比例因子为。附加注意使用具有单一隐含层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似,但点积注意在实践中要快得多,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。
当值较小时,两种机制的表现相似,在未对值进行扩展的情况下,加性注意的表现优于点积注意。我们怀疑的值很大时,点积的幅度会变大,将softmax函数推入梯度极小的区域4。为了抵消这个影响,我们将点积乘以。
3.2.2 多头注意力
我们发现,与其使用维的键、值和查询执行单一的注意力函数,不如将查询、键和值用不同的、学习过的线性投影分别投影到、和维上h次。然后,我们在每个查询、键和值的投影版本上并行执行注意力函数,产生维的输出值。这些被连接并再次投影,最终的值,如图2所示,多头注意允许模型共同关注来自不同位置的不同表示子空间的信息。如果只关注一个注意头,平均就会抑制这一点。
其中投影为参数矩阵。
在这项工作中,我们使用了h = 8个平行的注意层,即头部。对于每一个,我们使用。由于每个头部的尺寸减小,总的计算代价与全维单头注意力相似。
3.2.3在我们模型中注意力的应用
Transformer用了三种不同的方法使用多头注意力:
在“编码器-解码器注意”层中,查询来自前一个解码器层,内存键和值来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模拟了诸如[38,2,9]等序列到序列模型中典型的编码器-解码器注意机制。
编码器包含自我关注层。在自关注层中,所有键、值和查询都来自相同的位置,在本例中,即编码器中前一层的输出。编码器中的每个位置都可以处理编码器上一层中的所有位置。
类似地,解码器中的自注意层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。为了保持解码器的自回归特性,我们需要防止解码器中的信息流向左流动。我们通过屏蔽(设置为−∞)softmax输入中与非法连接对应的所有值来实现这种缩放点积注意。参见图2。
3.3位置乘积前馈网络
除了注意子层之外,我们的编码器和解码器中的每一层都包含一个完全连接的前馈网络,它分别且相同地应用于每个位置。这包括两个线性转换,其间有一个ReLU激活。
虽然线性变换在不同的位置是相同的,但它们使用不同的参数从一层到另一层。另一种描述它的方法是两个卷积的核大小为1。输入输出维度为dmodel= 512,内层维度dff= 2048。
3.4嵌入和softmax
与其他序列转换模型类似,我们使用学习的嵌入将输入标记和输出标记转换为维度为dmodel的向量。我们还使用通常学习的线性变换和softmax函数来将解码器输出转换为预测的下一个令币概率。在我们的模型中,我们在两个嵌入层和pre-softmax线性变换之间共享相同的权重矩阵,类似于[30]。在嵌入层中,我们将这些权值乘以。
3.5位置编码
因为我们的模型包含没有复发和卷积,为了使模型利用序列的顺序,我们必须注入一些信息的相对或绝对位置5序列中的标记。为此,我们将“位置编码”添加到编码器和解码器堆栈底部的输入嵌入中。位置编码与嵌入具有相同的维度d模型,因此可以将两者相加。有许多位置编码可供选择,包括学习的和固定的[9]。
表1:最大路径长度,每层复杂性和最小数量的不同的层类型的顺序操作。N为序列长度,d为表示维数,k为卷积的核大小,r为受限自注意的邻域大小。
在本工作中,我们使用了不同频率的正弦和余弦函数:
pos是位置,i是维数。也就是说,位置编码的每个维度对应于一个正弦信号。波长从2π到10000·2π呈几何级数。我们选择这个函数是因为我们假设它可以让模型很容易地了解相对位置,因为对于任何固定偏移量k, PEpos+k可以表示为PEpos的线性函数。
我们还尝试使用学习到的位置嵌入[9]代替,发现两个版本产生了几乎相同的结果(见表3行(E))。我们选择正弦版本,因为它可能允许模型外推到比在训练中遇到的序列长度更长。
4. 为什么要自注意
在本节中,我们将自注意层的各个方面与循环层和卷积层进行比较,这些层通常用于映射一个可变长度的符号表示序列(x1,…, xn)到另一个等长序列(z1,…, zn),具有xi, zi∈Rd,如典型序列转换编码器或解码器中的隐藏层。在激励我们使用自我注意时,我们考虑了三个需要。
一个是每层的总计算复杂度。另一个是可以并行化的计算量,由所需的最小顺序操作数来衡量。三是网络中长距离依赖之间的路径长度。学习长期依赖是许多序列转导任务的关键挑战。影响学习这种依赖关系能力的一个关键因素是网络中前进和后退信号必须经过的路径长度。输入和输出序列中任意位置组合之间的这些路径越短,就越容易学习长期依赖[12]。因此,我们也比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
如表1所示,自注意层用固定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。在计算复杂性方面,self-attention层速度比周期性层当序列长度n小于表示维数d,这是最常使用的情况下与句子表示最先进的机器翻译模型,如word-piece[38]和byte-pair[31]表示。为了提高涉及很长的序列的任务的计算性能,可以将自注意限制为仅考虑以各自输出位置为中心的输入序列的大小为r的邻域6。这将使最大路径长度增加到O(n/r)。我们计划在今后的工作中进一步研究这种方法。
单个卷积层的核宽度为k < n,不连接所有的输入和输出位置对。如果是连续的核,则需要O(n/k)个卷积层,如果是扩张的卷积[18],则需要O(logk(n))个卷积层,增加网络中任意两个位置之间的最长路径的长度。卷积层通常比递归层的代价高k倍。然而,可分离卷积[6]大大降低了复杂度,达到O(k·n·d + n·d2)。然而,即使k = n,可分离卷积的复杂性等于自注意层和点前馈层的结合,这是我们在模型中采用的方法。
作为附带好处,自我关注可以产生更多可解释的模型。我们从我们的模型中考察注意力分布,并在附录中给出并讨论例子。单个注意头不仅清楚地学会了执行不同的任务,而且许多注意头似乎表现出了与句子的句法和语义结构相关的行为。
5. 训练
该部分讲述了我们模型的训练机制。
5.1训练数据和批处理
我们用标准的WMT 2014英德语数据集进行训练,该数据集由大约450万个句子对组成。句子使用编码为[3]的字节对进行编码,[3]拥有约37000个令符的共享源目标词汇表。对于英语-法语,我们使用了更大的WMT 2014英语-法语数据集,该数据集由36M个句子组成,并将标记拆分为32000个单字词汇[38]。句子对以近似的序列长度组合在一起。每个训练批次包含一组包含大约25000个源令牌和25000个目标令牌的句子对。
5.2硬件和进度
我们在一台拥有8个NVIDIA P100 gpu的机器上训练我们的模型。对于使用本文中描述的超参数的基本模型,每个训练步骤大约花费0.4秒。我们总共训练了10万步,也就是12个小时。对于我们的大型模型(如表3所示),步长为1.0秒。大型模型训练了30万步(3.5天)。
5.3优化器
我们使用Adam优化器[20],。我们在训练过程中根据公式改变学习率:
这对应于对第一个warmup_steps训练步骤线性增加学习率,然后按步数平方根的反比比例减少学习率。我们使用warmup_steps = 4000。
5.4正规化
我们在训练中采用了三种类型的正规化:
残差丢弃法 我们将dropout[33]应用于每个子层的输出,然后再将其添加到子层的输入和规范化。此外,我们还对编码器和解码器堆栈中的嵌入和位置编码应用dropout。对于基本模型,我们使用Pdrop= 0.1的比率。
表2:在英语-德语和英语-法语的2014年最新测试中,Transformer取得了比之前最先进的模型更好的BLEU分数,而培训成本仅为培训成本的一小部分。
标签平滑 在训练过程中,我们采用了[36]的标签平滑。这导致了困惑,因为模型学习更不确定,但提高了准确性和BLEU分数。
6. 结果
6.1 机器翻译
在WMT 2014英语-德语翻译任务中,大变压器模型(表2中的transformer (big))比之前报道的最好的模型(包括集成模型)表现超过2.0个BLEU,建立了一个新的最先进的BLEU分数28.4。这个模型的配置列在表3的最底层。在8个P100图形处理器上训练花了3.5天。甚至我们的基础模型也超过了以前发布的所有模型和集成,而培训成本仅为任何竞争模型的一小部分。
在WMT 2014英法翻译任务中,我们的大模型获得了41.0的BLEU分数,优于之前发表的所有单个模型,而训练成本不到之前最先进模型的1/4。训练成英语到法语的Transformer(大)模型使用的辍学率Pdrop= 0.1,而不是0.3。
对于基本模型,我们使用一个单一的模型,该模型是通过平均最后5个检查点获得的,每10分钟写入一次。对于大型模型,我们计算了最后20个检查点的平均值。我们使用光束搜索,光束大小为4,长度惩罚α = 0.6[38]。这些超参数是在开发装置上进行实验后选择的。我们在推断期间将最大输出长度设置为输入长度+ 50,但在可能的情况下提前终止[38]。
表2总结了我们的结果,并将我们的翻译质量和培训成本与文献中其他模型架构进行了比较。我们通过将训练时间、使用的gpu数量和每个GPU5的持续单精度浮点容量相乘来估计用于训练模型的浮点操作数。
6.2模型变种
为了评估Transformer的不同组件的重要性,我们以不同的方式改变了我们的基本模型,在开发集的英-德翻译中测量性能的变化,newstest2013。我们使用了前一节中描述的波束搜索,但是没有使用检查点平均。我们将这些结果显示在表3中。
在表3行(A)中,我们改变了注意头的数量以及注意键和值的维度,保持计算量不变,如3.2.2节所述。虽然单头注意力是0.9 BLEU比最好的设置,质量也下降了太多的头。
表3:Transformer体系结构的V变体。未列出的值与基本模型的值相同。所有指标都是在英语到德语翻译开发集,最新的2013年。根据我们的字节对编码,所列的困惑是每个字的,不应该与每个字的困惑进行比较。
表4:Transformer很好地概括了英语选区解析(结果见《华尔街日报》第23节)
在表3行(B)中,我们观察到减少注意键大小会损害模型质量。这表明确定兼容性并不容易,一个比点积更复杂的兼容性函数可能是有益的。我们在(C)和(D)行中进一步观察到,正如预期的那样,模型越大越好,dropout非常有助于避免过拟合。在(E)行中,我们用学习到的位置嵌入值[9]代替正弦位置编码,并观察到与基本模型几乎相同的结果。
6.2 英语选区解释
为了评估Transformer是否可以推广到其他任务,我们执行了关于英语单元解析的实验。这项任务提出了具体的挑战:产出受到强烈的结构性约束,而且产出时间明显长于投入时间。此外,RNN序列到序列模型还不能在小数据区域[37]中获得最先进的结果。
我们在宾夕法尼亚树银行[25]的华尔街日报(WSJ)部分训练了一个dmodel= 1024的4层变压器,大约40K个训练句子。我们也在半监督的设置下训练它,使用较大的高置信度和BerkleyParser语料库来自大约17M个句子[37]。我们在只有WSJ的设置中使用了16K词汇量,在半监督的设置中使用了32K词汇量。
我们在第22节开发集上只进行了少量的实验来选择dropout, attention和residual (section 5.4), learning rate和beam size,所有其他参数与英-德基础翻译模型保持不变。在推断期间,我们将最大输出长度增加为输入长度+ 300。我们在《华尔街日报》和半监督设置中使用了21和α = 0.3的光束尺寸。
我们在表4中的结果显示,尽管缺少特定任务的调优,我们的模型表现得出奇地好,产生了比之前报告的所有模型(除了循环神经网络语法[8])更好的结果。
与RNN序列到序列模型[37]相比,即使只在WSJ的40K句训练集上进行训练,Transformer的性能也优于BerkeleyParser[29]。
7 结论
在这项工作中,我们提出了Transformer,这是第一个完全基于注意力的序列转换模型,用多头自注意取代了在编码器-解码器体系结构中最常用的循环层。
对于翻译任务,Transformer的训练速度比基于循环层或卷积层的架构快得多。在WMT 2014英语到德语和WMT 2014英语到法语翻译任务中,我们达到了一个新的水平。在前一项任务中,我们的最佳模型甚至优于之前报告的所有集合。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的受限注意机制,以有效处理大量输入和输出,如图像、音频和视频。我们的另一个研究目标是减少世代的顺序。我们用来训练和评估模型的代码可以在https://github.com/ tensorflow/tensor2tensor上找到。