你可以点击菜单栏的“机器学习”,回顾本系列前几期的全部内容,并留言发表你的感悟与想法。
今天的内容是
【Seq2Seq】
场景描述
作为生物体,我们的视觉和听觉会不断地获得带有序列的声音和图像信号,并交由大脑理解;同时我们在说话、打字、开车等过程中,也在不断地输出序列的声音、文字、操作等信号。在互联网公司日常要处理的数据中,也有很多是以序列形式存在的,例如文本、语音、视频、点击流等等。因此如何更好的对序列进行建模,一向是研究的要点。
2013年来,随着深度学习的发展,Seq2Seq(sequence to sequence,序列到序列)框架在机器翻译领域被大量采用,随后迅速影响到了上述的各领域,应用在了各类序列数据上。
问题描述
1. Seq2Seq的框架是什么?有哪些优点?
2. Seq2Seq在解码时,有哪些常用的方法?
背景知识假设:基本的深度学习知识。
该类问题的被试者:对RNN有一定的使用经验,或在自然语言理解、序列建模等领域有一定的经历。
解答与分析
1. Seq2Seq的框架是什么?有哪些优点?可以结合具体的应用场景进行分析。
在Seq2Seq框架提出之前,深度神经网络在图像分类等问题上取得了非常好的效果。在其擅长解决的问题中,输入和输出通常都可以表示为固定长度的向量,如果长度稍有变化,会使用补零等操作。然而许多重要的问题,例如机器翻译、语音识别、自动对话等,表示成序列后,其长度事先并不知道。因此如何突破先前深度神经网络的局限,使其可以适应这些场景,成为了13年以来的研究热点,Seq2Seq框架应运而生[1][2]。
Seq2Seq框架的核心思想是:通过深度神经网络将一个作为输入的序列映射为一个作为输出的序列,这一过程由编码输入与解码输出两个环节构成。在经典的实现中,编码器和解码器分别由一个RNN构成,其选择有传统RNN、LSTM、GRU等,这两个RNN是共同训练的。
上图[3]是Seq2Seq应用于机器翻译时的例子,输入的序列是一个源语言的句子,有三个单词A、B、C,编码器依次读入A、B、C和结尾符<EOS>。 在解码的第一步,解码器读入编码器的最终状态,生成第一个目标语言的词W;第二步读入第一步的输出W,生成第二个词X;如此循环,直至输出结尾符<EOS>。输出的序列W、X、Y、Z就是翻译后目标语言的句子。
在文本摘要时,输入的序列是长句子或段落,输出的序列是摘要短句。在图像描述生成时,输入是图像经过视觉网络的特征,输出的序列是图像的描述短句。在语音识别时,输入的序列是音频信号,输出的序列是识别出的文本。这些场景中,编码器或解码器会依据场景有不同的设计,大家在面试时可以结合自己的项目经历展开探讨。
2. Seq2Seq在解码时,有哪些常用的方法?
Seq2Seq最核心的部分是其解码部分,大量的改进也是在解码环节衍生的,因此面试时也常常问到。Seq2Seq最基础的解码方法是贪心法,即选取一种度量标准后,每次都在当前状态下选择最佳的一个结果,直到结束。贪心法的计算代价低,适合作为基础实现(baseline),并与其他方法相比较。很显然贪心法获得的是一个局部最优解,由于实际问题的复杂性,该方法往往并不能取得最领先的效果。
Beam search是常见的改进算法,它是一种启发式的算法。该方法会保存beam size(后面简写为b)个当前的较佳选择,然后解码时每一步根据保存的选择进行下一步扩展和排序,接着选择前b个保存,循环进行,直到结束时选择最佳的一个作为解码的结果。下图为b为2的示例:
在该例中,当前已经有解码得到的第一个词的两个选项:I和My。然后,将I和My输入到解码器,得到一系列候选的序列诸如I decided、My decision、 I thought等。最后,从后续序列中选择最优的两个,作为前两个词的两个选项。很显然,如果b取1,那么会退化为前述的贪心法。随着b的增大,其搜索的空间增大,获得的效果会提高,但需要的计算量也会增大。在实际的应用如机器翻译、文本摘要中,b往往会选择一个适中的范围如8~12。
解码时使用堆叠的RNN、增加dropout机制、与编码器之间建立残差连接等,也是常见的改进措施。大家在研究和工作中,可以依据使用场景,多查阅文献和技术文档,有针对的选择和实践。
在解码环节,另一个重要的改进是注意力机制[4],它的引入使得解码时,每一步可以有针对地关注与当前有关的编码结果,从而减小了编码器输出表示的学习难度,也更容易学到长期的依赖关系。注意力机制会在下一节做更加深入的探讨,敬请期待。此外,解码时还可以采用记忆网络(memory network)[5]等,从外界获取知识。
参考文献:
[1] Auli, Michael, et al. "Joint Language and Translation Modeling with Recurrent Neural Networks." EMNLP. 2013.
[2] Cho, Kyunghyun, et al. "Learning phrase representations using RNN encoder-decoder for statistical machine translation." EMNLP. 2014.
[3] Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. "Sequence to sequence learning with neural networks." NIPS. 2014.
[4] Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. "Neural machine translation by jointly learning to align and translate." ICLR. 2015.
[5] Sukhbaatar, Sainbayar, Jason Weston, and Rob Fergus. "End-to-end memory networks." NIPS. 2015.
下一题预告
【注意力机制】
场景描述
来来来,集中注意力好好学习了!其实,不仅人的注意力会分散,神经网络的注意力也会分散。前面介绍的Seq2Seq模型将输入序列进行编码后得到中间表示,再通过解码生成输出序列,这就要求生成的中间表示要尽可能多的包含输入序列的信息。在实际使用中,会发现随着输入序列长度的增加,模型的性能发生了显著下降。同时,Seq2Seq模型的输出序列中,常常会丢失或者重复部分输入序列的信息。
为了解决这些问题,注意力机制(attention mechanism)被引入Seq2Seq模型中。注意力机制模仿人在生成序列时的行为,当解码序列的某个输出时,重点关注输入序列中和当前位置的输出相关的部分,缓解了Seq2Seq模型的上述问题。作为一种通用的思想,注意力机制在包括Seq2Seq在内的多种场景中都得到了应用。
问题描述
RNN的Seq2Seq模型中引入了注意力机制(attention mechanism)是为了解决什么问题?在机器翻译的Seq2Seq模型中使用注意力机制建模时,为什么选用了双向的RNN模型?