Attention Is All U Need

Introduction

RNN, LSTM, GRU在语言模型和机器翻译等领域都达到了state-of-the-art的水平。RNN模型存在不能并行计算和长距离依赖的问题。现在,attention机制几乎成为了RNN模型的标配。

本文提出了Transformer的新结构,完全避开了循环的结构,仅仅依赖于attention机制来获取input和output之间的依赖。简而言之,Transformer是又快又好。

Background

传统的减少串行计算的方法操作的数目和计算位置之间的距离有关,而Transformer是常数级别的计算量。

Self-attention 根据序列的不同位置计算对序列的表达,已经别广泛地运用到了很多NLP领域。

Model Architecture

在传统的encoder-decoder中,encoder对input进行编码生成语义C,decoder将C解码为我们需要的目标Y。

Transformer的encoder和decoder都采用了stacked self-attention and point-wise, fully connected layers

Encoder and Decoder Stacks

  • Encoder

encoder由6层(N=6)堆叠而成,每一层由两个sublayer构成。第一个sublayer是Multi-Head Attention,第二个sublayer是Feed Forward。两个sublayer都会引入residual和layer normalization。

Batch Normalization 和Layer Normalization

paper link

Batch Normalization

在一个mini-batch上计算均值和方差,在对每个数据进行norm。

假设 某一层神经元的输入输出为 $\alpha_i^l = w_i^{l^T} h^l, h^{l+1} = f(\alpha_i^l + b_i^l)$, $\alpha_i^l$ 是线性层输出。$h^l$ 是l层的输入。

Batch normalization 的计算顺序为 线性层 -- BN -- 激活函数

BN公式为:

Layer Normalization

RNN难以用BN计算,所以提出了LN。对于每个time stamp的输出结果,在该输出结果上做norm,而不是在所有的batch上做norm。

不管是BN还是LN,norm的结果还需要过一个线性层,进行缩放和漂移,避免norm后的结果太过于一致,而失去了特征。

$\alpha = \beta \alpha + \gamma$ $\beta$表示缩放因子,$\gamma$表示漂移因子。

简单来说,公式就是 LayerNorm(x + sublayer(x))。为了可以实现residual,我们设置所有的output的维度为512($d_{model} = 512$)

  • Decoder

decoder也是由6层(N=6)堆叠而成,每一层除了encoder部分的两个sublayer,还加入了一个Multi-Head Attention用来处理encoder部分的输出。第一个Multi-Head Attention进行了细微修改,加入了mask,用来保证每个位置预测结果时只会将该位置之前的结果纳入计算(已经预测过的位置)。

Attention

  1. Scaled Dot-Product Attention

如上面左图所示,直接上公式:

query对每个key点乘,然后做一个缩放操作,然后做softmax乘以V。相当于计算每个K的相似度,根据相似度计算V的加权平均。

有两种用的比较多的attention计算方法,一种是additive attention(使用前向网络计算),一种是dot-product。两种的理论实践复杂度很接近,但是dot-product时间和空间效率更高。

在$d_k$范围比较大的时候,additive attention的效果更好,因为dot-product在计算softmax时,如果值较大会导致softmax具有小的梯度,所以需要进行除以$\sqrt d_k$的缩放。

补充 softmax的梯度:

  1. Multi-Head Attention

作者发现并行使用不同的线性层处理K, Q, V, 并且再并行通过attention model效果会比较好。Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions 上公式:

其中

我们设置了h=8个并行的结构,同时使得 。因为每个head的维度被降低了,所以总得计算量和之前是很相似的。

Encoder 中 Attention 的输入有K,Q,V。Input embedding加上Positional Encoding的输入会经过三个线性层,得到输入的K,Q,V。每个堆叠的sublayer的输出都会经过三个线性层得到新的K,Q,V,作为下一层的输入。

如下图所示。

  1. Applications of Attention in our Model

Transformer有三种使用Multi-Head Attention的方式:

  • queris来自于decoder的上一层decoder的输出,keys和value来自于encoder部分的输出
  • encoder部分是self-attention, 所有的query,key,value均来自于上一层的输出。每个位置都可以attend到所有的位置。
  • decoder部分和encoder部分一样,只不过为了保证自回归性,需要引入mask保证不计算非法的值。

Position-wise Feed-Forward Networks

每个attention sublayer后面都会接一个全连接的前向网络,公式为:

另一种解释是两层卷积核size为1的卷积。输入和输出均为,

Embeddings and Softmax

输入和输出需要embedding layer,共享权重,同时将这些权重乘以 $\sqrt {d_{model}}$

Positional Encoding

因为模型不适用循环神经网络或者卷积,所以需要某种机制来包含词之间的位置信息。Positional encoding 计算公式如下:

对每个位置,positional encoding的维度和embedding size相同,会和embedding向量相加,得到最后的input向量。

如果当前位置是偶数位置,则使用sin函数计算每个维度的具体值,如果当前位置是奇数位置,则使用cos函数计算每个维度的具体值。

图示如下

Positional Encoding

Why Self-Attention

比较self-attention和rnn、cnn。

comparison

Reference

Layer Normalization paper

attention is all you need paper

参考博客