深度学习--RNN架构(N:M)--Seq2Seq+Attention机制

目录

一 Seq2Seq结构解析

1 Seq2Seq是一种Encoder-Decoder结构

2 Encoder(编码阶段:将输入序列压缩成固定长度的语义向量)

方式一:将最后一个隐状态输出进行变换(不变换),作为语义向量(不推荐使用)

方式二:将所有的隐状态输出进行变换,作为语义向量(推荐使用)

3 Decoder(解码阶段:将语义向量生成指定序列)

方式一:将语义向量输入到Decoder中,作为初始隐状态的输入(不推荐使用)

方式二:将语义向量输入到Decoder中,参与Decoder各个解码过程(推荐使用)

二 Seq2Seq原理解析(以Encoder-Decoder with peek为例)

1 Encoder阶段

2 Decoder阶段

3 损失函数(极大似然估计)

三 Seq2Seq常见架构

1 Basic Encoder-Decoder(不推荐使用)

2 Encoder-Decoder with feedback(不推荐使用)

3 Encoder-Decoder with peek(不推荐使用)

4 Encoder-Decoder with attention(推荐使用)

四 Attention机制

1 核心思想

2 算法原理


一 Seq2Seq结构解析

1 Seq2Seq是一种Encoder-Decoder结构

基本思想就是使用两个RNN,一个RNN作为Encoder,另一个RNN作为Decoder

2 Encoder(编码阶段:将输入序列压缩成固定长度的语义向量)

方式一:将最后一个隐状态输出进行变换(不变换),作为语义向量c(不推荐使用)

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第1张图片

方式二:将所有的隐状态输出进行变换,作为语义向量c(推荐使用)

 深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第2张图片

3 Decoder(解码阶段:将语义向量生成指定序列)

方式一:将语义向量输入到Decoder中,作为初始隐状态的输入(不推荐使用)

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第3张图片

方式二:将语义向量输入到Decoder中,参与Decoder各个解码过程(推荐使用)

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第4张图片

二 Seq2Seq原理解析(以Encoder-Decoder with peek为例)

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第5张图片

1 Encoder阶段

  • Encode依次读入整个序列X_{1}=(x_{1},....,x_{T}),依次得到N个隐状态H=(h^{1},...,h^{T})
  • 语义向量:c=tanh(Vh^{<T>})

2 Decoder阶段

  • 初始隐状态:h_{0}=tanh(V^{'}c)
  • 隐状态:h_{t}=f(h_{t-1},y_{t-1},c),t\geq 1
  • 输出(softmax):g(h_{t},y_{t-1},c)=p(y_{t}|y_{1},...,y_{t-1},c)

3 损失函数(极大似然估计)

第一步:单个样本目标函数

L(\theta)=p_{\theta}(y_{1},y_{2},...,y_{T^{y}}|x_{1},x_{2},...,x_{T^{x}})=\prod_{t=1}^{T^{y}}p_{\theta}(y_{t}|y_{1},y_{2},...,y_{t-1},c) 

\Rightarrow l(\theta)=log\prod_{t=1}^{T^{y}}p_{\theta}(y_{t}|y_{1},y_{2},...,y_{t-1},c)=\sum_{t=1}^{T^{y}}log(p_{\theta}(y_{t}|y_{1},y_{2},...,y_{t-1},c))

\Rightarrow l(\theta)=\sum_{t=1}^{T^{y}}log(p_{\theta}(y_{t}|y_{1},y_{2},...,y_{t-1},c))

\Rightarrow l(\theta)=log(p(y^{(i)}|x^{(i)},\theta))

第二步:所有样本的目标函数

l(\theta)=\frac{1}{N}\sum_{i=1}^{N}log(p(y^{(i)}|x^{(i)},\theta))

三 Seq2Seq常见架构

注意:四种架构对比图(迭代次数与准确率)

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第6张图片

1 Basic Encoder-Decoder(不推荐使用)

  • 将编码器的编码向量作为解码器的输入

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第7张图片

2 Encoder-Decoder with feedback(不推荐使用)

  • 将编码器的编码向量作为解码器的初始隐状态输入
  • 将解码器上一轮输出作为下一轮隐状态的输入

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第8张图片

3 Encoder-Decoder with peek(不推荐使用)

  • 将编码器的编码向量作为解码器的输入
  • 将上一轮解码器的输出作为下一轮解码器隐状态的输入

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第9张图片

4 Encoder-Decoder with attention(推荐使用)

  • 将编码器的所有隐状态输出使用attention机制,得到编码向量组C=(c_{1},c_{2},...,c_{T^{y}})
  • 将编码器的编码向量作为解码器的输入
  • 将上一轮解码器的输出作为下一轮解码器隐状态的输入

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第10张图片

四 Attention机制

注意:以双向RNN为例

深度学习--RNN架构(N:M)--Seq2Seq+Attention机制_第11张图片

1 核心思想

  • 在Decoder每一步都有一个输入语义向量c_{i}(i=1,2,...,T^{y}),即解码器每一步的语义向量都会重新计算
  • 在Decoder第i步的输入,对Encoder的输入序列的所有隐状态h_{1},h_{2},...,h_{T^{x}}进行加权求和,得到一个语义向量c_{i}

2 算法原理

第一步:计算能量函数e_{ij}

e_{ij}=v_{i}tanh(W_{i}s_{i-1}+U_{i}h_{j})

\Rightarrow e_{ij}=FullConNN(tanh(W_{i}s_{i-1}+U_{i}h_{j}))

注意:

  • s_{i-1}:表示解码器Decoder第i-1个位置的隐状态输出
  • h_{j}:表示编码器Encoder第j个位置的隐状态输出
  • W_{i},U_{i}:表示权重矩阵
  • v_{i}:表示权重向量

第二步:计算权值a_{ij}

a_{ij}=\frac{exp(e_{ij})}{\sum_{j=1}^{T^{x}}exp(e_{ij})}=softmax(e_{ij})

注意:

  • i:代表解码器Decoder的特征向量输入位置(i=1,2,...,T^{y}
  • j:代表编码器Encoder的隐状态向量输出位置(j=1,2,...,T^{x}

第三步:计算语义向量c_{i}

c_{i}=\sum_{j=1}^{T^{x}}a_{ij}h_{j}

你可能感兴趣的:(rnn,深度学习)