文章中首先提到DNN,不能解决sequence2sequence的问题,因为输入和输出固定的,但是对于翻译等问题,序列的长度是不固定的,这篇文章主要是用了多层的LSTM,把输入映射到一个固定的维度,然后再用另外一个LSTM,从这固定的向量去还原抽取目标序列。这里测试场景是采用了英文到法文的翻译,采用BLEU来度量效果。
1. 模型示意图
- 输入是ABC, 输出是WXYZ
- 当输出的序列产生之后,就不再进行预测了
2. 模型目标
- x1,...,xT 表示输入 , y1,...,yt 表示输出, v是什么呢?v 就是 将输入通过LSTM得到的最后一个hidden state , 因为
最后一个hidden state 包含了整个sequence的信息.
- 需要增加一个sequence的结束符号 <EOS>
- 发现深度的LSTM 模型效果相比shallow的LSTM模型更好,所以用了4层的LSTM
- LSTM是逆向读取输入序列,逆向读取的好处,试验板块有一些解释
3. 试验
- 数据集
- 英 译 法 的数据集,共计1200万句子,包含3.48亿个法文单词,和3.04亿个英文单词
- 对于输入,除了最常用的16万个词之外,其他都定义为unk,对于输出,除了最常用的80000个词外,其他都定义为unk
- 训练的目标函数
- 逆向读取input
- 作者这么解释,当我们要把一个词翻译成另外一个词的时候,比如 a,b,c 翻译成 1,2,3的时候,对于目标1来说,a距离比较远,相关性也较低,但每个source 和目标词的平均距离是没有改变的
- 训练的细节
- 深度为4的LSTM,每层1000个单元
- 1000维的embedding,输入是160000词库,输出是80000个词库
- 发现深度的LSTM对perlexity减少近10%,可能是因为更多的隐层状态
- LSTM参数的初始化是参数服从[-0.08,0.08]的均匀分布中抽取
- 用SGD,学习率是0.7,在5个epoch之后,学习率减半,实际上训练只用了7.5个epoch
- LSTM不会遇到梯度消失的问题,但是会遇到梯度爆炸的问题,会把梯度限制在[10,25]范围内
- 设置句子长度是固定的
4.结论
- 反向读取效果比较好
- LSTM对于长句子准确率也高
refer:Sequence to Sequence Learning with Neural Networks Google团队的