《Sequence to Sequence Learning with Neural Networks》论文阅读

读书笔记及总结

(一)提出的背景

虽然传统的DNN神经网络拟合效果很好,但是只能应用于输入和目标可以用固定维度向量进行合理编码的问题上,而无法在机器翻译上取得很好的效果。即DNN在序列-序列的问题上效果不好,因此提出了Sequence to Sequence。

(二)模型的架构

之前有研究使用RNN来构建sequence learning模型,但由于长距离依赖问题,用RNN模型难以训练,所以使用了一般的长短期记忆(LSTM)体系。其思想是使用一个LSTM读取输入序列,每次一个时间步长,以获得大的固定维向量表示,然后使用另一个LSTM从该向量提取输出序列。即Encoder-Decoder模型,Encoder负责将序列转换为固定维度的向量,Decoder负责将固定维度的向量再转换为序列。
在这里插入图片描述

(三)训练目标

模型的目标是估计条件概率在这里插入图片描述,其中在这里插入图片描述是输入序列 在这里插入图片描述是相应的输出序列,输入长度T和输出长度T’不一定相等。
预测的过程是:输入序列进入第一个LSTM结构得到一个固定维度的向量v,然后一个标准LSTM-LM(语言模型)用向量v作为初始隐藏状态来计算输出序列在这里插入图片描述的概率,输出序列总的条件概率计算如下
在这里插入图片描述

其中每个是词典中所有词在该时刻的概率。
实验的核心是在许多句子对中训练一个大的深层LSTM,通过最大化正确翻译的对数概率来训练它在这里插入图片描述,其中(T,S)是训练集句子对,S是源句,T是目标句。通过在这里插入图片描述来预测翻译结果。
为了确保模型能在所有可能的序列长度上定义分布,让标记作为句子的开始标志和结束标志。

(四)实际模型和上面描述的区别:

①输入和输出使用了两个不同的LSTM,一个用于输入序列,一个用于输出序列。因为这样做增加了模型的参数,以可以忽略不计的计算成本使得同时在多个语言对上训练LSTM变得自然。
②发现较深的LSTM在效果上明显优于较浅的LSTM,因此使用了4层LSTM。
③发现颠倒输入句子中的单词的顺序也能提高效果,比如正向的模型是使序列(a,b,c)映射为(α,β,γ),反向是让(c,b,a)映射为(α,β,γ);这样做能让a更接近α,b更接近β,c更接近γ,同时让SGD更容易在input和output之间建立联系。这种数据转换极大地提高了LSTM的性能。

(五)实验

(1)数据集
使用WMT’14英法数据集,在12000万个句子的子集上训练模型,这些句子由3.48亿个法语单词和3.04亿个英语单词组成。词汇表:源语言中使用了160000个最常用词,在目标语言中使用了80000个最常用词。每一个词汇表外的单词都被替换为一个特殊的“UNK”标记。
(2)训练模型
论文使用了4层 LSTM的deep LSTMs(发现每添加一层,困惑度能减少解决10%), 每层1000个节点(cell) 和1000维的词嵌入;输入使用了160000个使用频率最高的单词, 输出使用了80000个频率最高的单词, 所有不在这些词汇表中的单词都标记为 ‘UNK’; 在输出使用了朴素的softmax, 每次输出有8000个单词. 由此产生的LSTM有384M的参数, 其中64M是单纯的循环连接(32M用于编码, 32M用于解码).输出(解码) 使用了beam search decoder 方法 , 例如: 预测的时候, 假设词表大小为3 , 内容为(a,b,c), beam size 为2; decoder的过程如下:生成第一个词的时候, 选择概率最大的2个(beam size)词, 假设为 a, c ;生成第二个词的时候, 我们将上一步的结果分别与词表所有词进行组合, 得到6 个序列, aa, ab, ac, ca, cb, cc, 计算每个序列的得分,选择得分最高的2 个序列, 作为当前结果, 假设为aa,cb;不断重复上面过程, 知道遇到结束符或者达到最大长度为止, 最终输出得分最高的两个序列.
(3)完整的训练细节:
①初始化所有LSTM参数, 均匀分布在-0.08和 0.08 之间
②使用无动量的SGD, 固定学习率为0.7, 5个epochs之后, 每半个epoch 学习率减半, 总共训练7.5个epochs.
③batch_size 为128
④尽管LSTM不太会有梯度消失问题, 但是它还是会有梯度爆炸问题, 因此我们设置了一个阈值, 在梯度的范数超过阈值时对其进行缩放,从而对梯度的范数进行硬约束. 对于每个batch, 有,g是梯度除以 128(batch size),如果s>5, 就令.
⑤训练语句的长度不一致, 但是大多数为短句子,因此确保一个小批量中的所有句子长度大致相同, 速度提升了两倍.
论文里使用C++实现模型, 并利用8块GPU并行计算, LSTM的每一层都在不同的GPU上执行,并在计算完成后立即将其激活传递给下一个GPU(或层), 这里模型有4层, 因此占用4块GPU, 剩下4块GPU用来计算softmax. 训练花费了大概10天.
(4)实验结果对比
标准为 BLEU score (Bilingual Evaluation Uderstudy : 双语评估研究 )
①未使用 SMT system (Statistical Machine Translation ) 统计机器翻译系统:
在这里插入图片描述

同时使用神经网络和 SMT system:
在这里插入图片描述

② 对下图中短语输入模型 ,然后将隐藏状态进行二维PCA投影. 这些短语是按照词义聚类的.
在这里插入图片描述

上图左边的图表明模型的向量对主被动语态不太敏感(距离比较远), 右边的图表明模型对词序列比较敏感( 距离较近)
③ 对长句子以及不同词频的测试
在这里插入图片描述

左图表示模型在长句子上的表现, x轴代表测试句子长度, 由图中可以看出, 在长度小于35的句子上, LSTM模型的分数都比baseline要高 ;右图表示模型在不同词频上的表现, x轴代表 测试句子的 词平均出现频率排名。可以看到, 在词平均出现频率排名前2500的句子, LSTM表现要更好。

(六)总结:

①LSTM可以优于一个基于SMT的标准系统。如果有足够的训练数据,它应该可以很好地解决许多其他序列学习问题。
②颠倒源语句中单词获得的改善程度很大。找到一个具有最多短期依赖性的问题编码会使学习问题更加简单。
③LSTM能够正确翻译非常长的句子。我们认为由于记忆有限,LSTM在长句上会失败。但是在反向数据集上训练的LSTM翻译长句几乎没有困难。
④我们证明了一种简单、直接且相对未优化的方法可以优于成熟的SMT系统。
LSTM还学习对词序敏感、对主动语态和被动语态相对不变的敏感短语和句子表征。

心得与感受

Seq2Seq的优缺点:

优点:
①首次使用一种端到端的学习方法,解决了DNN无法用于序列-序列的问题。
②提出了Encoder-Decoder的模型框架,Encoder将输入序列映射为固定维度的向量,Decoder将固定维度的向量映射为序列。
③非常适用于机器翻译领域,取得了当时用大型神经网络来实现机器翻译的最佳结果。
④还有优化空间。加入Attention结构效果会更好。
缺点:
①时间复杂度过高,在时间方面不如Transformer模型。
②生成输出与输入文本之间长度匹配问题。
③需要大量数据集才能实现较高性能。
④推断速度慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值