Seq2Seq是一个Encoder-Deocder结构的模型,输入是一个序列,输出也是一个序列。
Encoder将一个可变长度的输入序列变为固定长度的向量,Decoder将这个固定长度的向量解码成可变长度的输出序列。
使用 x={x1,x2,...,xn} x = { x 1 , x 2 , . . . , x n } 表示输入语句, y={y1,y2,...,yn} y = { y 1 , y 2 , . . . , y n } 代表输出语句, yt y t 代表当前输出词。
所有的Seq2Seq模型都是以下目标函数,都是为了优化这个函数:
【注】
该条件概率模型存在问题:数值下溢问题。
原因:该式中每一项 p(yt|y1,y2,...,yt−1,x) p ( y t | y 1 , y 2 , . . . , y t − 1 , x ) 都小于1甚至于远远小于1,很多1乘起来,会得到很小很小的数字,造成数值下溢(numerical underflow)。
因此,在实际中一般是将其取log值,求其概率的对数和而不是概率的乘积,因此实际中一般用如下目标函数,目标是最大化该目标函数:
Seq2Seq的核心部分是其解码部分,大部分改进基于此:
Cho在2014年Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation提出该模型。
该模型包括Encoder和Decoder两个部分,图中每个圆圈是一个RNN Cell,可以是RNN,也可以是LSTM、GRU等。
【流程】
Encoder
Decoder
由结构图可以看出,t时刻的隐藏层状态 ht h t 由 ht−1,yt−1,c h t − 1 , y t − 1 , c 决定: ht=f(ht−1,yt−1,c) h t = f ( h t − 1 , y t − 1 , c ) ,其中 h0=tanh(V′c) h 0 = t a n h ( V ′ c )
最后的输出 yt y t 是由 ht,yt−1,c h t , y t − 1 , c 决定
目标
该模型由Sequence to Sequence Learning with Neural Networks提出。
该模型包括Encoder和Decoder两个部分,图中每个圆圈是一个RNN Cell,可以是RNN,也可以是LSTM、GRU等。本篇论文中Encoder、Decoder用的都是LSTM
【流程】
Encoder
同上个模型。如下图所示:
Decoder
初始状态:Encoder得到的向量表示即Encoder最后一个时间步长的隐藏层状态会作为Decoder的初始状态输入。通过激活函数与softmax层得到候选symbols,筛选出概率最大的symbol,作为下一时刻的输入。
t时刻的输出 yt y t :由 ht,yt−1 h t , y t − 1 决定,而没有 c c : p(yt)=f(ht,yt−1) p ( y t ) = f ( h t , y t − 1 ) 。即在Decoder中,每个时刻 t t 的输出 yt y t 会作为下一时刻 t+1 t + 1 的输入,直到Decoder在某个时刻预测出结束符号才停止。
目标函数:
最终多层模型采用下图说明:
【区别】
与上个模型的区别是Decoder部分
Attention机制由NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE提出。
【流程】
Encoder
Decoder
每一时刻 i i 的输出由三个要素决定:时刻 i i 的隐状态 si s i ,attention计算得到的context向量 ci c i ,上一时刻 i−1 i − 1 的输出 yi−1 y i − 1
其中 ci c i 由以下公式得到
ci c i 是输入序列全部隐状态的 h1,h2,...,hT h 1 , h 2 , . . . , h T 的加权和
αij α i j 代表权重参数,它并不是一个固定权重,而是由另一个神经网络训练得到
【总结】