在之前的文章中,介绍了注意力机制,并概述了它的(不那么短的)历史。在这篇文章中,将解释Sequence-to-Sequence (Seq2Seq)架构,它带来了神经机器翻译的重大突破,并推动了Attention的发展。
动机-序列问题
深度神经网络是在各种任务中对非线性数据进行建模的高效工具。在图像分类、句子分类等多种任务中,深度神经网络已被证明是有效的。然而,传统的架构,如多层感知机,在建模序列,如信号和自然语言的效率较低。因此,Seq2Seq被提出来将序列输入映射到序列输出。Seq2Seq可以处理变长向量,将其映射为变长向量。
考虑Seq2Seq在机器翻译任务中的经典应用,即将法语句子(源)翻译成英语句子(目标)。请注意,源句子在单词(或字符)方面有不同的长度。第一句法语“On y va”(翻译成英语“Let’s go”)有三个单词,或者第二句、第三句和第四句分别有四个、五个和六个单词。此外,目标单词的数量也不是固定的——在本例中可以是2到6个单词。
机器翻译的另一个潜在问题是源(和目标)词常常相互依赖。例如,当我们看到句子开头的单词“I”时,我们更有可能把“am”看作第二个单词,而不是“are”。相反,如果我们看到“You”,我们很可能看到“are”而不是“am”。因此,模拟一个句子中不同单词(和字符)之间的时间依赖性是很重要的。
而且,源词和目标词之间有依赖性。换句话说,源词更有可能与目标词中的某些词相关。例如,第二个法语句子中的“Pour”与英语句子中的“For”更一致,“la”与“the”更一致,以此类推。Alignment modelswith attention 中有更深入的讨论。
Seq2Seq架构
因此,Seq2Seq被提出用来建模具有时间依赖性的变长源输入。Cho etal. (2014)是基于序列的神经机器翻译的前沿研究之一。它们的RNN编解码器体系结构由两个递归神经网络组成,即编码器和解码器。
编码器和解码器都由多个递归神经网络(RNN)神经元组成,如LSTM神经元和GRU神经元。神经元的数量因不同实例而异,以考虑到不同的源单词和目标单词的数量。每个RNN神经元都有多个输出,以建立输入向量之间的依赖关系。除了序列输出,LSTM神经元有隐藏的神经元状态,GRU神经元有隐藏的状态。有关RNN结构的更多信息,请参阅RNN tutorial with Pytorch.
编码器的最终隐藏状态,c,作为对编码器输入的总结,也就是源句子。换句话说,来自源句子的信息被提取到一个具有固定维数的向量中。在解码器中,c与之前的隐藏状态和目标词一起,作为RNN的输入。因此,第t层的隐藏状态计算如下(f是此处的RNN操作)。
每一步t的输出是在这一步用激活函数g预测某个单词的概率。
然后,对计算的概率进行softmaxed 处理,以找到预测概率最高的单词。
继Cho et al. (2014)之后,Sutskever et al. (2014) 提出了类似于LSTM的RNN编码器-解码器的深度学习体系结构。因此,我们称RNN模型的变体映射序列到带有编码器和解码器Seq2Seq的序列。
在这篇文章中,我介绍了Seq2Seq及其整体架构。在下一篇文章中,我将详细解释Seq2Seq架构,同时使用Pytorch实现它。感谢您的阅读。
欢迎关注我的微信订阅号,上面有更多深度学习的系列文章。
参考文献
-
Cho et al. (2014)
-
Sutskever et al. (2014)