2018-02-08 | Paper Notes | UNLOCK

Paper Notes:Attention is all you need

序列模型架构

对于一个序列分析问题通常采用encoder-decoder架构,通过encoder模块将一个输入$(x_1, x_2,…,x_n)$转换为另一个表示序列$(z_1, z_2,…,z_n)$,decoder模块在将这个表示转换为输出序列$(y_1,y_2,…,y_m)$,这是一个典型的Encoder-Decoder架构。这种架构在机器翻译、阅读理解、Caption等多个场景都有广泛的使用。

序列建模

什么是序列呢?在NLP中,一句话经分词之后就形成含有多个词的list,可以称作序列;一个用户在一个实际窗的动作,就形成一个动作序列;除此之外生活中很多数据都可以看成一个序列。那我们就需要面对一个问题,如何对序列进行建模。因为序列间有时序信息,很直观的会想到采用RNN,它能够学习到局部信息,缺点是,1)无法并行化,因为必须等待前一步处理之后才能处理当前步,这导致RNN网络在训练时需要很长时间,2)不能很好学习全局结构信息
第二个思路是Fackbook的工作利用CNN,可以方便并行,且能够学的全局信息,最后一种方式就是Google
论文中提到Attention,只利用注意力机制实现序列建模,$y_t=f(x_t,W_1,W_2)$,$W_1$和$W_2$是另外一个序列句子,如果这三个序列是同一个序列的话,就称作是self-attention

Attention

image.png
在这篇论文中,作者给出了具体的attention的形式,结构如上图。

其中,Q,K,V矩阵大小分别是,最终形成的结果是,即将的序列表示成的矩阵形式,是一个缩放因子,文中提到对于dot product在计算结果会很大,经过softmax之后会将元素值推向边界0或1,这而这些区域梯度信息很小不便于训练,所以采用这个数值进行scale,为什么是,假设都是均值为0,方差为1的随机变量,那么他们的dot product,,它是均值为0,方差为的一个变量,因此这里采用。论文中提到,Q,K,V分别是query、key-values矩阵的矩阵形式,那么对于单个query来说,Attention计算如下,

其中Z是整理后的系数,首先计算出$q_t$与$v_i$的相关性,然后加权求和。对于attention的使用方式一般分为两种,一种是让采用相加(additive attention)然后再通过其他运算比如tanh等,另一种就是上式中直接相乘的形式(dot-product/multiplicative)。这attention形式论文中称作scale Dot-Product Attention

Multi-Head Attention

这个是Goolge提出的对attention机制的完善,从字面翻译是多头attention,架构图如下。
image.png
multi-head attention思想很简单,就是首先对querie,keys,values做个线性映射,然后将上述attention机制重复h次,将最终结果进行concat,就得等到multi-head attention结果。这种思想类似于CNN,通过不同的卷积核来得到更多的feature map。

其中,,这些都是不同的参数矩阵,需要通过数据学习得到。这里推算下参数shape,

其中,n代表输入序列长度,$d_{model}$代表模型为维度,在论文中,提到.
通过multihead方式不仅能够得到具有注意力结果的表示,同时也含有序列全局信息。

Self-Attention

了解了Attention机制之后,那就有个疑问,到底什么是query,key 和value呢?对于这三部分的设计需要根据具体的任务,比如阅读理解中,query可以是文章的词向量序列,而key=value是问题的词向量序列。在这篇文章中,Google提到更多的是self-attention,即$Attention(X,X,X)$,为什么需要self-attention(inner attention),主要原因如下,

  • 每层计算复杂度降低,
  • 计算并行化
  • 长距离依赖

    Position Encoding

    目前为止,利用attention机制可以得到一个好的表示,但是这个表示并不含有序列中元素的相对或绝对为止,比如对于一篇文章,调换句子为止,或句子中词的位置,会得到相同的表示,因此论文中又提出了position encoding,具体如下,其中pos代表的是位置,i代表维度中i个元素值就是pe(i).

总结

总体来说,Google提出了一种新的思路来完成序列建模任务,但多少还是有些借鉴CNN思想,attention机制逐渐成为各种任务标配,因此掌握attention机制的原理,学习如何根据不同任务设计attention尤为重要。

评论加载中