常见注意⼒机制原理介绍与对⽐
1. 引⾔
⾃从2014年Seq2Seq提出以来,神经机器翻译取得了很多的进展,但是⼤部分模型都是基于encoder-decoder的结构,这就要求encoder对于输⼊序列的编码能⼒要⾜够强,才能确保得到的输⼊序列的上下⽂向量能够尽可能地保留输⼊序列的信息。⽽我们知道,随着句⼦的长度逐渐变长,上下⽂向量的表达能⼒其实是会逐渐下降的,因为它没法完全保留输⼊序列的⼤部分信息。因此,为了克服这个问题,使得encoder-decoder结构也能应付长序列,很多学者开始寻求各种解决⽅法,其中,主流的就是采⽤注意⼒机制,即在decoder 时不再只考虑encoder的最后⼀个时间步的隐藏状态,⽽是在decoder的每个时间步时,能够⾃动地从输⼊序列的所有时刻的隐藏状态列表中⾃动搜索与当前输出⽬标最相关的⼀些隐藏状态,然后将这些隐藏状态与decoder前⾯时刻的输出⼀起作为decoder当前时刻的输⼊,下⾯我们将介绍⼏种主流的注意⼒机制,并将它们进⾏对⽐。
Bahdanau Attention:
Luong Attention:
2. 常见的注意⼒机制
2.1 Bahdanau Attention
Bahdanau Attention是由Bahdanau等⼈在2015年提出来的⼀种注意⼒机制。其结构还是采⽤encoder-decoder形式,如图1所⽰。
图1 Bahdanau Attention模型结构
在encoder层,Bahdanau Attention采⽤的是BiRNN的结构,其中,RNN采⽤GRU单元,记输⼊序列和输出序列分别为:
其中,和分别表⽰输⼊和输出序列的词汇量⼤⼩,和分别表⽰输⼊和输出序列的长度。则对于BiRNN的前向过程,隐藏状态的计算公式如下:
其中,表⽰更新门,⽤于确定上⼀步的隐藏状态有多少信息要保留到下⼀步,表⽰遗忘门,⽤于遗忘上⼀步的隐藏状态的⼀些不重要的信息,表⽰元素乘积操作,表⽰输⼊序列的词向量矩阵,表⽰词向量的维度,为权重矩阵,
也是权重矩阵,表⽰隐藏层的维度,是sigmoid函数。经过前向过程后,将得到每个时间步的隐藏状态,记为
,同理,BiRNN的反向过程的计算逻辑也是⼀样的,这⾥不再赘述,记反向过程得到的每个时间步的隐藏状态为。Bahdanau Attention将各个时刻前向和后向的隐藏状态进⾏拼接作为每个时刻的输出,记拼接后的隐藏状态为
,则其计算公式如下:
这样⼀来,每个时间的隐藏状态不仅包括了该时刻的输⼊信息,也包括该时刻前⾯和后⾯的序列信息。
在decoder层,Bahdanau Attention计算每个时间步的隐藏状态如下:
其中,表⽰⽬标输出的词向量,
均为权重矩阵,分别对应词向量和隐藏层的维度,另外,对于初始隐藏状态,采⽤encoder中第⼀个时间步的反向过程的隐藏状态进⾏计算,其计算公式如下:
其中,。可以发现,其实decoder的计算过程与encoder的计算过程⾮常相似,只是多了⼀项输⼊,即,这⾥表⽰输⼊序列的上下⽂向量,但是与传统的encoder-decoder不⼀样的地⽅的这个上下⽂向量是随着⽽变化的,当时,则与传统的encoder-decoder⽅法⼀致。那么,对于Bahdanau Attention中的,其计算公式是这样的:
其中,表⽰输⼊序列的长度,表⽰encoder第j个时间步的隐藏状态,表⽰的权重,其计算公式如下:
其中,表⽰decoder前⼀个时间步的隐藏状态,
为权重矩阵,可以发现,Bahdanau Attention在decoder的每个时刻,会对encoder的所有时间步的隐藏状态进⾏加权平均作为当前时刻的上下⽂向量,这样⼀来,使得在decoder的每个时间步都能重点关注与该时间步最相关的⼀些输⼊信息,如图2所⽰,表⽰输⼊序列和输出序列的权重分布图,可以发现每个输出词汇都会重点关注与其最相关的输⼊词汇,从⽽提⾼decoder的准确率。
图2 权重热⼒图
最后,将decoder每个时间步的隐藏状态经过⼀个带有relu激活函数和softmax函数即可得到当前时刻⽬标输出的概率分布:
以上就是Bahdanau Attention的整个计算逻辑,该注意⼒机制克服了传统encoder-decoder在长序列表现差的缺点。
2.2 Luong Attention
Luong Attention也是在2015年由Luong提出来的⼀种注意⼒机制。Luong在论⽂中提出了两种类型的注意⼒机制:⼀种是全局注意⼒模型,即每次计算上下⽂向量时都考虑输⼊序列的所有隐藏状态;另⼀种是局部注意⼒模型,即每次计算上下⽂向量时只考虑输⼊序列隐藏状态中的⼀个⼦集。
Luong Attention的模型结构也是采⽤encoder-decoder的形式,只是在encoder和decoder中,均采⽤多层LSTM的形式,如图3所⽰。对于全局注意⼒模型和局部注意⼒模型,在计算上下⽂向量时,均使⽤encoder和decoder最顶层的LSTM的隐藏状态。
图3 Luong Attention模型结构
2.2.1 全局注意⼒模型
全局注意⼒模式在计算decoder的每个时间步的上下⽂向量时,均考虑encoder的所有隐藏状态,记每个时间步对应的权重向量为,其计算公式如下:
其中,表⽰当前decoder第个时间步的隐藏状态,表⽰encoder第个时间步的隐藏状态,这⾥与Bahda
nau Attention不同的是在计算权重时,采⽤的是decoder当前时刻的隐藏状态,⽽不是上⼀时刻的隐藏状态,即attention是在decoder中LSTM层之后的,⽽Bahdanau Attention的attention则是在decoder的LSTM层之前的,换句话说,全局注意⼒模型的计算路径是
,⽽Bahdanau的计算路径是
。另外,Luong Attention在计算权重时提供了三种计算⽅式:
其中,concat模式跟Bahdanau Attention的计算⽅式⼀致,⽽dot和general则直接采⽤矩阵乘积的形式。在计算完权重向量后,将其对encoder的隐藏状态进⾏加权平均得到此刻的上下⽂向量,然后Luong Attention将其与decoder此刻的隐藏状态进⾏拼接,并通过⼀个带有tanh的全连接层得到,其计算公式如下:
最后,将传⼊带有softmax的输出层即可得到此刻⽬标词汇的概率分布,其计算公式如下:
全局注意⼒模型的结构如图4所⽰,作者在实验时也发现,对于全局注意⼒模型,采⽤dot的权重计算⽅式效果要更好。
图4 全局注意⼒模型
2.2.2 局部注意⼒模型
然⽽,全局注意⼒模型由于在每次decoder时,均考虑encoder所有的隐藏状态,因此,其计算成本是⾮常昂贵的,特别是对于⼀些长句⼦或长篇⽂档,其计算就变得不切实际,因此,作者⼜提出了另⼀种注意⼒模式,即局部注意⼒模型,即每次decoder时不再考虑encoder的全部隐藏状态了,只考虑局部的隐藏状态。
在局部注意⼒模型中,在decoder的每个时间步,需要先确定输⼊序列中与该时刻对齐的⼀个位置,然后以该位置为中⼼,设定⼀个窗⼝⼤⼩,即,其中是⼀个整数,⽤来衡量窗⼝的⼤⼩,具体的取值需要凭经验设定,作者在论⽂中设定的是10,接着,在计算权重向量时,只考虑encoder中在该窗⼝内的隐藏状态,当窗⼝的范围超过输⼊序列的范围时,则对超出的部分直接舍弃。局部注意⼒模型的计算逻辑如图5所⽰。
图5 局部注意⼒模型
在确定位置时,作者也提出了两种对齐⽅式,⼀种是单调对齐,⼀种是预测对齐,分别定义如下:
单调对齐(local-m):即直接设定,该对齐⽅式假设输⼊序列与输出序列的按时间顺序对齐的,接着计算的⽅式与全局注意⼒模型相同。
预测对齐(local-p):预测对齐在每个时间步时会对进⾏预测,其计算公式如下:
其中,和均值权重矩阵,为输⼊序列的长度,这样⼀来,。另外,在计算时,作者对还采⽤了⼀个⾼斯分布进⾏修正,其计算公式如下:
decoder其中,与全局注意⼒模型的计算公式相同,表⽰输⼊序列的位置,。
计算完权重向量后,后⾯上下⽂向量、以及概率分布的计算都与全局注意⼒模型的计算⽅式相同,这⾥不再赘述。作者在实验中发现,局部注意⼒模型采⽤local-p的对齐⽅式往往效果更好,因为在真实
场景中,输⼊序列和输出序列往往的没有严格单调对齐的,⽐如在翻译任务中,往往两种语⾔在表述同样⼀种意思时,其语序是不⼀致的。另外,计算权重向量的⽅式采⽤general的⽅式效果⽐较好。
2.2.3 Input-feeding⽅法
在论⽂中,作者还提及了⼀个技巧——Input-feeding,即在decoder时,前⾯的词汇的对齐过程往往对后续词汇的对齐和预测是有帮助的,那么,如何将前⾯的对齐信息传递给后⾯的预测,作者提出了⼀个很简单的技巧,即把上⼀个时刻的与下⼀个时刻的输⼊进⾏拼接,⼀起作为下⼀个时刻的输⼊。作者在实验时发现这样⼀个技巧可以显著提⾼decoder的效果。但是这样的操作对encoder和decoder第⼀层的LSTM就有⼀个要求,假设顶层LSTM的隐藏单元数量都设置为,那么,采⽤Input-feeding后,就要求encoder和decoder第⼀层的LSTM的隐藏单元数量都为,因为拼接操作会使得输⼊向量的长度翻倍,如图6所⽰。
图6 Input-feeding⽅法
以上就是Luong Attention的原理啦,其实就是对Bahdanau Attention的⼀种推⼴,两者在思路⽅⾯还是很多相似的。
3. 总结
上⾯介绍了注意⼒机制中的常见形式,其实注意⼒机制还有很多种变式,不过感觉都差不多,最后⼤致做⼀个总结吧:
Bahdanau Attention的权重计算采⽤的是⼀种加法的形式,attention层在decoder的LSTM层之前完成,但是每次计算时都考虑encoder的全部隐藏状态,计算开销⽐较⼤。
Luong Attention则对权重的计算⽅式进⾏了推⼴,提供了三种计算⽅式,并且在计算上下⽂向量时提供了全局和局部两种模式,特别是局部注意⼒模式,在计算速度上要快得多,更加适合长句⼦或长⽂档。另外,其attention层是在decoder的LSTM层之后完成。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论