Sequence to Sequence Learning with NN算法
《基于神经网络的序列到序列学习》原文google scholar下载。网络
@author: Ilya Sutskever (Google)and so on学习
1、总览google
DNNs在许多棘手的问题处理上取得了瞩目的成绩。文中提到用一个包含2层隐藏层神经网络给n个n位数字排序的问题。若是有好的学习策略,DNN可以在监督和反向传播算法下训练出很好的参数,解决许多计算上复杂的问题。一般,DNN解决的问题是,算法上容易的而计算上困难的。DNN就是解决这个问题,将计算上看似不易解的问题经过一个设计好的多层神经网络,并按照必定的策略轻松解决。编码
可是,DNN有一个明显的缺陷:DNN只能处理输入、输出向量维度是定长的情形。对于输入、输出可变长的状况,使用RNN-Recurrent Neural Network更易求解。spa
对于一个RNN,每个cell一般是使用LSTM。也有GRU替代,GRU精度上可能不如LSTM,但计算上更加简便,由于他是对LSTM的简化。翻译
这篇论文的模型相似于Encoder-Decoder的模型,Encoder和Decoder的部分采用两个不一样的RNN,之因此采用不一样的RNN是由于能够以不多的计算代价训练更多的参数。设计
具体的说,这个Sequence to Sequence的学习中,首先将可变长的Sequence用一个RNN提取出特征向量—定长的,这个特征向量取自飞一个RNN的最后一个LSTM单元。code
以后,把这个向量输入另外一个RNN(语言模型),如条件语言模型,使用beam search计算出几率最大的句子,获得输出。blog
本文的创新之处在于,源串做为第一个RNN的输入,其中的每个单词是逆向输入的。这样作获得了更高的BLEU分数。
虽然本文的模型没有超过当下最好的模型的得分,但其逆向输入的方法提供了新的思路。
2、模型
本文的模型以下:这是一个英语 –> 法语的翻译模型:
源串是CBA,获得输出WXYZ。
数据集:WMT’14 English to French dataset。
使用的词典是英文16万词,法语8万词。词向量已经训练好。未知单词采用UNK。句子结尾为EOS。
3、训练细节
- 使用的是4层LSTM单元,深层的LSTM表现的更好
- 每一层1000个LSTM,也就是说,循环1000次(由于大多数句子30词左右,其实这有点浪费)
- 初始化参数使用服从均匀分布U(-0.8,0.8)随机初始化
- 解码阶段输出层几率采用的是一个很大的softmax,这个占用了绝大多数的计算资源
- 词向量维度是1000维度的
- 学习过程当中,使用随机梯度降低,学习率初始0.7,迭代7.5次,前5次固定学习率是0.7,以后每半次迭代学习率减半一次
- 使用mini-batch,每一个batch是128个句子
- 为了不梯度消失和梯度爆炸,限制梯度大小。若是梯度g的二范数||g||大于5,就进行g = 5*g/||g|| 的转换。
- 为了解决上面提到的,LSTM横向1000次是浪费的,但咱们能够尽量让同一mini-batch里的句子长度几乎相同。这样是2倍加速效果的。
- 本文的实验采用8个GPU,其中4个用来处理LSTM的每一层,其他的处理softmax层。
4、实验结果
一方面实验直接对本文的模型以及其余经典模型求BLUE比较,而且对本模型也对不一样的超参数作了对比。
另外一方面,与统计的机器翻译模型一块儿使用,一般会比直接使用RNN得分更高。这样作的结果以下:
此外,实验发现,LSTM对长句子表现的更好。
实验还对针对不一样句子长度的BLUE得分作了分析:
对不一样句子的平均词频下的BLEU获得作了分析:
5、结论
本文得出的结论以下:
- 使用LSTM的RNN MT能够打败传统的基于统计的MT—>STM。
- 源句子反转输入对于模型提高的帮助很大。这个没有数学解释,但一个通俗的理解是:目标句子与源句子开头的短时联系更加紧密了,在一个就翻译的初期,目标句子开头翻译质量的提高,提升了总体翻译的质量。
6、其余
还有一些人研究其余的机制。
- 编码并不采用RNN,而是使用CNN,这样编码的向量/矩阵改变了语序的问题。
- 有些人致力于将RNN结合到传统的STM中去。
- 有一种注意力机制。这种机制考虑到Encoder可能并不能彻底提取源句子的全部信息,因此使用编码成向量+生成注意力向量 -> 在解码的每一步都线性组合出新的条件(源句子信息)。这样作的好处是在解码生成每个单词的过程当中,网络对源句子中不一样的单词更加感兴趣,这能够提升翻译质量。