seq2seq编码器与解码器 --学习笔记

版权声明:转载请声明转自Juanlyjack https://blog.csdn.net/m0_38088359/article/details/83867386

0、网络图结构

在这里插入图片描述
从上图可以看出,编码是一个RNN网络,当然可以是一个单向RNN也可以是一个双向RNN,C是一个context为背景变量,将输入信息进行编码汇总得到一个信息。接着由这个背景变量作为解码的输入,加上隐藏变量和输出变量,得到结果在进行映射,依次得到序列的每个预测结果。
在这里插入图片描述
以上x1,x2,x3分别表示时间步输入,h1,h2等分别表示时间步隐藏状态,y1,y2分别表示时间步输出,s1,s2分别表示输出时间步的隐藏状态。
注意:
(1)h0一般初始化为零向量;
(2)y0一般初始化为< bos >表示序列的开始(因为y0无法观测到);
(3)s0一般初始化为:系数W乘以输入序列的第一个字的反向隐藏层信息,在经过双正切激活函数tanh。
补充:
这里的背景变量C可以取自于输入编码的最后一个输出,也可以取自于q(h1,h2,h3,…,hT),这个函数q根据需求改变。

1、编码器

编码器的作用是把一个不定长的输入序列变换成一个定长的背景变量 c,并在该背景变量中编码输入序列信息。常用的编码器是循环神经网络。

在这里插入图片描述

也可以使用双向循环神经网络构造编码器。这种情况下,编码器每个时间步的隐藏状态同时取决于该时间步之前和之后的子序列(包括当前时间步的输入),并编码了整个序列的信息。我们可以使用拼接的方式将每个时间步的隐藏状态拼接起来,也即concat。

2、解码器

在这里插入图片描述

学习自此处
致谢李沐大神!

猜你喜欢

转载自blog.csdn.net/m0_38088359/article/details/83867386