常见的两种注意力机制

为什么需要注意力机制

seq2seq模型已经在机器翻译、自然语言处理领域取得了很大的进步,基于贝叶斯条件概率公式,seq2seq由一个编码器和一个解码器构成,编码器将源序列A编码成一个固定长度的特征向量,这个向量作为输入被传送到解码器得到目标序列B。

常见的两种注意力机制_第1张图片

seq2seq虽然相比传统的n-gram统计模型更具非线性刻画能力,但其也有自身的缺点。主要缺点主要有两个:第一是长程记忆能力有限,如果源句子序列非常长,那么由于梯度更新中衰减较大,导致序列头部的参数无法得到有效更新;第二是序列转换过程中的无法对齐,从源序列A到目标序列B过程中,解码器的输入始终是一段固定的特征向量,并不是按照位置去A中检索。

解决第一个问题的方法有很多,例如常见的有使用双向循环神经网络来作为编码器,充分利用上下文信息。可是这种做法得到的仍然是一段固定的特征向量,我们希望的是解码器可以在不同时间点可以动态地得到它所想要的输入,进而可以产生理想的输出。于是,这个时候注意力机制就应运而生,它充分解决了长程记忆问题,而且又可以让解码器得到动态的输入信息。

最基本的注意力机制主要分为两种,一种是由Bahdanau提出的加法注意力机制,另外一种是由Luong提出的乘法注意力机制。

Bahdanau注意力机制

在运用seq2seq进行序列生成的时候,解码器的输出通常由上一时刻的输出和当前时刻的上下文共同决定,我们可以简写成如下形式,其中st是t时刻解码器的隐含状态。

这里最关键的一个量无疑就是上下文c了,c的确定将直接决定解码器每一时刻的输入特征。很容易想到的是,c一定与解码器的特征有关,为了追求编码器与解码器之间的需求平衡,我们还希望c对解码器不同位置的特征具有筛选功能,而具体怎么筛选,是应该由解码器的自身状态决定的。

既然是筛选,那么必定是对编码器的特征进行加权,加权因子一定满足总和为1。所以关键就是怎么求这个加权因子。Bahdanau指出,加权因子可以通过解码器的状态与编码器的状态进行匹配而得到。

具体来说,首先,我们需要对解码器当前的状态与编码器的所有位置的状态的匹配度进行打分,如下公式所示,这里的a可以是一个多层感知器(MLP),这个MLP无需人工干预,由网络自学习就可以了。

由于我们想得到的是归一化以后的权重因子,因此在得到e之后,我们需要对它进行归一化,从最大似然概率的角度出发,我们采用的是softmax归一化函数。

得到归一化因子alpha以后,直接将其与编码器的隐含状态相乘即可得到解码器在每一步的上下文特征信息。

Luong注意力机制

顺着Bahdanau的工作,Luong随后也提出了将注意力机制运用到神经机器翻译任务上。Luong总共提出了两种注意力机制,分别是global注意力机制和local注意力机制,先不说二者区别在哪,说一下它们的共同点。

如上图所示,与Bahdanau注意力机制不同的是,Luong提出的两种注意力机制中,上下文信息和解码器的隐含状态是拼接到一起组成一个向量,称之为含注意力的隐含状态,这个是global注意力机制和local注意力机制的共同之处。

那么不同点是什么呢?应该有读者已经猜到了,因为我上面没有提及这里的上下文信息是如何得到的,其实就是global注意力机制与local注意力机制在获取上下文信息的方式不同。

global注意力机制充分结合了编码器所有的隐含状态,将解码器的隐含状态与编码器的状态进行一一比较并评分,然后使用softmax归一化计算出权重因子。

常见的两种注意力机制_第2张图片

不过,与Bahdanau不同的是,这里根据编码器和解码器来计算score的方法Luong给出了三种,并且实验表明dot对于global注意力机制比较有效,而general对于local注意力机制比较有效。

常见的两种注意力机制_第3张图片

得到a以后,再将a与编码器的所有隐含状态相乘即可得到上下文信息c。global注意力机制如下图所示:

常见的两种注意力机制_第4张图片

由于global注意力机制是一种soft注意力机制,即每一时刻解码器需要对所有编码器都权衡一遍,这对于长序列来说十分不现实,计算成本也很高。为了克服这个困难,local注意力机制克服了global注意力机制的计算困难,解码器每次只用注意一小部分编码器的状态即可。

就local注意力机制而言,首先要做的就是寻找局部的中心位置。这里使用的算法称为predictive alignment,通过构建参数,让网络自学习并优化参数,最终找到正确的中心位置。如下所示,v和W均为模型的可学习参数,ht为解码器的隐含状态,由于sigmoid的输出值的区间为(0,1),所以中心位置pt的大小为(0,S),S为源序列的长度。

得到中心位置以后,我们再确定其周围位置点的权重因子。这里我们假设局部注意力机制满足高斯分布,即中心点的注意力权重计算方式同global注意力机制里面一样,但是周围点的注意力权重则以此为高斯分布展开。如下所示,高斯分布为D/2,其中D是一个经验值,可以认为与局部的长度有关。

与global注意力机制类似,得到a以后,再将a与编码器的所有隐含状态相乘即可得到上下文信息c,local注意力机制如下图所示:

常见的两种注意力机制_第5张图片

以上就是两种常见的注意力机制,下一期将介绍如何在TensorFlow中构建完整的基于注意力机制的seq2seq模型。


参考文献

  • Graves, Sequence to Sequence Learning with Neural Networks

  • Bahdanau,Neural Machine Translation by Jointly Learning to Align and Translate

  • Luong,Effective Approaches to Attention-based Neural Machine Translation

题图:Diwali Lamps


原文链接

你可能感兴趣的:(DL)