参考文章:【神经网络】学习笔记十四——Seq2Seq模型_昔我往矣wood的博客-CSDN博客
一、seq2seq模型
seq2seq即序列到序列模型,为Encoder-Deconder结构,是将输入序列通过特定方法生成另一个序列的模型,输入和输出的序列可以不等长,解决了RNN中要求序列等长的问题。
二、模型结构
2.1 RNN结构
RNN中,每个单元接受两个数入,当前单元的输入信息Xt和上一层的隐藏层状态H(t-1)。RNN之所以比较适合用来做文本等序列数据的原因,正是因为隐藏层具有记忆性,可以根据不同的输入和输出来调整RNN的结构。
2.2 seq2seq模型
该模型由编码器、语义向量C和解码器三部分构成,C负责连接编码器和解码器。
此时的编码器和解码器都对应一个RNN,通常是LSTM和GRU。
Eecoder:负责将输入的语句压缩成指定长度的向量
Decoder:将语义向量C解码并输出语句。
三、Seq2Seq训练原理
普通的RNN训练,就是学习概率分布,然后预测,比如输入前t个时刻数据,预测输出t时刻的数据。一般在输出层(即预测结果层使用softmax函数),得到概率分布,概率最大的就为预测结果。
解码Decoder阶段,每次都要参照中间向量C(Attention会用到),C并不是只作为初始状态参与。
LSTM虽然具有记忆性,但是当Encoder输入的序列过长时,解码阶段的LSTM无法对过早输入的序列解码,因此提出了Attention。每次进行预测时,都会把所有输入序列的隐藏层信息都看一遍,决定当前预测的词和输入序列的哪些词最相关,从而提高预测的质量。
四、Attention机制的计算原理
Attention机制表示在解码Decoder阶段,有三个输入,S(i-1)为解码上一阶段的隐藏状态,yi为上一阶段的预测输入,Ci为本次预测所对应的编码阶段上下文向量。Si为本次解码的新状态,由三者的非线性函数得出。
S(i-1)为解码阶段上一个状态的隐藏状态和预测输出值,C(i)是编码每个时刻输出的加权平均和。
aij是输入i对应的状态h(j)的权重大小。
eij求解公式如下:
五、数据进行处理和训练的流程
以人机对话为例
1-假设存在一个拥有10000个对答的训练样本,我们统计得到1000个互异的字和每个字出现的次数。
2-我们将得到的这1000个字按照数量按照从多到少排序,得到一个0-999的字典表。
3-我们根据字典表,对这些问答句进行one-hot编码。
4-由于编码难度较大且0多,我们用Enbedding进行降维得到特征矩阵。
5-将特征矩阵作为输入,预测得到数量为1000的分类器,哪个概率最大,预测所得就是那个字。
?:向量C一般作为解码器的初始状态h0,也可以每一步都参与运算。