RNN-Encoder Decoder架构中引入的注意力机制
一.简介
注意力机制是在Encoder与Deconder架构中针对输出不同的序列(分词)在输入序列中所占权重一样,或者使用同一个C向量的不足中,引入了能够学习针对不同输出序列在不同输入序列所占的比重不同的一个机制,例如,“我喜欢足球”与“i like football”这个翻译中,‘i’这个词的翻译明显与“我”这个输入词对应,与后面“喜欢足球”的关系不大,因此,这种注意力机制能够明显的提升翻译效果。
以下内容是我在看完《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》这篇论文后做的一个简要总结。
二.详细介绍
论文中提出,注意力机制共同学习输入输出序列对应关系以及翻译比传统的Encoder-Deconder架构要好。尤其是在长句子的翻译上,由于Encoder-Decoder在长句子中表现不好,Cho et al. (2014b) 这篇论文显示了随着句子的增长,传统的Encoder-Decoder架构表现越来越糟,尤其是对文本中最长的句子。
注意力机制解决了这个问题,每次在翻译中生成一个单词,都会在输入中找到与之最相关的信息。该模型都会根据输入中相关的单词位置信息以及先前的目标词来预测当前目标词。
最为重要的是这种方式并不是将整个输入文本学习到一个简单的固定长度的向量中,而是编码整个输入到一个向量序列中,并从中选择适宜的向量子集解码翻译。
2.1 RNN Encoder-Decoder
文中提出了一个使用两个RNN网络的Encoder-Decoder架构,一个用于Encoder,一个用于Decoder。能够同时学到对应关系和进行翻译。
在Encoder中,编码器学习输入序列到向量C中,如下所示:
并且:
其中是在时间t的隐藏状态,C是从隐藏状态中生成的向量,f和q是非线性的函数,例如,Sutskever et al使用LSTM作为f,C为。
在已知输入文档向量C以及,Decoder被训练用来预测下一个词语,
其中,,在RNN中,每个条件模型被指定为:
其中g是一个非线性的,多层的函数,是RNN的隐藏层。
2.2 注意力机制
注意力机制本文主要是使用在了Encoder-Decoder架构中,其中使用双向RNN作为Encoder,而解码器Decoder主要搜索输入序列进行翻译。
2.2.1 Decoder
在新的架构中,文中新的条件概率为:
其中是RNN的在时间t的隐藏状态,可以计算为:
其中,,,。这个参数主要评价位置i的输入与位置j附近输入之间的匹配关系。这个参数主要依靠RNN隐藏状态以及输入序列第j个标签。计算公式为:
具体如下图所示:
文中将a作为前馈神经网络的参数与其它模型一起训练,与传统的机器翻译不同,the alignment并不认为是一个潜在的变量,alignment model直接计算soft alignment,允许反向传播损失函数的梯度,梯度能够同翻译模型一起训练,让作为目标词与输入词之间的一种分布,并与加权求和。
在隐藏状态决定和生成中反应了的重要性,换一句话说,解码器Decoder决定了关注哪些输入序列,在这种注意力机制下,一些信息会扩散到annotation中去,并在解码器Decoder中被选择。
2.2.2 Encoder-双向RNN
文中提到,传统的RNN读取有序的输入序列,然后在一些场景中,针对每一个单词,我们希望不仅能够学习到前面单词的信息,而且能够学习到后面单词的信息。
双向RNN是由前向以及后向的RNN组成,前向的RNN读取输入序列,然后计算前向的隐藏状态,而后向的RNN读取,然后学习后向的隐藏状态。因此,我们能够得到每个输入词语的隐藏状态。在这种方式下,将会表示前向以及后向的单词。由于RNN更倾向于表示最近的输入,所以,会更注重于附近的单词。
实验验证
其中30表示句子长度最长为30,50表示句子长度最长为50个单词。RNNsearch为文中提出的模型。