【论文】Attention is All You Need

论文题目: Attention is All You Need

开源项目地址:github

主要内容

文章实现了一种仅使用attention机制,完全去除卷积网络和循环网络的结构,称为Transformer网络。

在实现比较高的准确性的基础上,具有较低的计算成本。

背景

目前常用的序列处理模型通常使用一个编码器和一个解码器,在两者的连接中使用attention机制,而且编码器和解码器的实现使用复杂的CNN和RNN。

由于RNN结构引入的时序逻辑不利于并行计算,引入比较高的计算成本。因此Transformer结构中除去了RNN而仅使用attention结构来学习序列前后的相关性。

在transformer中仅使用self-attention机制来学习序列中不同元素之间的关系。

实现

使用self-attention和full connect实现。

编码器的实现中,使用若干个块,每个块包括一个multi-head attention层和一个全联接的feed foward层,其中每一层都引入了残差连接和正规化,构成$LayerNorm(x + Sublayer(x))$的结构。

解码器的实现中,同样使用若干个块,每个块为编码器的基本块之前加上一个masked multi-head attention结构。同时将上一时刻的输出作为下一个时刻的输入,使得输出仅由之前的输入决定。

Scaled Dot-Product Attention的结构为将Q(uery)、K(ey)、V(alue)映射得到输出。输入为$d_k$维的Key向量和$d_v$维的Value向量,计算方法为矩阵相乘的结果缩放后再Softmax得到Value元素对应的权重,即$Attention(Q,K,V) = Softmax(\frac{QK^T}{\sqrt{d_k}})V$。使用矩阵乘法的实现计算更快。

Multi-head Attnetion为多个Attention层组合得到。通过将V、K、Q线性投影到h个attention网络,将其结果通过concat组合之后再线性投影得到结果,即$MultiHead(Q,K,V) = Concat(head_1,hed_2…)W^O$,其中$head_i = Attention(QW^Q_i, KW^K_i, VW^V_i)$。

注意解码器的Q来自解码器上一输出经过Masked Multi-Head Attention的结果,K、V来自编码器的输出。而编码器的Q、K、V来自上一层的输出。

在Masked Multi-Head Attention中,SoftMax的输出被屏蔽(设置为$-\infty$)。

在Attention之后的Feed Forward网络中,使用两次ReLU得到$FFN(x) = max(0, xW_1+b_1)W_2+b_2$。

对于输入,还需要进行embedding和positional encoding操作。使用learned embeddings将输入转化为向量。后者引入顺序和位置信息,使用$PE_{(pos,2i)} = sin(pos/10000^{2i/d_{model}})$和$PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}})$,其中pos为位置,i为维数。

对于输出,使用线性转换(learned linear transformation)和softmax将输出转变为概率。这里的线性转换和输入的embeddings使用相同的权重(embedding中乘$\sqrt{d_{model}}$,即向量规模的平方根)。

评价

使用attention相比直接使用卷积或循环,计算复杂度比较低,同时更有利于并行计算。

同时attention结构更有助于学习长句子,能学习到距离较远的信息。

Lei Yang
Lei Yang
PhD candidate

My research interests include visual speech recognition and semantics segmentation.