主流的序列模型都是采用CNN和RNN来构造的,此外较好的编解码器模型都会采用Attention机制。
本文提出了一个简单的模型是Transformer,完全的基于注意力机制,而避免了使用CNN与RNN。
Transformer提供了并行计算的可能性,在训练过程中极大的缩短了训练时长。
在序列建模和转换问题中,经常采用循环神经网络,构成编码器-解码器的框架。
由于循环神经网络的的计算与时间步有关,所以难以并行化。造成了计算效率低下的现象。虽然有因子分解和条件计算的方法,但是还是难以实现并行化。
几乎所有的序列建模任务中,Attention Mechanism已经成为了标配。由于Attention的引入可以解决长程依赖问题。
本文提出的Transformer完全避开了循环神经网络,而仅仅使用Attention 机制进行建模,在解决长距离依赖的基础上,进一步提高了并行效率。
减少顺序计算也成为扩展神经网络GPU、ByteNet、ConvS2S的基础,为了并行计算都采用卷积神经网络作为基本的模块。
关联任意两个输入输出位置的信号的操作次数会随着距离的增加而增加。
本文提出的Transformer会将这种操作减少到固定的次数,尽管对用Attention权重化位置取平均降低了效果,但是本文使用了Multi-Head Attention进行抵消。
self-Attention有时又被称为intra-Attention,它是由单个序列计算得来的。self-Attention已经成功用于各类任务,阅读理解、自动摘要、文本含义和学习与任务无关的句子表达。
本文的Transformer模型就是完全依赖于Self-Attention的模型构建的。
Transformer也是标准的encoder-decoder架构,encoder对输入序列 { x 1 , x 2 , . . . , x n } \{x_1,x_2,...,x_n\} {x1,x2,...,xn}进行编码形成一个最终的向量context vector。最后在解码器采用自回归的方式进行顺序解码。
编码器由6个完全相同的encoder layer依次层叠而成。每一层都拥有2个子层,分别是一个multi-head attention layer和一个全连接前馈神经网络构成。针对每个子层进行残差连接,再进行层标准化。 o u t p u t = L a y e r N o r m ( x + S u b l a y e r ( x ) ) output=LayerNorm(x+Sublayer(x)) output=LayerNorm(x+Sublayer(x))
解码器同样是采用6个完全相同的decoder layer层叠而成。每层除了编码器拥有的2层结构以外,还额外插入了第三个子层。修改了self-attention子层,以防止当前位置可以观测到未来时刻的信息。
本文采用的Attention,本质与点积Attention和加法Attention没有区别,但是在dot attention的基础上提出了缩放点积Attention。
缩放点积Attention的公式如下:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dkQKT)V
其中 d k d_k dk代表V的维度。
当 d k d_k dk较小时,加法attention和乘法attention的性能没有差别,当 d k d_k dk变大时,加法attention的性能优于乘法attention。但是相同规模下的点积attention比加法attention,速度更快,更加节省空间。
所以文章提出了缩放点积的操作,原因是对于较大的 d k d_k dk值,点积大幅度增加,使得 s o f t m a x softmax softmax推向了梯度较小的区域。
多头注意力机制(multi-head attention)
类似于多核卷积操作,本文提出了一种多头注意力机制的操作,具体的公式如下
M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , . . . , h e a d n ) W O MultiHead(Q,K,V)=Concat(head_1,...,head_n)W^O MultiHead(Q,K,V)=Concat(head1,...,headn)WO 其 中 h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) 其中 head_i=Attention(QW_i^Q,KW_i^K,VW_i^V) 其中headi=Attention(QWiQ,KWiK,VWiV)
其中 W i Q , W i K , W i V W_i^Q,W_i^K,W_i^V WiQ,WiK,WiV都是对原始的数据进行一个缩放的操作, W O W^O WO代表将缩放后的向量转变为缩放前的维度。
在本文中,由于使用了8和Attention,所以将其缩放为原来的1/8。同时计算量与只有一个attention的相同。
本文提出了正弦、余弦函数的位置编码(固定形式),其与模型学习的position_embedding效果相同,但是它可以允许模型推断比训练期间遇到的更长的序列。
encoder-decoder模型中经常使用CNN和RNN作为基础的单元,将一变长的Input_sequence通过映射转变为同样长度的output_sequence。
往往这样的模型需要考虑三个方面的问题:
从表中可以看出
Self-Attention的表现要优于其他的模型,每个attention head都学习到了不同的任务,有的学习到了语法和语义的信息。
本文使用了Adam优化器的变种,在前4000步时,学习率线性增加(此过程称为warmup_steps)。过后,学习率以平方根的比例减小。
本文采用了三种正则化:
本文提出的模型在机器翻译的数据集上进行测试,在基础模型和大模型中均显示出最好的水平,在时间的花费上都比任何一个模型要好很多。
结果如下表:
为了明确每个参数对模型的影响,做了一系类实验,如下表所示:
发现:
为了验证Transformer是否适用于其他任务,对英文语法分析做了相关实验。
这项任务的挑战在于:输出受限于强的结构限制,并且比起输入序列更长。
RNN的Seq2Seq模型并不能在较小的数据集上获得较好的表现。
上表显示了Transformer的较好表现,除了Recurrent Neural Network Grammar(递归神经网络文法)。
本文提出的Tramsformer模型,完全的依赖于多头自注意力机制,采用了传统的编码器-解码器的架构,在WMT2014语料上取得了最好的成绩,并且与RNN和CNN对比训练更加快速。