论文阅读:Sequence to Sequence Learning with Neural Networks
一、Abstract
先提DNN的缺点:不能用于将序列映射到序列。
于是这篇论文以机器翻译为例,首先通过一个多层的LSTM将输入的语言序列(源序列)转化为特定维度的向量,然后另一个深层LSTM将此向量解码成相应的另一语言序列(目标序列)。
网上的一种理解:假设要将中文翻译成法语,那么首先将中文作为输入,编码成英语,然后再将英语解码成法语。
这种模型与基于短语的统计机器翻译(Static Machine Translation, SMT)相比,在BLUE算法(一种文本评估算法,核心思想就是机器翻译越接近专业人工翻译,质量就越好)的评估下有着更好的性能表现。
同时,作者发现,逆转输入序列能显著提升LSTM的性能表现,因为这样做能在源序列和目标序列之间引入许多短期依赖,使得优化更加容易。
二、Introduction
1、面临问题
深度神经网络(DNN)在处理各种难题,如图像识别上有着近乎完美的表现。这种模型之所以这么强大,是因为它能在有限的步骤内实现任意并行计算。只要有足够的训练数据集,它就能训练出神经网络的参数,从而DNN能产生很好的效果。
虽然DNN有着很强的能力,但只能将源序列和目标序列都编译为固定维度的向量。这是一个致命的缺陷,因为很多问题都无法提前预知被表示序列的长度,例如语音识别与机器翻译。
2、解决方案
解决问题的思路:先用一层LSTM读入源序列,逐步获得大量维度固定的表示向量,然后用另一层LSTM从向量中提取出目标序列。第二层LSTM本质上是一个语言模型。由于输入和输出之间存在相当大的时间延迟,所以使用LSTM对具有长期时间依赖性的数据进行训练是相当好的选择。
论文里介绍的其他人的一些工作,就不赘述了。
网络结构图如下所示:
从上图中我们可以简要了解LSTM模型的解决思路,先读入源序列"ABC",遇到结束符"“停止,然后输出目标序列"WXYZ”。其中有一个小策略,LSTM是反过来读取输入语句的,因为这样做可以引入更多的短期依赖,从而使优化更容易。
而且,LSTM训练很长的句子也没什么问题,因为作者颠倒了训练集和测试集中源序列的单词顺序。
LSTM另一个重要特质是它能够学会将不同长度的句子映射在一个维度固定的向量。(常规的翻译倾向于逐字逐句翻译,但LSTM倾向于理解句子的含义,因为同样的句子在不同的语境中的含义有所不同)。
三、模型
循环神经网络是一前馈神经网络对于序列的一种自然泛化。即给定一个输入序列x1,…xT,RNN可以用通过以下公式迭代得到输出序列y1,…,yT。
只要提前知道输入和输出序列长度相同,RNN就可以轻松地将序列映射到序列。但是,还不清楚如何应用到输入和输出序列长度不同且具有复杂和非单调关系的问题。
通用的序列学习方法最简单的策略是使用一个RNN将源序列映射到固定大小的向量,然后是用另一个RNN将该向量映射为目标序列。虽然它原则上是可行的,但由于向RNN提供了所有相关信息,产生了长期依赖性,因此RNN变得很难训练。不过,总所周知,LSTM可以学习具有长期时间依赖性的问题,因此LSTM在这种情况下可能会成功。
LSTM的目标是估计出条件概率
P ( y 1 , . . . , y T ′ ∣ x 1 , . . . , x T ) P(y1,...,yT′|x1,...,xT) P(y1,..