1. 概述
Seq2Seq是Sequence to Sequence的缩写,作用是将一个序列(sequence)映射成另一个序列(sequence)。文献[1]和文献[2]分别提出利用深度神经网络DNN实现端到端的Seq2Seq学习,将Seq2Seq应用于神经机器翻译(Neural Machine Translation,NMT),唯一不同的是在[1]中运用LSTM作为基础网络,而在[2]中则是运用的是RNN。在Seq2Seq结构中包含了两个模块,一个是encoder模块,另一个是decoder模块。这种一起包含encoder和decoder的结构与AutoEncoder网络相似,不同的是AutoEncoder模型是将输入经过encoder的网络生成中心的成果,并经过decoder对中心的成果还原,AutoEncoder的模型结构如下图所示:
而在Seq2Seq中,相同的是两者都包含了Encoder和Decoder,不同的是,在Seq2Seq中,输入与输出并不是相同的,而在AutoEncoder中,输入与输出是相同的。
2. Seq2Seq结构
2.1. Seq2Seq结构的概述
Seq2Seq结构开始是在神经机器翻译(Neural Machine Translation,NMT)范畴中提出,用于将一种言语(sequence)翻译成另一种言语(sequence)。因为在Seq2Seq结构中一起包含了encoder和decoder的结构,一般Seq2Seq又被称为Encoder-Decoder结构,Seq2Seq的结构如下图所示:
在Seq2Seq结构中,Encoder和Decoder分别是两个独立的神经网络模型,用于对不同的文本建模,一般对序列化文本建模的方法如LSTM[1],RNN[2]等。Encoder经过神经网络将原始的输入{x1,x2,⋯ ,xTx}\left \{ x_1,x_2,\cdots ,x_{T_x} \right \}转换成固定长度的中心向量{c1,c2,⋯ ,cl}\left \{ c_1,c_2,\cdots ,c_l \right \},Decoder将此中心向量作为输入,得到最终的输出{y1,y2,⋯ ,yTy}\left \{ y_1,y_2,\cdots ,y_{T_y} \right \}。
关于机器翻译NMT问题,从概率的角度分析,即关于给定输入x={x1,x2,⋯ ,xTx}\mathbf{x}=\left \{ x_1,x_2,\cdots ,x_{T_x} \right \},求方针输出y={y1,y2,⋯ ,yTy}\mathbf{y}=\left \{ y_1,y_2,\cdots ,y_{T_y} \right \},使得条件概率p(y∣x)p\left ( \mathbf{y}\mid \mathbf{x} \right )最大,即argmaxy p(y∣x)argmax_{\mathbf{y}}\;p\left ( \mathbf{y}\mid \mathbf{x} \right )。
2.1. Encoder
为了便于论述,这儿选取RNN[2](Recurrent Neural Network)作为Encoder和Decoder,一个典型的RNN结构如下图所示:
在RNN中,当时时间tt的隐含层状况hth_t是由上一时间t−1t-1的隐含层状况ht−1h_{t-1}和当时时间的输入xtx_t共同决定的,可由下式表明:
假设在Seq2Seq结构中,输入序列为x={x1,x2,⋯ ,xTx}\mathbf{x}=\left \{ x_1,x_2,\cdots ,x_{T_x} \right \},其间,xi∈RKxx_i\in \mathbb{R}^{K_x},输出序列为y={y1,y2,⋯ ,yTy}\mathbf{y}=\left \{ y_1,y_2,\cdots ,y_{T_y} \right \},其间,yi∈RKyy_i\in \mathbb{R}^{K_y}。在编码阶段,RNN经过学习到每个时间的隐含层状况后,最终得到一切隐含层状况序列:
详细进程可由下图表明:
经过对这些躲藏层的状况进行汇总,得到上图中固定长度的语义编码向量CC,如下式所示:
其间ff表明某种映射函数。一般取最后的隐含层状况hTxh_{T_x}作为语义编码向量CC,即
2.2. Decoder
在解码阶段,在当时时间tt,依据在编码阶段得到的语义向量cc和已经生成的输出序列y1,y2,⋯ ,yt−1y_1,y_2,\cdots ,y_{t-1}来猜测当时的输出的yty_t,其详细进程可由下图表明:
上述进程能够由下式表明:
简化可得:
其间ff表明某种映射函数。在RNN中,上式可简化为:
其间yt−1y_{t-1}表明t−1t-1时间的输出,st−1s_{t-1}表明Decoder中RNN在t−1t-1时间的神经元的隐含层的状况, cc代表的是Encoder网络生成的语义向量。
3. Attention
上述的基于Encoder-Decoder的Seq2Seq结构成功应用在NMT使命中,但是在Encoder和Decoder之间的固定长度的语义向量CC限制了Seq2Seq结构的性能。主要表现为固定长度的语义向量CC可能无法完整表明整个序列的信息,尤其是关于较长的句子。为了处理长句子表明的问题,Bahdanau等人[3]在2016年在Seq2Seq结构中引入了Attention机制,一起将上述的Encoder阶段中的RNN替换成双向的RNN(BiRNN),即bidirectional recurrent neural network。
3.1. 带有Attention机制的Encoder
在[3]中的Encoder中,采用的是BiRNN,详细进程如下图所示:
关于BiRNN,其包含了两个阶段的RNN进程,分别为正向RNN和反向RNN,其间,正向RNN生成的隐含层状况序列为:
反向RNN生成的隐含层状况序列为:
关于tt时间的隐含层状况hth_t一般是将正向和反向的隐含层状况concat在一起,即:
3.2. 带有Attention机制的Decoder
与上述的Decoder共同,这儿的Decoder也是一个标准的RNN,其进程可由下式表明:
注意到此处与上面不一样的是这儿的Encoder网络生成的语义向量不再是固定的,而是变化的。关于第ii个词的Decoder进程中,ctc_t为:
其间,ij\alpha _{ij}为归一化权重,其详细为:
其间,eije_{ij}表明的是第ii个输出前一个躲藏层状况si−1s_{i-1}与第jj个输入隐层向量hjh_j之间的相关性,能够经过一个MLP神经网络进行计算,即:
其详细进程可由下图表明:
这儿的Attention机制对一切的编码器隐含层状况hjh_j都分配了权重,表明的是输出与编码器中每个隐含层状况的相关关系。
4. 总结
与原始的Encoder-Decoder模型相比,参加Attention机制后最大的差异便是原始的Encoder将一切输入信息都编码进一个固定长度的向量之中。而参加Attention后,Encoder将输入编码成一个向量的序列,在Decoder的时分,每一步都会选择性的从向量序列中挑选一个调集进行进一步处理。这样,在发生每一个输出的时分,都能够做到充分利用输入序列携带的信息。
参考文献
[1] Cho K, Merrienboer B V, Gulcehre C, et al. Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation[J]. Computer Science, 2014.
[2] Sutskever I, Vinyals O, Le Q V. Sequence to sequence learning with neural networks[C]//Advances in neural information processing systems. 2014: 3104-3112.
[3] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
[4] 深度学习中的注意力机制