chivee / grok

paper/idea sharing
MIT License
3 stars 0 forks source link

【Ilya Sutskever】Sequence to Sequence Learning with Neural Networks #13

Open xuehui1991 opened 9 years ago

xuehui1991 commented 9 years ago
  这篇paper泛泛地讲了如何用LSTM做序列到序列的学习。
  主要思想:
   1)用两套LSTM解决翻译中源语言句子和目标语言句子长度不一致的问题。
    具体如何训练,详见文章《Learning phrase representations  using RNN encoder-decoder for statistical machine translation》。

   2)翻译模型的建模和传统一致,解码方式采用beam search,取前1000个best。

   3) 强调了LSTM翻译长句也能取得较好的效果。跟他们输入的时候,打乱句子中词的顺序的trick可能有关系。
xuehui1991 commented 9 years ago

本文是Google的I. Sutskever等人提出的一种序列到序列的学习方法, 最直接的应用就是机器翻译. 最近几年, DNN在各个领域取得了突飞猛进的进展, 但是DNN不能将一个序列映射到另外一个序列, 因为序列的长度是不固定的. 本文就此提出了一种新的序列到序列的学习算法. 算法的思想是, 利用LSTM将输入序列映射成一个固定维度的向量表示. 然后使用另外一个LSTM从中抽取出输出序列. 选用LSTM的原因是其能够学到数据中的比较长时间的依赖关系. 如果输入和输出之间的alignment已知, 那么RNN可以很方便的将输入序列映射成输出序列. 但是如果输入序列和输出序列的长度不一致, 并且有复杂的关系时, 应用RNN就比较困难. 一种做法是使用RNN将输入序列映射到一个固定长度的向量, 然后使用另外一个RNN将该向量映射到输出序列[1]. 传统的RNN效果不那么好, 因为其不能学到比较长时间的依赖关系, 而LSTM[2]正好可以解决这个问题. 我们的目标是估计条件概率$P(y1,...,y{T'}|x_1,...,x_T)$. 其中$x1, x{T}$是输入序列, $y1, ..., y{T'}$是输出序列. LSTM的原理是根据LSTM的最后隐层状态来得到一个固定长度的向量$v$来表示输入序列$x_1, ..., x_T$, 然后计算序列$y1,...,y{T'}$的概率. 其初始的隐层状态设置为$v$, 如下式所示 $p(y1, ..., y{T'}|x_1, ..., xT)=\prod{t=1}^{T'}p(y_t|v, y1, ..., y{t-1})$ 需要注意的是, 对于每个句子, 我们都会在结尾添加一个结束单词$$来表示句子的结束, 这样在$Inference$时LSTM就知道该在什么时候停止预测下一个单词. 下图展示的是使用LSTM来计算序列$"A", "B", "C", ""$的表示向量$v$, 然后基于该向量来计算序列$"W", "X", "Y", "Z", ""$的概率. Screen Shot 2014-12-20 at 下午09.31.02 本文提出的算法的一些需要注意的点包括: 整个模型使用两个不同的LSTM, 输入序列和输出序列各一个. 使用的是四层深度LSTM. 翻转输入序列的顺序可以显著地提高效果. 作者的解释是, 这样会增加许多短时间依赖, 因为输入的前半部分和输出的前半部分的距离大大缩短了. 一些试验细节: 优化算法是SGD, 没有使用momentum, 初始的5轮的学习率是0.7, 之后每轮减少一半. 总共训练了7.5轮. batch的大小为128 虽然LSTM可以解决vanishing gradient问题, 但是其gradient可能会变得很大(exploding gradient), 解决方法是如果gradient的norm变得很大, 则进行normalization 最好使得每个batch里的句子的长度一致比较接近 [1]. Learning Phrase Representations using RNN Encoder-Decoder fir Statistical Machine Translation K. Cho, D. Bahdanau, F. Bougares, H. Schwenk, Y. Bengio 2014 [2]. Long short-termmemoryS.Hochreiterand, J.SchmidhuberNeural Computation, 1997. 29 total views, no views today

jasonwbw commented 9 years ago

这些实验细节是有share的code吗 我只知道 https://github.com/lisa-groundhog/GroundHog

如果gradient的norm变得很大进行normalization这个trick是在两种RNN常用,还是其他地方也常用呢。感觉如果是ada base的grad不会特别大呢?求证