本文是对Google2017年发表于NIPS上的论文"Attention is all you need"的阅读笔记.
对于深度学习中NLP问题,通常是将句子分词后,转化词向量序列,转为seq2seq问题.
-
RNN方案
采用RNN模型,通常是递归地进行 y t = f ( y t − 1 , x t ) y_t=f(y_{t-1},x_t) yt=f(yt−1,xt),优点在于结构简单,十分适合序列建模;缺点在于需要前一个输出作为后一个的输入参与运算,因此无法并行计算,速度很慢,且单向RNN只能获取前向序列关系,需要采用双向RNN才可以获取完整的全局信息.
-
CNN方案
采用CNN模型,则是通过一个窗口(卷积核)来对整个序列进行遍历, y t = f ( x t − 1 , x t , x t + 1 ) y_t = f(x_{t-1},x_t,x_{t+1}) yt=f(xt−1,xt,xt+1)只能获取到局部信息,需要层叠来增大感受野.
本文提出了一种Transformer注意力机制,完全替代了RNN、CNN.
y t = f ( x t , A , B ) y_t = f(x_t,A,B) yt=f(xt,A,B)
将A、B都取为X时,则称为Self-Attention,即通过 x t x_t xt和整个 X X X进行关系运算最后得到 y t y_t yt.
Attention层
Google给出了如下的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(dk