【论文笔记】Sequence to Sequence Learning with Neural Networks

Sequence to Sequence Learning with Neural Networks

        Abstract:DNN可以在有大量标记训练集下表现很好,但是无法处理用于序列映射到序列。在本文中,我们提出了一种端到端的序列训练方法,可以对序列结构做最小的假设。我们的方法使用了多层LSTM将输入序列映射成一个固定维度的向量,然后用另一个深度LSTM从向量中解码出目标序列。

1  Introduction

1)DNN功能强大:DNN在语音识别和视觉目标检测等困难领域都有很好的表现。DNN功能强大,可以执行任意数量的并行计算。只要有足够的标记训练集来指定网络参数,就可以用监督反向传播来训练大型DNN。因此,如果存在一个参数设置能使大型DNN网络能获得良好结果,那么监督反向传播将找到这些参数并解决这个问题

2)DNN'只能用于输入和输出可以用固定维度进行编码的问题:这是一个重要的限制,因为很多重要问题最好用一些未知长度的序列表示。比如语音识别和机器翻译是顺序问题。问答系统也类似。

3)本文使用一种LSTM的结构来解决一般的seq到seq的问题:一个LSTM用来读取输入序列,一次一个时间步,用来获得大的固定维度向量表示;另一个LSTM从向量中提取输出序列。第二个LSTM实质上是循环神经网络模型,只是它的输入序列是有条件的。

4)为解决一般的seq到seq的问题,已有很多相关的尝试:略

5)此结构可以很好地处理长句子:尽管之前有研究者也采用过相关结构,但是很难处理长句子。技巧在于LSTM反向读取输入句子,因为这样做会在数据中引入许多短期依赖关系,从而使优化问题更容易。因此,SDG可以学到不再受长句子困扰的LSTM。将原句中的单词颠倒过来的简单技巧是对这项工作最关键的科学贡献之一。

6)LSTM的有用属性是它学会了将可变长度的输入句子映射到固定向量表示

7)BLEU是一种用于评估从一种自然语言到另一种自然语言的机器翻译的质量的算法。

8)SMT,统计机器翻译,其翻译是根据统计模型生成的,其参数来源于双语文本语料库的分析。

2  Model

1)RNN是前馈神经网络对序列seq的自然推广。

       每当输入输出之间的映射提前知道时,RNN可以容易地将seq映射到seq。 然而,因为复杂和非单调关系的问题的输入和输出序列的长度不同,如何将RNN应用于这些问题还不清楚。

       一般的序列学习的简单策略是用RNN将输入映射为定长的向量,然后用另一个RNN将向量映射成目标序列【该方法1的4)中出现过】。虽然RNN原则上可以工作,但是由于序列的长时间依赖使得RNN很难训练成功。LSTM可以解决这个问题。

2)LSTM

        LSTM的目标函数是估计对输入序列\left \{ x_{1},x_{2},\cdot \cdot \cdot ,x_{T}\right \}来说,\left \{ y_{1},y_{2},\cdot \cdot \cdot ,y_{T^{'}}}\right \}是其对应的输出序列的条件概率P(y_{1},y_{2},\cdot \cdot \cdot ,y_{T^{'}}| x_{1},x_{2},\cdot \cdot \cdot ,x_{T}),这里长度T^{'}T是不同的。LSTM计算条件概率:首先获取由LSTM的最后一个隐藏状态给出来的输入序列\left \{ x_{1},x_{2},\cdot \cdot \cdot ,x_{T}\right \}的固定维度表示,然后标准的LSTM-LM公式来计算\left \{ y_{1},y_{2},\cdot \cdot \cdot ,y_{T^{'}}}\right \}的概率,该公式的初始隐藏状态被设为\left \{ x_{1},x_{2},\cdot \cdot \cdot ,x_{T}\right \}的向量表示。

                                  P(y_{1},y_{2},\cdot \cdot \cdot ,y_{T^{'}}| x_{1},x_{2},\cdot \cdot \cdot ,x_{T})=\prod_{t=1}^{T^{'}}P(y_{t}|v,y_{1},\cdot \cdot \cdot ,y_{t-1})

在等式中,每个P(y_{t}|v,y_{1},\cdot \cdot \cdot ,y_{t-1})分布用所有单词在词汇表中的softmax来表示。

       我们实际模型的三大创新点:1、我们使用了两个不同的LSTM,一个用输入序列,一个用于输出序列。因为这样做可以增加模型参数的数量,但计算代价可忽略不计,并且很自然的可以在多语言对上训练LSTM。(算是引用)2、我们发现深层LSTM明显优于浅层LSTM,所以我么选择了四层的LSTM。3、我们发现颠倒输入句子的单词顺序是非常有价值的。(算一个小技巧)

3  Eperiment

4)训练细节

采用四层的LSTM,每层1000个节点和1000维的单词嵌入。输入词汇量160,000,输出词汇量80,000。因此深度LSTM实际使用8000个实数来代表一个句子。我们发现深层的神经网络明显优于浅层,每增加一层的神经网络就会减少10%的困惑,这可能是由于它有更多的隐层状态。在输出我们使用了朴素的softmax,每次的输出有超过8000个单词。由此产生的LSTM有384M的参数,其中64M是单纯的循环链接(32M用于编码LSTM,32M用于解码LSTM)。

      a、初始化所有LSTM的参数,其均匀分布在-0.08和0.08之间

      b、使用无动量的随机梯度下降,用固定的学习率0.7。经过5个epoch之后,每个epoch之后学习率降低一半。

      c、使用batch是128

      d、每次training batch 之后,计算s=\left \|g \right \|_{2},g 是梯度除以128,如果s > 5, 令 g=\frac{5g}{s}

      e、不同句子的长度不同。确保所有小批量中的所有句子长度相同。

      f、用8个GPU同时进行处理。LSTM的每一层都在不同的GPU上运行。

6)experiment result

      a、LSTM模型在长句子上表现很好。

左图显示我们系统作为长句子函数的表现,对应的x轴表示按照句子长度排序的测试句子。从图中可以看出对于句子长度小于35的句子,LSTM模型的分数都比baseline要高。右图表示LSTM在字数越来越少的句子上的表现,x轴代表句子按照平均词频排序的测试句子。从图中可以看出对于词频排名在2500之前的词,LSTM模型要比baseline好。

      b、我们的模型能把一个词序列转换成一个固定维度的向量。下图证明表征物对词序敏感,对主被动语态是不敏感的。

对图中短语进行处理后得到的LSTM的隐藏状态的二维PCA投影。这些短语是按照词意聚类的,也从根本上说明了这些例子中的短语是一个词序函数,用词袋模型是很难捕捉的。 

猜你喜欢

转载自blog.csdn.net/qq_20135597/article/details/83382372