Encoder-Decoder框架 2
相对于传统的规整的网络布局,Encoder Decoder 模型显得比较随性,不受约束,可能也正式这种自由,使得该模型在实际中发挥巨大的作用。模型结构突破了传统的固定大小输入问题的框架,将经典深度神经网络模型运用于翻译、文本自动摘要、智能问答等情景中,并且在实际应用中有着不俗的表现。
Encoder Decoder 模型的特点:
Encoder 将可变长度的输入序列编码成一个固定长度的向量;
Decoder 将固定长度的向量解码成一个可变长度的输出序列;
Encoder-Decoder 阶段的编码与解码的方式可以是 CNN、RNN、LSTM、GRU 等;
Encoder-Decoder结构
下面剖析Encoder-Decoder的网络结构,重点是讲解Encoder-Decoder框架,所以编码、解码都使用RNN为例。
那么一种可能的网络结构如下:
Encoder阶段使用的编码为RNN(LSTM);
向量C是Encoder编码阶段的最终隐藏层的状态Ct ,或是多个隐藏层状态Ct 的加权总和,作为Decoder解码阶段的初始状态;
W是Encoder的最终输出(最后一个隐藏层的输出Ht,作为Decoder的解码阶段初始输入。
Decoder阶段使用的解码为LSTM。
四 Encoder与Decoder流程
Encoder部分
Encoder负责将输入序列压缩成指定长度的向量,这个向量就可以看成是这个序列的语义,这个过程称为编码。
获取语义向量最简单的方式就是直接将最后一个输出的隐状态作为语义向量C。也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。
下图c代表生成的语义向量,q函数代表相应的变换(线性变换等)。
得到各个隐藏层的输出然后汇总,生成固定长度语义向量。
Decoder
Decoder部分就是根据Encoder部分输出的语义向量c来做解码工作。以翻译为例,就是生成相应的译文。
注意生成的序列是不定长的。而且上一时刻的输出通常要作为下一时刻的输入,如下图所示,预测 y2 时 y1 要作为输入。
还有一种做法是将c当做每一步的输入:
————————————————
原文链接:https://blog.csdn.net/qq_22054285/article/details/124516228