Attentionisallyourneed(原⽂翻译)
注意⼒是你所需要的
摘要:占优势的序列转换模型基于复杂的循环或卷积神经⽹络,其中包括⼀个编码器和⼀个解码器。表现最好的模型还通过注意⼒机制连接编码器和解码器。我们提出了⼀种新的简单的⽹络架构,即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。输⼊输出维度为d model= 512,内层维度d ff= 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, PE pos+k可以表⽰为PE pos的线性函数。
我们还尝试使⽤学习到的位置嵌⼊[9]代替,发现两个版本产⽣了⼏乎相同的结果(见表3⾏(E))。我们选择正弦版本,因为它可能允许模型外推到⽐在训练中遇到的序列长度更长。
4. 为什么要⾃注意
在本节中,我们将⾃注意层的各个⽅⾯与循环层和卷积层进⾏⽐较,这些层通常⽤于映射⼀个可变长度的符号表⽰序列(x1,…,xn)到另⼀个等长序列(z1,…,zn),具有xi, zi∈R d,如典型序列转换编码器或解码器中的隐藏层。在激励我们使⽤⾃我注意时,我们考虑了三个需要。
⼀个是每层的总计算复杂度。另⼀个是可以并⾏化的计算量,由所需的最⼩顺序操作数来衡量。三是⽹络中长距离依赖之间的路径长度。学习长期依赖是许多序列转导任务的关键挑战。影响学习这种依赖关
系能⼒的⼀个关键因素是⽹络中前进和后退信号必须经过的路径长度。输⼊和输出序列中任意位置组合之间的这些路径越短,就越容易学习长期依赖[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分数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论