【论文笔记】Sequence to sequence Learning with Neural Networks


本文模型:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/models/rnn/translate


前一段时间在学习image caption,发现基本上所有的论文都引用了这篇论文以及另一篇。image caption的模型也很多都是sequence to sequence(encoder-decoder)的,当时看了很费解,这明明是一个机器翻译的模型呀,会有这么大的关系?于是决定来一探究竟,google了一下发现,我的妈呀,引用量上千了,看来这一定是一篇不得不读的神文了,于是决定好好学一学这篇文章提出了一些什么新的思想,encoder-decoder又究竟是怎么一回事儿呢。


注:本篇笔记不以论文顺序进行,只是提取出博主认为比较重要以及新颖和值得思考的点进行总结。


总体来说,本文提到首先将source sequence通过一个encode LSTM map成一个vector,然后再通过另一个decoder LSTM进行翻译得出output,这也恰恰是image caption里的思想呀(通过CNN将输入图像conv成一个vector或者feature map,然后再输入LSTM),原来大体是这样,接着看。


普通的部分本文将不再赘述,文中作者明确说到了自己模型的三大亮点:
(1)encoder LSTM来map inputs to a fixed vector, then feed the vector to another decoder LSTM to predict。
(2)用了更深、更复杂的LSTM。
(3)采用了reverse input的方法,发现效果倍儿棒。


下面逐条解释:


(1) 首先了对比了前人的工作,最早应用这种encoder来map输入的是使用的CNN,但这种方式忽略的sequence order,导致效果并不是很好;也有人用STM(统计机器翻译)进行学习的,但他们的工作重点是放在STM系统上,并不是神经网络的模型上。本文的这种encoder方法有什么优点呢?这种方法对主动语态和被动语态的包容性很好,也就是说,同一个句子的主被动语态通过encoder得到的向量是欧氏距离很近的,通过PCA降维到2维空间进行可视化如下图所示:


【论文笔记】Sequence to sequence Learning with Neural Networks_第1张图片


此外,结合(3),对long sentenceyou 很好的效果。

seq2seq的模型的总体架构如下图所示,前面的的LSTM没有输出,是只是起到了map的作用,之后encoder的hidden layer直接输入到后面的decoder中,再进行输出,进行翻译。

【论文笔记】Sequence to sequence Learning with Neural Networks_第2张图片

(2)相比原先的2layers, 200+cells的RNN模型,本文使用的是4layers,1000cells的模型,发现效果更好。(我猜由于训练数据的原因很有可能发生过拟合,但这个问题怎么解决文中没有提到)。


(3)什么是reverse input?分别输入a,b,c,d/d,c,b,a,通过encoder映射成一个fixed vector,但对应的decoder标签都是A,B,C,D,如此训练效果更好。文中解释道,这样的话a与A的距离会更近,对长序列的记忆效果更好,但d与D会更远,这个坏的影响却没那么大。综合来看解决了“minimal time lag”的问题,但具体为什么文中也没说清楚。


其他方面:
其他方面都比较普通,或者说很多论文中都有提到过,比如LSTM可以解决vanishing的问题但没法解决gradient exploding的问题,因此采取gradient crop。模型采用了SGD without momentum。实用的LSTM结构式Grave的《Generating sequence from RNN》中的LSTM结构,等等。


总体来说,这个模型还是采取了贪婪的算法,换句话说,后面的预测对前面的状态有极强的依赖,一旦前面的预测出现问题,后面的预测就不可靠了,这也是一个值得思考和改进的地方。

你可能感兴趣的:(RNN,NLP,papers)