快速理解NLP中的Attention机制

为什么需要attention机制

常规的机器翻译采用encoder-decoder结构,其中两个模块的目的是:

  • encoder:将输入序列x 1 x 2 x 3 x 4 . . . . x t x_1x_2x_3x_4....x_tx1x2x3x4....xt转换为矩阵或者向量表示C = f ( x 1 , x 2 , x 3 . . . . , x t ) C=f(x_1,x_2,x_3....,x_t)C=f(x1,x2,x3....,xt)
  • decoder:将C CC转换为输出序列y 1 y 2 y 3 . . y m y_1y_2y_3..y_my1y2y3..ym,其中y i = g ( C , y 1 , y 2 , y i − 1 ) y_i=g(C, y_1, y_2, y_{i-1})yi=g(C,y1,y2,yi1)注意只有i ii位置之前的内容

Alt

这样的问题在于,每一次的输出y i y_iyi所关注的语义内容可能并不是一样的,比如句子:

我走在马路上,吃着苹果
I was walking in the street, eating an apple

在生成词street时,eating和walking这两词的重要性和在生成apple时的重要性一定是不一样的,所以我们要在生成不同的词时为其他词赋予不同的权重,这就是attention机制的思想

attention机制是什么样的

attention机制的图像表示

在这里插入图片描述
如图是将"我爱吃苹果"翻译为“I love eating apple”的图解,为了方便观看和简洁,这个图省略了原本应该出现在文本头的<BOS>标记和出现在文本尾部<EOS>标记

  • 下面的四个RNN Cell(可以是普通的RNN单元,GRU,LSTM)是encoder部分,上面的四个是deocder部分
  • v i v_ivi是encoder第i ii个时间步的隐藏输出,q i q_iqi是decoder第i ii个时间步的隐藏输出
  • 图中虚线框的部分就是attention的结构
  • d o t dotdot是将q qq分别与各个v vv点乘的操作

attention机制的公式表达

请结合上图来理解这些公式

  • 首先将encoder每一步的隐藏输出和decoder上一步的隐藏输出分别进行点乘:m t i = v i q t − 1 m_{ti} = v_iq_{t-1}mti=viqt1 表示encoder第i ii个神经元的隐藏状态在decoder的时间t tt步上的点乘计算(这里不一定非得是点乘,还有加一层dense layer或者加法等),点积代表的是两个向量的相似性
  • 然后将各个m t i m_{ti}mti组合为m t m_{t}mt进行softmax计算得到权重a t a_tat向量,softmax可以使权重之和为1
  • 最后,将a t a_tat向量和v i v_ivi进行加权求和得到decoder中cell的输入c t = ∑ i a t i v i c_t=\sum_ia_{ti}v_ict=iativia t i a_{ti}ati表示t个输出中第i个隐层的权重)

总而言之,整个attention的计算过程如下所示

m t i = v i q t − 1 m_{ti} = v_iq_{t-1}mti=viqt1
a t = s o f t m a x ( m t ) a_t=softmax(m_t)at=softmax(mt)
c t = ∑ i a t i v i c_t=\sum_ia_{ti}v_ict=iativi

对于整个的encoder-decoder结构的attention来说

Q[q 1 q_1q1, q 2 q_2q2, q 3 q_3q3, q 4 q_4q4, …] Q ∈ R ( n , d q ) Q \in R^{(n, d_q)}QR(n,dq) n nn是decoder长度
V[v 1 v_1v1, v 2 v_2v2, v 3 v_3v3, v 4 v_4v4, …] V ∈ R ( m , d q ) V \in R^{(m, d_q)}VR(m,dq) m mm是encoder长度

整体的attention机制可以写成:
s o f t m a x ( Q V T d v ) softmax(\frac{QV^T}{\sqrt d_v})softmax(dvQVT)

其中d v \sqrt d_vdv是为了防止分子太大

各位先记住这个公式:

s o f t m a x ( Q V T d v ) V softmax(\frac{QV^T}{\sqrt d_v})Vsoftmax(dvQVT)V

附加知识

soft attention和hard attention

  • soft attention指的是a t a_tat中的元素是softmax层直接输出的attention机制,即a t a_tat的元素值介于0和1之间
  • hard attention指的是a t a_tat中的元素非1即0的attention机制

注意力机制的其他表达

请大家将注意力转移到上面那个推荐大家注意的公式。这个公式里面有两个V VV,这个V VV有两个属性分别是:

  • Q QQ进行点乘,计算Q QQV VV之间的相似程度(键属性)
  • 最后和权重a t a_tat相乘得到decoder的输入(值属性)

我们把这两个属性分别称为键属性和值属性,并且把V拆解为K(键属性)和V(值属性),然后上面的式子就变成了:

s o f t m a x ( Q K T d k ) V softmax(\frac{QK^T}{\sqrt d_k})Vsoftmax(dkQKT)V

在我们大多时候遇到的情况下K = V K=VK=V,基本没有遇到K ≠ V K\not=VK=V的情况 。但是当K = Q = V K=Q=VK=Q=V时,就被称为自注意力模型。自注意力模型是Transformer结构的重要组成,我们以后在另写说明。

这其实是谷歌对attention的定义,但是接触了传统attention模式的可能很难理解K KK,V VV分别是什么,所以以这种特殊的方式写出来


版权声明:本文为qq_35169059原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。