赞
踩
注意力机制模仿了生物观察行为的内部过程,即一种将内部经验和外部感觉对齐从而增加部分区域的观察精细度的机制。例如人的视觉在处理一张图片时,会通过快速扫描全局图像,获得需要重点关注的目标区域,也就是注意力焦点。然后对这一区域投入更多的注意力资源,以获得更多所需要关注的目标的细节信息,并抑制其它无用信息。
这种机制普遍使用与cv和nlp的相关领域,事实证明确实有很大的收益;
目前attention机制多基于Encoding—Decoding这样的框架之中,比如神经机器翻译NMT & 问答系统:
下面来看 Encoding — Decoding 机制的示意图:
上图就是Encoding — Decoding 的框架图:
注意几个参数
encode & Decoding的输入为 X e n c X d e c X_{enc} \;\; X_{dec} XencXdec
上一时间序列的隐藏层输出为 h e n c h d e c h_{enc} \;\; h_{dec} henchdec
decoing输出: y d e c y_{dec} ydec
Encoding的长度是 T e n c T_{enc} Tenc
Step1: Encoding 是没有最后输出的,这个模块仅仅在序列末输出上下文context v v v 然后作为 Decoding 第一个翻译结点的上一时刻的隐藏状态即可:
那么:
v = ∏ P ( v ∣ h T e n c , h T e n c − 1 , … , h 0 ) v = \prod P(v|h_{T_{enc}}, h_{T_{enc-1}},…,h_0) v=∏P(v∣hTenc,hTenc−1,…,h0)
然后上下文context v v v 被用于解码器的计算过程:
以解码器的第一个翻译结点为例:
h d e c 0 = t a n h ( W x d e c 0 + U v + b ) h_{dec0} = tanh(Wx_{dec0} + Uv + b) hdec0=tanh(Wxdec0+Uv+b)
y d e c 0 = s o f t m a x ( W h d e c 0 + b ) y_{dec0} = softmax(Wh_{dec0} + b) ydec0=softmax(Whdec0+b)
依次类推,之后的各个结点的求解过程其实就是:
y d e c = a r g m a x p ( y t ) = ∏ t = 1 T P ( y t ∣ y 1 , y 2 , … , y t − 1 , v ) y_{dec} = argmax p(y_t) = \prod_{t=1}^TP(y_t|y_1,y_2,…,y_{t-1},v) ydec=argmaxp(yt)=t=1∏TP(yt∣y1,y2,…,yt−1,v)
原始的Encoding — Decoding 会有两个局限性:
由于上述两个局限性,我们引入Attention机制,下面举一个例子
我爱自然语言处理 —> I love natural language processing
这是一个中英文翻译的神经机器翻译的例子:
这里会有这样的对应关系: 我 — I & 爱 — love & 自然 — natural & 语言 — language & 处理 — processing
Encoding : 我爱自然语言处理 Decoding : I love natural language processing
这样在解码模块Decoding时候,当翻译到 I
时候,我们应该更加关注我
,当翻译到natural
,我们应该更加关注自然
这个汉语词
这样来看 Attention机制 其实就是对不同的源进行不同的权重组合的一种机制,正如上面所说:
当翻译到 I
时候,我们应该更加关注我
,所以我的权重最高,其他词’爱’ ‘自然’ ‘语言’ '处理’会有较低的权重;
在计算attention时主要分为三步,第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;然后第二步一般是使用一个softmax函数对这些权重进行归一化;最后将权重和相应的键值value进行加权求和得到最后的attention value。目前在NLP研究中,key和value常常都是同一个,即key=value。
这里key和value进行运算是取解码器当前上一个状态(与当前解码单元相似度最高)和编码器每一个隐藏态进行相似度计算,如上图有4种计算方式 d o t g e n e r a l c o n c a t p r e c e p t r o n dot\;\;general\;\;concat\;\;preceptron dotgeneralconcatpreceptron
自下而上来看 Attention机制的作用过程:
h t = t a n h ( W x t + U h t − 1 + b ) h_t = tanh(Wx_t + Uh_{t-1} + b) ht=tanh(Wxt+Uht−1+b)
e i j = v a T t a n h ( W a S i − 1 + U a h t ) e_{ij} = v_a^Ttanh(W_aS_{i-1} + U_ah_t) eij=vaTtanh(WaSi−1+Uaht)
α i j = e x p ( e i j ) ∑ k = 1 L e x p ( e i k ) \alpha_{ij} = \frac{exp(e_{ij})}{\sum_{k=1}^L exp(e_{ik})} αij=∑k=1Lexp(eik)exp(eij)
c i = ∑ j = 1 L α i j h t c_i = \sum_{j=1}^L\alpha_{ij}h_t ci=j=1∑Lαijht
h d e c = g ( c i , x d e c , h d e c ) h_{dec} = g(c_i,x_{dec},h_{dec}) hdec=g(ci,xdec,hdec)
下面贴出包含 Attention value的 L S T M c e l l LSTM \;\; cell LSTMcell计算代码:
def dec_lstm_cell(i, o, state, c, dec_ix, dec_im, dec_ic, dec_ib, dec_fx, dec_fm, dec_fc, dec_fb, dec_cx, dec_cm, dec_cc, dec_cb, dec_ox, dec_om, dec_oc, dec_ob): ''' :param i: 解码器的输入x :param o: 解码器的隐藏状态 :param state: 解码器的单元状态 :param c: 解码器的上下文向量 C,也就是Attention value :param dec_ix: :param dec_im: :param dec_ic: :param dec_ib: :param dec_fx: :param dec_fm: :param dec_fc: :param dec_fb: :param dec_cx: :param dec_cm: :param dec_cc: :param dec_cb: :param dec_ox: :param dec_om: :param dec_oc: :param dec_ob: :return: ''' input_gate = tf.sigmoid(tf.matmul(i, dec_ix) + tf.matmul(o, dec_im) + tf.matmul(c, dec_ic) + dec_ib) forget_gate = tf.sigmoid(tf.matmul(i, dec_fx) + tf.matmul(o, dec_fm) + tf.matmul(c, dec_fc) + dec_fb) update = tf.matmul(i, dec_cx) + tf.matmul(o, dec_cm) + tf.matmul(c, dec_cc) + dec_cb state = forget_gate * state + input_gate * tf.tanh(update) output_gate = tf.sigmoid(tf.matmul(i, dec_ox) + tf.matmul(o, dec_om) + tf.matmul(c, dec_oc) + dec_ob) return output_gate * tf.tanh(state), state
Attention机制其实就是通过度量编码器第j个隐藏状态和先前解码器状态 S j − 1 S_{j-1} Sj−1对 S j S_j Sj的贡献大小,不断调节每个编码器权重的大小来实现学习的机制;从而更加关注与输入的元素相似的部分,而抑制其它无用的信息;
优点:
1.Attention机制通过调节权重,有效抑制无用信息,提高有用信息的关注度,可以提高模型的收益
2.由于 L S T M LSTM LSTM这类的RNN模型,随着文本长度或者说时间序列的增加,记忆能力会下降;而Attention机制可以在每次预测之前精准定位局部与整体的关系,可以并行的解决有效记忆的问题
3.Attention value(也就是上下文向量)的计算仅依赖于上一个时间序列的隐藏态,可以有效实现并行计算
劣势:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。