目录
2 Encoder(编码阶段:将输入序列压缩成固定长度的语义向量)
方式一:将最后一个隐状态输出进行变换(不变换),作为语义向量(不推荐使用)
方式二:将所有的隐状态输出进行变换,作为语义向量(推荐使用)
方式一:将语义向量输入到Decoder中,作为初始隐状态的输入(不推荐使用)
方式二:将语义向量输入到Decoder中,参与Decoder各个解码过程(推荐使用)
二 Seq2Seq原理解析(以Encoder-Decoder with peek为例)
1 Basic Encoder-Decoder(不推荐使用)
2 Encoder-Decoder with feedback(不推荐使用)
3 Encoder-Decoder with peek(不推荐使用)
4 Encoder-Decoder with attention(推荐使用)
一 Seq2Seq结构解析
1 Seq2Seq是一种Encoder-Decoder结构
基本思想就是使用两个RNN,一个RNN作为Encoder,另一个RNN作为Decoder
2 Encoder(编码阶段:将输入序列压缩成固定长度的语义向量)
方式一:将最后一个隐状态输出进行变换(不变换),作为语义向量
(不推荐使用)
方式二:将所有的隐状态输出进行变换,作为语义向量
(推荐使用)
3 Decoder(解码阶段:将语义向量生成指定序列)
方式一:将语义向量输入到Decoder中,作为初始隐状态的输入(不推荐使用)
方式二:将语义向量输入到Decoder中,参与Decoder各个解码过程(推荐使用)
二 Seq2Seq原理解析(以Encoder-Decoder with peek为例)
1 Encoder阶段
- Encode依次读入整个序列
,依次得到
个隐状态
- 语义向量:
2 Decoder阶段
- 初始隐状态:
- 隐状态:
- 输出(softmax):
3 损失函数(极大似然估计)
第一步:单个样本目标函数
第二步:所有样本的目标函数
三 Seq2Seq常见架构
注意:四种架构对比图(迭代次数与准确率)
1 Basic Encoder-Decoder(不推荐使用)
- 将编码器的编码向量作为解码器的输入
2 Encoder-Decoder with feedback(不推荐使用)
- 将编码器的编码向量作为解码器的初始隐状态输入
- 将解码器上一轮输出作为下一轮隐状态的输入
3 Encoder-Decoder with peek(不推荐使用)
- 将编码器的编码向量作为解码器的输入
- 将上一轮解码器的输出作为下一轮解码器隐状态的输入
4 Encoder-Decoder with attention(推荐使用)
- 将编码器的所有隐状态输出使用attention机制,得到编码向量组
- 将编码器的编码向量作为解码器的输入
- 将上一轮解码器的输出作为下一轮解码器隐状态的输入
四 Attention机制
注意:以双向RNN为例
1 核心思想
- 在Decoder每一步都有一个输入语义向量
,即解码器每一步的语义向量都会重新计算
- 在Decoder第
步的输入,对Encoder的输入序列的所有隐状态
进行加权求和,得到一个语义向量
2 算法原理
第一步:计算能量函数
注意:
:表示解码器Decoder第
个位置的隐状态输出
:表示编码器Encoder第
个位置的隐状态输出
:表示权重矩阵
:表示权重向量
第二步:计算权值
注意:
:代表解码器Decoder的特征向量输入位置(
)
:代表编码器Encoder的隐状态向量输出位置(
)
第三步:计算语义向量