神经网络之Seq2Seq模型(二)
1.seq2seq模型是什么?
seq2seq 是一个 Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
2.Encoder–Decoder 结构又是怎样的?
Encoder–Decoder 结构是由一个或多个 RNN (或LTSM或GRU)组成,Encoder对输入进行编码,然后将编码后的输出传到Decoder解码。结构如下图所示:
(1)Encoder(编码器)
每个时刻输入一个词,隐藏层状态根据公式ht=f(ht−1,xt)改变。其中**函数f可以是sigmod, tanh, ReLU, sotfplus, LSTM等;
读完序列的每一个词之后,会得到一个固定长度向量c=tanh(VhN)
(2)Decoder(解码器)
t时刻隐藏层就会根据下面的公式而改变
y(t)是由 y(t-1) ,h(t) ,c 决定的
3. Seq2Seq模型的流程
(1)接收输入/源句子,通过Embedding转成词向量;
(2)通过Encoder将输入编码为上下文向量,传给Decoder;
(3) 通过Decoder对编码过的向量解码生成预测输出/目标句子;
确定Encoder和Decoder每一层的数目、隐藏层和单元维度相同;
在forward方法中创建一个输出张量,它将存储所有的预测;
解码器的第一个输入是序列的开始(<sos>)令牌。由于我们的trg张量已经附加了<sos>标记。
(4) 将输入、先前隐藏状态和前一个单元状态传递给Decoder
(5)接收预测,来自Decoder下一个隐藏状态和下一个单元状态
(6)将预测放到预测张量中,返回预测结果