注意力是你所需要的
Ashish Vaswani ∗ Google Brain avaswani@google.com Noam Shazeer ∗ Google Brain noam@google.com Niki Parmar ∗ Google Research nikip@google.com Jakob Uszkoreit ∗ Google Research usz@google.com Llion Jones ∗ Google Research llion@google.com Aidan N. Gomez ∗ † University of Toronto aidan@cs.toronto.edu Łukasz Kaiser ∗ Google Brain lukaszkaiser@google.com Illia Polosukhin ∗ ‡ illia.polosukhin@gmail.com
摘要
1引言
递归神经网络,特别是长-短期记忆[13]和选通递归[7]神经网络,已被牢固地确立为序列建模和转换问题(如语言建模和机器翻译[35,2,5])中最先进的方法。此后,许多努力继续推动循环语言模型和编解码器架构的界限[38,24,15]。
递归模型通常沿着输入和输出序列的符号位置进行因子计算。将位置与计算时间的步长对齐,它们生成一系列隐藏状态ht,作为先前隐藏状态ht的函数− 1和位置t的输入。这种固有的顺序性质排除了训练示例中的并行化,这在较长的序列长度下变得至关重要,因为内存限制限制了跨示例的批处理。最近的工作通过因子分解技巧[21]和条件计算[32]显著提高了计算效率,同时也提高了后者的模型性能。然而,顺序计算的基本限制仍然存在。
注意力机制已经成为各种任务中强制序列建模和转导模型的一个组成部分,允许对依赖性进行建模,而不考虑它们在输入或输出序列中的距离[2,19]。然而,在除少数情况外的所有情况下【27】,这种注意力机制都与循环网络结合使用。
在这项工作中,我们提出了Transformer,这是一种避免重复出现的模型架构,而完全依赖于注意力机制来绘制输入和输出之间的全局依赖关系。
Transformer允许更大程度的并行化,并且在八个P100 GPU上训练12小时后,可以达到翻译质量的最新水平。
2背景
减少顺序计算的目的也形成了扩展神经GPU〔16〕、ByteNet〔18〕和VusS2S〔9〕的基础,所有这些都使用卷积神经网络作为基本构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将来自两个任意输入或输出位置的信号关联起来所需的操作数随着位置之间的距离而增加,对于convs2是线性的,对于ByteNet是对数的。这使得了解远距离位置之间的依赖关系变得更加困难[12]。在Transformer中,这被减少到一个恒定的操作数,尽管由于平均注意力加权位置而降低了有效分辨率,如第3.2节所述,我们用多头注意力抵消了这种影响。
自我注意力,有时称为内部注意力,是一种注意力机制,将单个序列的不同位置联系起来,以计算序列的表示。自我注意已成功应用于多种任务,包括阅读理解、抽象总结、文本蕴涵和学习任务无关的句子表征[4,27,28,22]。
端到端记忆网络基于循环的注意力机制,而不是顺序一致的循环,并且在简单的语言问答和语言建模任务中表现良好【34】。
然而,据我们所知,Transformer是第一个完全依靠自我注意来计算其输入和输出表示的转导模型,而不使用序列对齐的RNN或卷积。在以下章节中,我们将描述Transformer,激发自我关注,并讨论其相对于[17、18]和[9]等模型的优势。
3模型架构
大多数竞争性神经序列转导模型都有编码-解码结构[5,2,35]。
这里,编码器将符号表示的输入序列(x1,…,xn)映射到连续表示的序列z=(z1,…,zn)。给定z,解码器然后一次生成一个元素的符号输出序列(y1,…,ym)。在每一步中,模型都是自回归的[10],在生成下一步时,使用先前生成的符号作为额外输入。
Transformer遵循这一总体架构,为编码器和解码器使用堆叠的自我关注和逐点的完全连接层,分别如图1的左半部分和右半部分所示。
图1:Transformer模型架构。
3.1编码器和解码器堆栈
编码器:编码器由N=6个相同层组成。每层有两个子层。第一种是多头自我注意机制,第二种是简单的、位置上完全连接的前馈网络。我们在两个子层的每一层周围使用剩余连接[11],然后进行层规范化[1]。也就是说,每个子层的输出是LayerNorm(x+子层(x)),其中子层(x)是由子层本身实现的功能。为了方便这些剩余连接,模型中的所有子层以及嵌入层都会生成维度的输出。
解码器:解码器也由N=6个相同层组成。除了每个编码器层中的两个子层之外,解码器还插入第三个子层,该子层对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围使用剩余连接,然后进行层规范化。我们还修改了解码器堆栈中的自我注意子层,以防止位置涉及后续位置。这种掩蔽,再加上输出嵌入偏移一个位置的事实,确保位置i的预测只能依赖于位置小于i的已知输出。
3.2注意力
注意力函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出作为值的加权和计算,其中分配给每个值的权重由查询与相应键的兼容函数计算。
图2:(左)缩放点积注意力。(右)多头注意力由几个平行运行的注意力层组成。
3.2.1缩放点积注意力
我们将我们的特殊注意力称为“缩放点积注意力”(图2)。输入包括维度的查询和键,以及维度
的值。我们计算查询与所有键的点积,将每个键除以
,然后应用softmax函数获得值的权重。
在实践中,我们同时计算一组查询的注意力函数,并将其打包成矩阵Q。键和值也被压缩到矩阵K和V中。我们将输出矩阵计算为:两个最常用的注意力函数是加法注意力和点积(乘法)注意力。点积注意力与我们的算法相同,只是比例因子。加法注意力使用具有单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论复杂性上相似,但点积注意力在实践中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。
而对于较小的值,这两种机制的表现类似,对于较大的
值,加法注意力优于点积注意力[3]。我们怀疑,对于
的大值,点积的大小会增大,从而将softmax函数推到梯度非常小的区域4。为了抵消这种影响,我们通过
缩放点积。
3.2.2多头注意力
与使用d模型维度的键、值和查询执行单一的注意力功能不同,我们发现使用不同的学习线性投影将查询、键和值分别线性投影到d k、d k和d v维度是有益的。然后,在每个查询、键和值的投影版本上,我们并行执行注意力功能,生成d v维输出值。这些数据被连接起来,并再次投影,从而得到最终值,如图2所示。
多头注意力允许模型在不同位置联合关注来自不同表示子空间的信息。只有一个注意力头,平均值会抑制这一点
。
其中投影是参数矩阵
和。
在这项工作中,我们采用了h=8个平行的注意力层或头部。对于每一个,我们都使用
。由于每个头部的维数降低,总计算量与全维单头注意力的计算量相似。
3.2.3注意力在我们模型中的应用
Transformer以三种不同的方式使用多头注意力:。
-
•在“编码器-解码器-注意力”层中,查询来自前一个解码器层,内存键和值来自编码器的输出。这使得解码器中的每个位置都可以覆盖输入序列中的所有位置。这在序列到序列模型中模仿了典型的编码器-解码器-注意力机制,如[38,2,9]。
-
•编码器包含自我关注层。在自我关注层中,所有键、值和查询都来自同一个位置,在本例中,是编码器中前一层的输出。编码器中的每个位置都可以处理编码器前一层中的所有位置。
-
•类似地,解码器中的自我关注层允许解码器中的每个位置关注解码器中直到并包括该位置的所有位置。我们需要防止信息在解码器中向左流动,以保持自回归特性。我们通过屏蔽(设置为−∞ ) softmax输入中与非法连接对应的所有值。参见图2。
3.3位置前馈网络
除了注意力子层之外,编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别相同地应用于每个位置。这包括两个线性变换,中间有一个ReLU激活
。
虽然线性变换在不同的位置上是相同的,但它们在不同的层之间使用不同的参数。另一种描述方法是将其描述为内核大小为1的两个卷积。
输入和输出的维度是,内层是
。
3.4嵌入和Softmax
与其他序列转换模型类似,我们使用学习到的嵌入将输入标记和输出标记转换为维度d模型的向量。我们还使用通常学习的线性变换和softmax函数将解码器输出转换为预测的下一个令牌概率。在我们的模型中,我们在两个嵌入层和预softmax线性变换之间共享相同的权重矩阵,类似于[30]。在嵌入层中,我们将这些权重乘以。
3.5位置编码由于我们的模型不包含递归和卷积,为了使模型利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加“位置编码”。位置编码与嵌入具有相同的维度d模型,因此可以将两者相加。位置编码有很多选择,既有学习的,也有固定的[9]。
在这项工作中,我们使用不同频率的正弦和余弦函数:
,其中pos是位置,i是维度。也就是说,位置编码的每个维度对应于一个正弦波。波长形成从2π到10000·2π的几何级数。我们之所以选择这个函数,是因为我们假设它将允许模型通过相对位置轻松学习参与,因为对于任何固定偏移量k,可以表示为
的线性函数。
我们还尝试使用习得的位置嵌入[9],发现这两个版本产生了几乎相同的结果(见表3第(E)行)。我们选择正弦版本,因为它可能允许模型推断出比训练期间遇到的序列长度更长的序列长度。
表1:不同层类型的最大路径长度、每层复杂性和最小顺序操作数。n是序列长度,dis是表示维,k是卷积的核大小,r是受限自我注意中邻域的大小。
4.为什么要自我关注
在本节中,我们将自我注意层的各个方面与循环层和卷积层进行比较,循环层和卷积层通常用于将一个长度可变的符号表示序列映射到另一个长度相等的序列
,具有
,例如典型序列转换编码器或解码器中的隐藏层。激励我们使用自我关注,我们考虑三个愿望。
一个是每层的总计算复杂度。另一个是可以并行化的计算量,以所需的最小顺序操作数来衡量。
第三个是网络中长期依赖关系之间的路径长度。在许多序列转换任务中,学习长期依赖关系是一个关键挑战。影响学习这种依赖关系能力的一个关键因素是前向和后向信号在网络中必须穿过的路径长度。输入和输出序列中任何位置组合之间的路径越短,就越容易了解长期依赖关系[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
如表1所示,自我注意层通过恒定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。就计算复杂度而言,当序列长度n小于表示维度d时,自我注意层比重复层快,这在机器翻译中最先进的模型使用的句子表示中最常见,例如词条[38]和字节对[31]表示。为了提高涉及很长序列的任务的计算性能,自我关注可以限制为只考虑输入序列中以各自输出位置为中心的大小为r的邻域。这将增加最大路径长度。我们计划在未来的工作中进一步研究这种方法。
内核宽度k<n的单个卷积层不能连接所有的输入和输出位置对。如果是连续的内核,则需要一堆O(n/k)卷积层;如果是扩展卷积[18],则需要一堆,从而增加网络中任意两个位置之间最长路径的长度。卷积层通常比循环层更昂贵,是k的一个因素。然而,可分离卷积[6]大大降低了复杂性,
。然而,即使在k=n的情况下,可分离卷积的复杂性也等于我们在模型中采用的自我注意层和点态前馈层的组合。
作为副作用,自我关注可以产生更多可解释的模型。我们检查了模型中的注意力分布,并在附录中展示和讨论了示例。个人的注意力头不仅清楚地学会了执行不同的任务,而且许多人似乎表现出与句子的句法和语义结构相关的行为。
5训练
本节描述了我们模型的训练机制。
5.1训练数据和配料
我们在标准WMT 2014英语-德语数据集上进行了培训,该数据集由大约450万个句子对组成。句子使用字节对编码[3]进行编码,该编码拥有大约37000个标记的共享sourcetarget词汇表。对于英语-法语,我们使用了更大的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]用于
。我们根据以下公式在训练过程中改变学习率:
这对应于在第一个热身步骤训练步骤中线性增加学习率,然后根据步骤数的平方反比成比例减少学习率。我们用了4000步的热身。
5.4正规化
在训练期间,我们采用了三种类型的正则化:残余衰减我们将衰减应用于每个子层的输出,然后再将其添加到子层输入并进行归一化。此外,我们对编码器和解码器堆栈中的嵌入和位置编码的总和应用了dropout。对于基本模型,我们使用的速率为。
标签平滑在训练期间,我们采用了值ls=0的标签平滑。1 [ 36 ]. 这伤害了困惑,因为模型学会了更加不确定,但提高了准确性和BLEU分数。
表2:Transformer在2014年英语-德语和英语-法语新闻测试中取得了比之前最先进车型更好的BLEU分数,而训练成本仅为其一小部分。
6结果
6.1机器翻译
在WMT 2014年英语到德语的翻译任务中,大transformer模型(表2中的transformer(big))比之前报道的最佳模型(包括合奏)的性能好2倍以上。0 BLEU,建立了新的最先进的BLEU分数28。4.表3的底线列出了该型号的配置。训练进行了3次。在8个P100 GPU上工作5天。即使是我们的基础模型也超过了之前发布的所有模型和集合,而训练成本只是任何竞争模型的一小部分。
在WMT 2014英法翻译任务中,我们的大模型的BLEU分数为41。0,优于之前发布的所有单一模型,其训练成本不到之前最先进模型的1/4。为英语到法语培训的Transformer(big)模型使用的辍学率P下降=0。1,而不是0。3.
对于基本模型,我们使用了一个单一模型,该模型通过平均最后5个检查点获得,每10分钟写入一次。对于大型车型,我们平均了最后20个检查点。我们使用波束搜索,波束大小为4,长度惩罚α=0。6 [ 38 ]. 这些超参数是在开发集上进行实验后选择的。我们将推理期间的最大输出长度设置为输入长度+50,但尽可能提前终止[38]。
表2总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过乘以训练时间、使用的GPU数量和每个GPU 5的持续单精度飞行点容量,来估计用于训练模型的飞行点操作数量。
6.2模型变化
为了评估Transformer不同组件的重要性,我们以不同的方式改变了基础模型,在开发集newstest2013上测量了英语到德语翻译的性能变化。如前一节所述,我们使用了波束搜索,但没有检查点平均。我们在表3中给出了这些结果。
如第3.2.2节所述,在表3(A)行中,我们改变了注意力头的数量以及注意力键和值维度,保持计算量不变。虽然单头注意力比最佳设置差0.9 BLEU,但如果头太多,质量也会下降。
在表3行(B)中,我们观察到,减少注意力键大小d k会影响模型质量。这表明,确定兼容性并不容易,而且比dot product更复杂的兼容性功能可能是有益的。我们在第(C)行和第(D)行中进一步观察到,正如预期的那样,模型越大越好,退出非常有助于避免过度拟合。在第(E)行中,我们将正弦位置编码替换为学习的位置嵌入[9],并观察到与基本模型几乎相同的结果。
表3:Transformer结构的变化。未列出的值与基础模型的值相同。所有指标都在英语到德语翻译开发集newstest2013上。根据我们的字节对编码,列出的困惑是每个单词的,不应与每个单词的困惑进行比较。
表4:《Transformer》很好地概括了英语选区分析(结果见《华尔街日报》第23节)
6.3英语选区分析
为了评估Transformer是否可以推广到其他任务,我们对英语选区分析进行了实验。这项任务提出了具体的挑战:输出受到强大的结构约束,并且显著长于输入。此外,RNN序列到序列模型无法在小数据区获得最先进的结果[37]。
我们在宾夕法尼亚州Treebank的《华尔街日报》(WSJ)部分培训了一个4层的transformer,约4万个训练句子。我们还在半监督的环境中对其进行了培训,使用了来自的更大的高置信度和Berkley Parser语料库,包含约1700万个句子[37]。我们使用了16K代币的词汇表用于仅限《华尔街日报》的设置,32K代币的词汇表用于半监督设置。
我们只进行了少量实验,以选择第22节开发集上的辍学、注意力和剩余(第5.4节)、学习率和波束大小,所有其他参数从英语到德语基础翻译模型保持不变。在推理过程中,我们将最大输出长度增加到输入长度+300。我们仅在《华尔街日报》和半监督设置中使用了21和的波束大小。
我们在表4中的结果表明,尽管缺乏特定于任务的调整,但我们的模型表现得出奇地好,产生了比所有之前报告的模型更好的结果,但递归神经网络语法除外[8]。
与RNN序列到序列模型[37]相比,Transformer的性能优于berkeleyparser[29],即使仅在《华尔街日报》训练集(40K句)上进行训练也是如此。
7结论
在这项工作中,我们提出了Transformer,这是第一个完全基于注意力的序列转导模型,用多头自注意力取代了编码器-解码器架构中最常用的递归层。
对于翻译任务,Transformer可以比基于循环层或卷积层的体系结构更快地进行训练。在WMT 2014英语到德语和WMT 2014英语到法语的翻译任务中,我们实现了新的技术水平。在前一个任务中,我们的最佳模型甚至比之前报道的所有集合都要好。
我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究本地、受限的注意力机制,以有效处理图像、音频和视频等大型输入和输出。我们的另一个研究目标是减少一代人的顺序。
我们用于训练和评估模型的代码可在https://github.com/tensorflow/Tensor2transformer。
感谢Nal Kalchbrenner和Stephan Gouws的富有成效的评论、更正和启发。
参考文献
注意力可视化
图3:第5层(共6层)编码器自我注意力中长距离依赖后的注意力机制示例。许多注意力集中的人注意到动词“making”的远距离依赖,完成短语“making…”。。。“更难”。这里显示的注意仅限于“制造”一词。不同的颜色代表不同的头部。最好是彩色的。
图4:两个注意力头,也在6层的第5层,显然参与回指消解。上图:头5的全部注意力。下图:从注意力的“its”一词中分离出注意力,标题5和6。注意,对于这个词,注意力是非常尖锐的。
图5:许多注意力头表现出的行为似乎与句子结构有关。我们在上面给出了两个这样的例子,来自6层第5层编码器自我关注的两个不同头部。很明显,这些多头注意力学会了执行不同的任务。