Attention机制学习笔记
今日阅读了两篇attention机制的论文,两篇论文思想类似,但实现原理和方法不同,在此小记,以便后用。部分内容为本人个人理解,如果错误,欢迎指正,如果侵权,请联系删除。谢谢! 转载请标明出处,谢谢
思想
Attention机制的思想其实很简单,其寻常的RNN中,对于某一个位置的预测,需参考整个句子之前全部的信息,然而,对于过长的句子,容易丢失一些信息,即使是LSTM,虽然可以在一定程度上解决这个问题,但是对于更长的句子,便力有不足,所以attention机制的思想是,在预测某个位置时,只考虑句子中的部分内容,而不是全部的信息。
全局的attention机制
原理
RNN:
Encoder:
X—转化为—>C,
x为输入input,输入的是词向量的序列,
c is a vector generated from the sequence of thehidden states:Decoder:
g是非线性函数,St是RNN的hidden state,c 是context vector
RNNsearch
下面详细介绍一下这个论文中的原理,
Encoder:
使用的是BiRNN(可以用LSTM):
Forward:Backward:
Hidden state:
这里的hj叫做annotation,对于i位置的X来说Xi来说,它包含了前向的信息和反向的信息,随着训练,the annotation hj will be focused on the words around Xj,然后,annotation的一个序列,也就是hj,被decoder和aligment model用来得到context vector
Decoder:
这里的Ci是根据encoder的hj计算得到的:
Ci(我们也可以认为这个Ci是expected annotation)是hj的加权和,权重的计算方式如下:
具体的实现
输入:
输出:
Encoder:
前向:
反向:类似上面
然后:
Decoder:
窗口的Attention机制
它分为两种,global和local,这里提到global主要是为了和local作为比较,global其实和不使用attention机制没有什么区别(因为他们都把全部的信息考虑进去了)
Global
其过程如下图:
Local
Hard and softattention的一种平衡的实现
Hard and softattention:
下面来说一下local 的实现:
对于each target wordat time t 产生一个aligned position Pt,
Ct = [Pt-D,Pt+D],D是一个窗口的大小,凭借经验设置的。
Local-m:
Local-p:
其实现过程如下图:
Input-feeding Approach
其实现原理如下图: