2017 Attention is All You Need 提出Transformer的论文

摘要

        主要的序列转换模型是基于复杂的循环或包括一个编码器和一个解码器的卷积神经网络,表现最好的模型也通过一个注意力机制连接编码器和解码器。我们提出一种新的简单的网络结构Transformer,仅基于注意力机制,而完全避免循环和卷积。在两个机器翻译任务上的实验表明,模型在质量上更优越,同时可并行的,需要训练时间更少。我们的模型在WMT2014英-德翻译任务上实现了28.4BLEU,超过现有的最佳结果,包括集成,提高了2BLEU。在WMT2014英-法翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的最先进的单模型BLEU分数41.8,这只是文献中最佳模型训练成本的一小部分。我们成功地将Transformer应用于大和有限训练数据的英语选区解析,证明Transformer可以很好地推广到其他任务。

一、介绍

        RNN、LSTM和GRU已经建立了最先进的序列建模和转换问题如语言建模和机器翻译的方法,之后,许多努力继续推进循环语言模型和编码-解码器结构的边界。

        循环模型的固有的序列性质排除了训练示例中的并行化,这对更长的序列长度至关重要,因为内存限制示例的批处理。最近的工作通过分解技巧和条件计算显著提高了计算效率,同时也提高了后者的模型性能。然而,序列计算的基本约束仍然存在。

        注意力机制已经成为各任务中序列建模和转换模型的一个组成部分,允许对依赖关系进行建模,不考虑在输入或输出序列的距离。然而,在除少数情况下,所有这种注意力机制与循环网络一起使用。

        本文我们提出Transformer,一种避免循环,而完全依赖注意力机制来绘制输入和输出间的全局依赖关系。该模型允许更多的并行化,在8个p100gpu上训练了短短12个小时后,可以达到翻译质量的新水平。

二、背景

        减少序列计算的目标也构成了扩展的神经GPU的基础,ByteNet[18]和ConvS2S[9]都使用卷积神经网络作为基本的构建块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,来自两个任意输入或输出位置的信号所需的操作数量在位置之间的距离上增长,ConvS2S线性增长,ByteNet对数增长,使得学习遥远位置[12]之间的依赖关系更加困难。在Transformer上,减少了操作的数量,尽管由于平均注意力加权位置而降低有效分辨率为代价,我们用多头注意力来抵消这一效果。

        自注意力以计算序列的表示,已被成功应用到阅读理解、摘要总结、文本暗示和学习独立任务的句子表示。

        端到端记忆网络基于循环注意力机制,而不是序列对齐的循环,已被证明在单语言问答和语言建模任务上表现良好。

        Transformer是第一个完全依赖于自注意力来计算其输入和输出的表示的转移模型,而不是使用序列对齐的RNN或卷积。

三、模型结构

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

        Transformer的整体结构使用编码器和解码器的堆叠自注意力和point-wise,全连接层

2017 Attention is All You Need 提出Transformer的论文_第1张图片

 3.1 编码器和解码器堆栈

        编码器:堆叠6个相同的层,每个层有两个子层,一个多头自注意力机制和另一个简单的位置上全连接的前馈网络。我们在每个子层周围使用残余连接、然后是层归一化。也就是说,每个子层的输出都是LayerNorm(x+Sublayer(x)),其中Sublayer(x)是由子层本身实现的函数。

         解码器:同样由6个相同子层组成,除了每个编码器层中的两个子层外,还插入了第三个子层该子层对编码器堆栈的输出执行多头注意力。与编码器类似,我们在每个子层周围使用残余连接,然后层归一化。我们也修改了解码器堆栈中的自注意力子层,以防止位置不受后续位置的影响,这种掩蔽,结合输出嵌入被一个位置偏移的事实,确保对位置i的预测只取决于小于i的位置的已知输出。

3.2 注意力

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

3.2.1 缩放的点乘注意力

2017 Attention is All You Need 提出Transformer的论文_第2张图片

         我们称我们的特定注意力“缩放的点乘注意力”,输入包含dk维度的查询和键,和dv维度的值。我们计算具有所有键的查询的点积,每个键除以√dk,并应用一个softmax函数来获得这些值上的权值。

         在实践中,我们同时计算一组查询的注意力函数,并打包成一个矩阵Q,键和值也被打包为矩阵K和V。我们计算的输出矩阵为:

 两种最常用的注意力函数是加法注意[2]和点积(乘法)注意。点积注意与我们的算法相同,除了√1dk的缩放因子。加法注意使用具有单个隐层的前馈网络来计算兼容性函数。虽然两者在理论复杂性上相似,但点积注意在实践中更快、更节省空间,因为它可以使用高度优化的矩阵乘法码来实现。

         虽然对于较小的dk值,这两种机制表现相似,但在较大的dk[3]值下,加性注意优于点积注意。我们怀疑,对于dk的大值,点积的大小变大,将softmax函数推到其梯度极小的区域。为了抵消这种效应,我们用√1dk来缩放点积。

3.2.2 多头注意力

        我们没有使用dmodel维的键、值和查询执行单一的注意力函数,而是发现将查询、键和值线性投影h次到dk、dk和dv维是有益的。在这些查询、键和值的每个投影版本上,我们将并行执行注意函数,生成dv维输出值。这些值被连接并再次投影,从而得到最终的值,如图2所示。

        多头注意允许模型共同关注来自不同位置的不同表示子空间的信息。用一个注意力头,平均就可以抑制这一点。

         我们使用h=8平行注意层,或头部。对于每一个,我们都使用dk=dv=dmodel/h=64。由于每个头部的尺寸减小,其总计算成本与全维数的单头注意相似。

3.2.3 注意力在我们的模型中的应用

        Transformer用三种方式使用多头注意力:

        在“编码器-解码器注意”层中,查询来自之前的解码器层,记忆键和值来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模拟了序列到序列模型中典型的编码器-解码器注意机制,如[38,2,9]。

        编码器包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中上一层的输出。编码器中的每个位置都可以处理编码器上一层中的所有位置。

        类似地,解码器中的自注意层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中的左信息流,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来在缩放的点乘注意中实现这一点,见图2。

 3.3 Point-wise 前馈网络

        除注意力子层外,编码和解码器中的每个层包含一个全连接前馈网络,分别应用于每个位置。这包含两个线性转换,中间一个ReLU激活。

         虽然不同位置的线性变换是相同的,但它们每层都使用不同的参数。另一种描述这一点的方法是用核大小为1的两个卷积。输入和输出的维数为dmodel=512,内层的维数为dff=2048。

3.4 嵌入和Softmax

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

 3.5 位置编码

        由于我们的模型不包含循环和卷积,为了使模型利用序列的顺序,我们必须注入一些关于序列中表示的相对或绝对位置的信息。为此,我们在编码和解码堆栈底部的输入嵌入中添加了位置编码。

        本工作中,我们使用不同频率的正弦和余弦函数:

 我们选择这个函数是因为我们假设它允许模型很容易地学习相对位置,因为对于任何固定偏移k,PEpos+k可以表示为PEpos的线性函数。

 四、Why Self-Attention

          促使我们使用自注意力考虑三点原因:一是每层的总计算复杂度,另一个是可以并行化的计算量,通过所需的最小序列操作数来衡量。

        第三个是网络中长期依赖关系之间的路径长度。学习远程依赖是许多序列转导任务中的一个关键挑战,影响学习这种依赖关系能力的一个关键因素是网络中前后信号必须经过的路径的长度。输入和输出序列中任何位置组合之间的这些路径越短,就越容易学习远程依赖关系[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。

        如表1所示,自注意层将所有位置与固定数量的顺序执行的操作连接起来,而循环层需要O(n)个顺序操作。在计算复杂性方面,当序列长度n小于表示维数d时,自注意层比循环层要快,这通常是机器翻译中最先进的模型,如字片[38]和字节对[31]表示。为了提高涉及很长序列的任务的计算性能,自我注意力可以被限制在只考虑一个大小为r的邻域在输入序列以各自的输出位置为中心。这将使最大路径长度增加到O(n/r)。

2017 Attention is All You Need 提出Transformer的论文_第3张图片

 五、训练

六、结果

2017 Attention is All You Need 提出Transformer的论文_第4张图片

2017 Attention is All You Need 提出Transformer的论文_第5张图片

2017 Attention is All You Need 提出Transformer的论文_第6张图片

 七、总结

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

         对于翻译任务,Transformer的训练速度可以比基于循环层或卷积层的架构要快得多。在WMT2014英德语和WMT2014英法翻译任务中,我们实现了一种新的水平。在前一项任务中,我们的最佳模型甚至优于所有以前报告的集合。

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

你可能感兴趣的:(视觉问答,视觉问答参考文章,transformer,深度学习)