Attention Is All You Need

摘要:以复杂循环或卷积神经网络为基础的显性序列转化模型,包括编码和解码。最好表现的模型也连接编码和解码通过注意力机制。我们提出一种新的简单网络架构,Transformer, 只基于注意力机制,丢弃循环和卷积网络。在两个机器翻译任务上的实验显示这些模型在质量上更好,并能更好并行化,要求更少时间训练。
1 简介
循环网络,LSTM和门循环网络是在序列建模和转化问题例如语言建模和机器翻译任务中最好的方法。循环模型根据输入输出序列的符号位置来分解计算。在计算时对齐位置到步骤上,生成隐藏状态ht的序列,作为之前隐藏状态 ht1 和t位置的输入的函数。现在的工作实现明显提升在计算效率通过分解tricks和条件计算,也提高了模型表现。
Attention机制变成序列建模和直推模型的完整部分,运行依赖性的建模与输入或输出序列的位置无关。
本文提出Transformer, 一个模型架构避开循环性和完全依赖于注意力机制来得到全局依赖性在输入和输出之间。
2 背景
减少序列计算的目标也构成了Extended Neural GPU, ByteNet, ConvS2S的基础,其使用卷积神经网络作为基础模块,并行计算隐藏表达对于所有输入和输出位置。在这些模型中,操作数,其关联了任意输入或输出位置的符号,当距离增加时操作数增加。这使得更难学习远距离的依赖性。在Transformer中操作数减少到一个常量。
Self-attention 有时称为intra-attention是关联单序列的不同位置的attention机制,为了计算序列的表达。自注意力成功应用在包括阅读理解,摘要总结,文本蕴含和学习独立任务句子表达任务中。
Transorformer是第一个直推模型完全依赖自注意力来计算其输入和输出的表达,没有使用RNN或卷积。
3 模型架构
大多数神经网络序列转化模型都有编码-解码结构。编码器映射符号表达的输入序列 x1,,xn 到一个连续表达 z=(z1,,zn) 。给定z, 一个解码器生成一个符号的输出序列 y1,,ym 一次一个元素。在每个步骤中,模型是自动回归,使用之前生成的符号作为额外输入当生成下一个时。
Transformer遵循整体架构,使用堆积的自注意力和点级别,对于编码器和解码器都有全连接层。
3.1 编码器和解码器堆积
编码器:使用N = 6的完全一样的层堆积。每层有两个子层,第一个是multi-head 自注意力机制,第二个是一个简单,居于位置的全连接前向反馈网络。我们使用残差连接在每两个子层间,后加上层正则化。每个子层的输出是LayerNorm(x+Sublayer(x)), 其中sublayer(x)是有子层自己实现的函数。为了促进这些残差连接,所有子层和嵌入层一样,产生的输出维度为 dmodel=512 这里写图片描述
解码器:解码器也是由N = 6完全相同层推挤而成。在每个编码层包括两个子层,在解码器插入第三个子层,完成multi-head注意力在编码器堆积的输出。类似编码器,我们使用残差连接在每个子层,后面加上层正则化。我们也修订自-注意力子层在解码器堆积来保留位置。结合事实输出嵌入由一个位置抵消,确保对i位置的预测值依赖于已知的在i之前位置的输出。

3.2 Attention
一个注意力函数可以描述为映射一个请求和一系列键值对到一个输出,其中请求,键, 值和输出都是向量。输出作为一个值的加权和计算得到,其中分配到每个值的权重由请求的兼容函数关于对应键计算得到。

3.2.1 比例的点积attention
输入包括请求和 dk 维的键,和 dv 维的值。我们计算请求关于所有键的点积,除以 dk ,并应用一个softmax函数来得到值上的权重。
这里写图片描述
左边为比例的点积注意力,右边是multi-head 注意力并行包含多个注意力层。
在实践中,我们同时地计算注意力函数在一系列请求,包装成矩阵Q。键和值也被包装成矩阵K 和V, 我们计算输出矩阵为:

Attention(Q,K,V)=softmax(QKTdk)V

两个最长使用的注意力函数是additive(加法) attention, 和点乘(乘法)注意力。点乘注意力和本算法一样,除了缩放因子 \frac{1}{\frac{d_k}} . 加法注意力计算兼容函数使用一个前向反馈网络使用单个隐藏层。然而这两个在理论复杂度上是相似的,点乘注意力更快和空间更效率,使用高度优化矩阵乘法代码优化。对于小的dk值,两个机制表现类似,加法注意力比没有很大的dk值的点乘效果要好。我们怀疑dk值越大,点乘在量级上增长越快,将softmax函数推向很小梯度的地区。

3.2.2 multi-head attention
没有使用单个注意力函数带有d维的键,值和请求,我们发现对于线性投影请求,键和值 h次 带有不同的,学习得到的线性投影到 dk,dk,dv 维有好处。在每个投影的版本上我们并行完成注意力函数,得到 dv 维的输出值。这些值将串联起来并再一次投影,得到最终值。
multi-head注意力运行模型共同处理来自不同表达的子空间在不同位置的信息。

MultiHead(Q,K,V)=Concat(head1,,headh)W0,whereheadi=Attention(QWQi,KWKi,VWVi)

其中投影是参数矩阵 WQiRdmodel×dk,WKiRdmodel×dk,WViRdmodel×dv,W0Rhdv×dmodel
本工作中使用h = 8并行注意力层或heads。对于每个我们使用 dk=dv=dmodel/h=64
3.2.3 模型中注意力的应用
Transformer使用multi-head注意力在三种不同的方式:
1,在编码和解码注意力层,来自之前解码层的请求,和内存键和值来自编码的输出。这允许解码器中每个位置去参与所有位置在输入序列。
2,编码器包含自注意力层,在自注意力层中所有的键、值和请求来自同一个位置,在编码器的之前层的输出。编码器中每个位置能参与到编码器之前层的所有位置。
3,相似地,自注意力层在解码器中允许解码器中每个位置去参与到解码器中所有位置。我们需要防止解码器中信息向左留到来预防auto-regressive属性。
3.3 位置状态的前向网络
除了注意力子层,在编码器和解码器中的每一层包含一个全连接的前向网络,被应用到每个位置独立地、相同地。这包含两个线性转化使用RELU激活函数。
FFN(x)=max(0,xW1+b1)W2+b2

然而线性转化在很多不同位置是相同的,他们使用不同的参数层与层之间。另一个描述这个的方法是作为两个核大小为1的卷积层。输入和输出的维度为512,内层维度为 dff=2048
3.4 嵌入和softmax
和其他序列转化模型类似,我们使用学习的嵌入来转化输入字符和输出字符到 dmodel 的向量。我们使用通常的学习的线性转化和softmax函数去转化解码器输出到预测的下一个字符概率。在本模型中,我们共享相同的权重矩阵在两个嵌入层和pre-softmax线性转化。在嵌入层,我们用 dmodel 乘上权重
3.5 位置编码
我们模型不包含循环和卷积,为了模型使用序列顺序,我们必须注入一些关于序列中符号的相关或绝对位置的相关信息。最后,我们增加“位置编码”到输入嵌入在编码器和解码器的最底层。位置编码和嵌入的相同维度 dmodel ,以至于两个可以相加。对于位置编码有很多选择【9】。
本文中,使用不同频率的sine和cosine函数:
PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)

pos是位置i表示维度。这就是位置编码的每个维度对应着正弦曲线。波长构成了几何级数从2 π100002π 。我们选择这个函数因为我们假设它将允许模型简单地学习去使用相关位置,当对于任何固定的偏移量k, PEpos+k 可以表示为 PEpos 的线性函数。
我们也使用学习得的位置嵌入【9】实验,发现这两个版本产生近似一样的结果。我们选择正弦版本是因为允许模型去推断更长的序列。
4 为什么使用Self-attention
本节我们比较大量self-attention层的方面到循环和卷积层通常使用到映射一个符号表达的变长的序列 (x1,...,xn) 到另一个等长序列 (z1,...,zn) , 其中 xi,ziRd ,例如在典型序列转化编码器或解码器的隐藏层。使用self-attention有三个考虑:
第一,每层的总共计算复杂度。另一个是计算量可以并行化,使用要求最小序列操作数。
第三个是网络中长距离之间的路径长度。学习长距离的依赖是在许多序列转换任务的关键挑战。一个关键因素是必须遍历的前向和反向符号的路径长度。任何位置的结合路径越短在输入和输出序列中,越容易学习长距离的依赖。因此我们也比较任意两输入和输出位置的最大路径长度。
一个自注意力层使用常数的序列化执行操作连接所有位置,然而一个循环层要求O(n)序列操作。就计算复杂度而言,自注意力层比循环层要快当序列长度n要小于表达维度d。提高计算表现包含很长的序列,自注意力可以受限到只考虑大小r的近邻区域在输入序列中以输出位置为中心。这将增加最大路径长度到O(n/r)。
一个单卷积层使用核宽度 k<n 不连接所有输入和输出位置之间的点对。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值