作者(三位Google大佬)一开始提出DNN的缺点,DNN不能用于将序列映射到序列。此论文以机器翻译为例,核心模型是长短期记忆神经网络(LSTM),首先通过一个多层的LSTM将输入的语言序列(下文简称源序列)转化为特定维度的向量,然后另一个深层LSTM将此向量解码成相应的另一语言序列(下文简称目标序列)。我个人理解是,假设要将中文翻译成法语,那么首先将中文作为输入,编码成英语,然后再将英语解码成法语。这种模型与基于短语的统计机器翻译(Static Machine Translation, SMT)相比,在BLUE(Bilingual Evaluation Understudy)算法的评估下有着更好的性能表现。同时,作者发现,逆转输入序列能显著提升LSTM的性能表现,因为这样做能在源序列和目标序列之间引入许多短期依赖,使得优化更加容易
1 Introduction深度神经网络(Deep Nerual Networks)是一种性能强大的模型,在处理各种难题,如语音识别、图像识别上有着近乎完美的表现。这种模型之所以这么强大,是因为它能在有限的步骤内实现任意并行计算。只要有足够的训练数据集,它就能训练出神经网络的参数,从而DNN能产生很好的效果
虽然DNN有着很强的能力,但只能将源序列和目标序列都编译为固定维度的向量。这是一个致命的问题,因为很多问题都无法提前预知被表示序列的长度,例如语音识别与机器翻译
解决问题的思路就是先用一层LSTM读入源序列,逐步获得大量维度固定的表示向量,然后用另一层LSTM从向量中提取出目标序列。第二层LSTM本质上是一个语言模型。由于输入和输出之间存在相当大的时间延迟,所以使用LSTM对具有长期时间依赖性的数据进行训练是相当好的选择
第二段作者介绍了其他人的一些工作,这里就不多叙述了
从图中我们可以简要了解LSTM模型的解决思路,先读入源序列"ABC",遇到结束符""停止,然后输出目标序列"WXYZ"。其中有一个小策略,LSTM是反过来读取输入语句的,因为这样做可以引入更多的短期依赖,从而使优化更容易
上面的内容主要意思就是作者和其它各种模型进行了比较,比别人的效果都要好,有一些效果很接近
令人惊讶的是,LSTM训练很长的句子也没什么问题,因为作者颠倒了训练集和测试集中源序列的单词顺序
LSTM另一个重要特质是它能够学会将不同长度的句子映射在一个维度固定的向量。常规的翻译倾向于逐字逐句翻译,但LSTM倾向于理解句子的含义,因为同样的句子在不同的语境中的含义有所不同。一项定性评估支持了作者的理论,表明其模型知道单词顺序,并且相对于主动和被动语态均保持不变
2 The model循环神经网络是一前馈神经网络对于序列的一种自然泛化。即给定一个输入序列\(x_1,...,x_T\),RNN可以用通过以下公式迭代得到输出序列\(y_1,...,y_T\)
\[
\begin{align*}
h_t&=\sigma(W^{hx}x_t+W^{hh}h_{t-1})\\
y_t&=W^{yh}h_t
\end{align*}
\]
只要提前知道输入和输出序列长度相同,RNN就可以轻松地将序列映射到序列。但是,还不清楚如何应用到输入和输出序列长度不同且具有复杂和非单调关系的问题
通用的序列学习方法最简单的策略是使用一个RNN将源序列映射到固定大小的向量,然后是用另一个RNN将该向量映射为目标序列。虽然它原则上是可行的,但由于向RNN提供了所有相关信息,产生了长期依赖性,因此RNN变得很难训练。不过,总所周知,LSTM可以学习具有长期时间依赖性的问题,因此LSTM在这种情况下可能会成功
LSTM的目标是估计出条件概率\(P(y_1,...,y_{T'}|x_1,...,x_T)\),其中\((x_1,...,x_T)\)是输入序列,\((y_1,...,y_T)\)是相应的输出序列,并且长度\(T\)和\(T'\)允许不相同。LSTM首先获得最后一个隐藏状态给出的固定维度向量\(v\)。然v用一个标准的LSTM-LM公式计算\(y_1,...,y_T\)的概率。此方程的最终隐藏状态是\((x_1,...,x_T)\)表示的\(v\)
\[
P(y_1,...,y_T|x_1,...,x_T)=\prod_{t=1}^{T'}P(y_t|v,y_1,...,y_{t-1})
\]
在这个等式中,每个\(P(y_t|v,y_1,...,y_{t-1})\)分布用词汇表中所有单词的softmax表示。同时需要在每个句子的结尾用""来标识,这使得模型能够定义所有可能长度序列的分布
但作者的实际模型与以上描述有三个方面不同
使用了两个不同的LSTM,一个用于输入序列,一个用于输出序列。因为这样能在小刀几乎可以忽略的计算消耗下增加更多的模型参数
作者发现深层LSTM的表现显著优于浅层LSTM,所以最终选用四层LSTM