快速理解NLP中的Attention机制

为什么需要attention机制

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

  • encoder:将输入序列 x 1 x 2 x 3 x 4 . . . . x t x_1x_2x_3x_4....x_t x1x2x3x4....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 C C转换为输出序列 y 1 y 2 y 3 . . y m y_1y_2y_3..y_m y1y2y3..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 i i位置之前的内容

Alt

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

我走在马路上,吃着苹果
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_i vi是encoder第 i i i个时间步的隐藏输出, q i q_i qi是decoder第 i i i个时间步的隐藏输出
  • 图中虚线框的部分就是attention的结构
  • d o t dot dot是将 q q q分别与各个 v v v点乘的操作

attention机制的公式表达

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

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

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

Q[ q 1 q_1 q1, q 2 q_2 q2, q 3 q_3 q3, q 4 q_4 q4, …] Q ∈ R ( n , d q ) Q \in R^{(n, d_q)} QR(n,dq) n n n是decoder长度
V[ v 1 v_1 v1, v 2 v_2 v2, v 3 v_3 v3, v 4 v_4 v4, …] V ∈ R ( m , d q ) V \in R^{(m, d_q)} VR(m,dq) m m m是encoder长度

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

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

各位先记住这个公式:

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

附加知识

soft attention和hard attention

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

注意力机制的其他表达

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

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

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

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值