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