Attention in RNN

star2017 1年前 ⋅ 4541 阅读

在传统的 RNN Encoder-Decoder 模型中,在编码的过程中,将  时的状态  和  时刻的数据  输入到  时刻的 RNN 单元中,得到  时刻的状态  ,经过  个时间片后,得到长度等于隐节点数量的特征向量  。在解码的过程中,将特征向量  和上个时间片预测的输出  输入到 RNN 的单元中,得到该时刻的输出 ,经过  个时间片后得到输出结果。但在一些应用中,比如句子长度特别长的机器翻译场景中,传统的 RNN Encoder-Decoder 表现非常不理想。一个重要的原因是  时刻的输出可能更关心输入序列的某些部分是什么内容而和其它部分是什么关系并不大。例如在机器翻译中,当前时间片的输出可能仅更注重原句子的某几个单词而不是整个句子。

这篇论文率先提出了 Attention 的思想,通过 Attention 机制,模型可以同时学习原句子和目标句子的对齐关系和翻译关系。在编码过程中,将原句子编码成一组特征向量的一个集合,在翻译时,每个时间片会在该集合自行选择特征向量的一个子集用于产生输出结果。

详解

在这篇论文中,作者也是使用的 RNN Encoder-Decoder 结构。不同于传统的方式,在编码过程中,作者使用的是双向 RNN(bi-RNN),每个 RNN 单元使用的是 GRU。在解码过程中,使用的是基于 Attention 的 GRU 结构。算法结构如图 1:

图 1:Attention in RNN

Encoder

双向 RNN 含有正向和反向两个方向,对于含有  个时间片的源句子 ,正向的输入数据是  ,第  个时间片的隐节点  表示为

反向数据的输入序列是  ,第  个时间片的隐节点  表示为

其中  使用的是 GRU 的单元,详见上一篇论文的讲解。则第  个时间片的特征  是前向和后向两个特征向量拼接到一起。


  • 本文地址:Attention in RNN
  • 本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

1.2 Decoder

在解码的过程中,传统的 RNN Encoder-Decoder 的方式将整个句子的特征向量作为输入

Attention 模型是使用所有特征向量的加权和,通过对特征向量的权值的学习,我们可以使用对当前时间片最重要的特征向量的子集  ,即

其中  是  的加权和


其中  是输出序列第  个时间片的对齐模型,表示的是该时刻和输入数据每个时间片的相关程度。使用前一时刻的状态  和第  个输入数据  计算得到,在作者的实验中,  是使用的反正切  激活函数。

1.3 实验数据可视化

下图是通过可视化四组平行语料的  值得到的图,  值越大,表示两个数据相关性越强,图中的颜色越浅。

图 2:Attention 模型的可视化

参考文献

[1] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.


本文地址:https://www.6aiq.com/article/1558111401659
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: