论文精读——Transformer
transformer是一个颠覆式的创造,开启了NLP的新时代
Abstract
主流的序列模型都是采用CNN和RNN来构造的,此外较好的编解码器模型都会采用Attention机制。
本文提出了一个简单的模型是Transformer,完全的基于注意力机制,而避免了使用CNN与RNN。
Transformer提供了并行计算的可能性,在训练过程中极大的缩短了训练时长。
Introduction
在序列建模和转换问题中,经常采用循环神经网络,构成编码器-解码器的框架。
由于循环神经网络的的计算与时间步有关,所以难以并行化。造成了计算效率低下的现象。虽然有因子分解和条件计算的方法,但是还是难以实现并行化。
几乎所有的序列建模任务中,Attention Mechanism已经成为了标配。由于Attention的引入可以解决长程依赖问题。
本文提出的Transformer完全避开了循环神经网络,而仅仅使用Attention 机制进行建模,在解决长距离依赖的基础上,进一步提高了并行效率。
Background
减少顺序计算也成为扩展神经网络GPU、ByteNet、ConvS2S的基础,为了并行计算都采用卷积神经网络作为基本的模块。
关联任意两个输入输出位置的信号的操作次数会随着距离的增加而增加。
本文提出的Transformer会将这种操作减少到固定的次数,尽管对用Attention权重化位置取平均降低了效果,但是本文使用了Multi-Head Attention进行抵消。
self-Attention有时又被称为intra-Attention,它是由单个序列计算得来的。self-Attention已经成功用于各类任务,阅读理解、自动摘要、文本含义和学习与任务无关的句子表达。
本文的Transformer模型就是完全依赖于Self-Attention的模型构建的。
Model Architecture
Transformer的整体架构图
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和加法Attention没有区别,但是在dot attention的基础上提出了缩放点积Attention。
缩放点积Attention的公式如下: