注意力机制(Attention mechanism)运用在编解码器的框架内,通过在编码端加人Attention机制,对源数据序列进行加权变换;或者在解码端引入对目标数据进行加权变化,可以有效提高sequence-to-sequence模型在自然语言处理任务上的表现。
1、Attention
对于attention机制的理解可以联系到我们自身,当我们人在解决问题的时候,具体问题不一样那么我们需要关注的方面也不一样。下面我们举一个具体的例子来进行说明:
翻译句子 This will change my future. --> 这将会改变我的未来。
那么在翻译“我”的时候就应该把注意力放在“I”上,翻译“未来”的时候注意力则应该在“future”上……
2、为什么要加入Attention
在普通的encoder-decoder模型中,输入序列不论多长都会被编码成一个固定长度的向量表示,这样当输入序列很长时就很难保留全部的必要信息,使得解码效果变差,因此我们引入了Attention机制。Attention机制通过保留编码器对输入序列的中间输出结果,在解码时选择性地与这些中间输出结果进行关联,更好地利用了对应的输入信息。
3、具体的Attention模型
引入Attention机制后,decoder的具体公式如下:
其中对应decoder中i时刻的hidden state。
每次解码输出时对应不同的编码向量,由输入编码的中间结果决定,计算如下
其中a是一个前向神经网络,可以与encoder-decoder网络一起进行训练,α反映出每个输入向量对于y_i的重要性。
网络结构图如下所示: