rnn循环神经网络基本原理

rnn循环神经网络基本原理

  • 1.rnn循环神经网络基本概念
  • 2.rnn结构分类
    • 2.1. 按照输入和输出结构分类
      • 2.1.1 N to N - RNN
      • 2.1.2 N to 1 - RNN
      • 2.1.3 1 to N - RNN
      • 2.1.4 N to M - RNN
    • 2.2. 按照内部结构分类
  • 3.传统rnn原理
    • 3.1 最基本的RNN结构公式
    • 3.2 结构理解
    • 3.3 反向传播求参推导
  • 4. 传统RNN的优缺点

  • 学习视频链接
    • RNN循环神经网络
    • RNN、pytorch、人工智能、神经网络、深度学习

1.rnn循环神经网络基本概念

  • 循环神经网络的提出便是基于记忆模型的想法,期望网络能够记住前面出现的特征,并依据特征推断后面的结果,而且整体的网络结构不断循环,因为得名循环神经网络
  • RNN(Recurrent Neural Network)循环神经网络,一般以序列数据为输入,通过网络内部结构设计有效捕捉序列之前的关系特征,一般也是以序列形式进行输出
  • 循环神经网络的基本结构特别简单,就是将网络的输出保存在一 个记忆单元中,这个记忆单元和下一 次的输入一起进入神经网络中 。输入序列的顺序改变,会改变网络的输出结果
  • RNN的循环机制使模型隐层上一时间步产生的结果,能够作为下时间步输入的一部分(当下时间步的输入除了正常的输入外还包括上一步的隐层输出)对当下时间步的输出产生影响

2.rnn结构分类

2.1. 按照输入和输出结构分类

2.1.1 N to N - RNN

  • 是RNN最基础的结构形式
  • 输入和输出序列是等长的,由于这个限制,适用范围比较小
  • 实际应用
    • 生成长度相同的诗句
      rnn循环神经网络基本原理_第1张图片

2.1.2 N to 1 - RNN

  • 输入为一个序列,输出为一个单独的值
  • 实际应用
    • 文本分类
      rnn循环神经网络基本原理_第2张图片

2.1.3 1 to N - RNN

  • 输入不是一个序列,输出为一个序列- 实际应用
    • 图生文【一张图片生成一句话】
      rnn循环神经网络基本原理_第3张图片

2.1.4 N to M - RNN

  • 不限制输入与输出长度的RNN结构
  • 由编码器和解码器两部分组成,两者的内部结构都是某类RNN,也称为seq to seq 结构
  • 输入数据首先通过编码器最终输出一个隐含变量c【N to 1结构】,使用隐含变量c作用在解码器进行解码的每一步操作【1 to N结构】,以确保输入信息被有效利用
  • 实际应用
    • 机器翻译
    • 阅读理解
    • 文本摘要等
      rnn循环神经网络基本原理_第4张图片

2.2. 按照内部结构分类

  • 传统RNN
  • LSTM
  • Bi-LSTM
  • GRU
  • Bi-GRU

3.传统rnn原理

3.1 最基本的RNN结构公式

rnn循环神经网络基本原理_第5张图片

参数 含义
t 时刻,代表那一时刻的参数
h(t) 第t时刻记忆单元
h t − 1 h_{t-1} ht1 第t-1时刻记忆单元
f W f_{W} fW 非线性激活函数,tanh
W h h W_{hh} Whh 每一时刻h(t)记忆单元参数
W x h W_{xh} Wxh 每一时刻x的输入参数
y t y_{t} yt 第t时刻输出的结果
A 特征融合, t a n h ( W h h h t − 1 + W x h x t ) tanh(W_{hh}h_{t-1}+W_{xh}x_t) tanh(Whhht1+Wxhxt)
X t X_t Xt 索引为t的序列特征,第t个输入序列特征
h 0 h_0 h0 h t h_t ht是记忆单元,第0时刻前面没有数据,所以 h 0 h_0 h0是初始化全为0的矩阵

h t = f W ( h t − 1 , x t ) = t a n h ( W h h h t − 1 + W x h x t ) y t = W h y h t \begin{aligned} h_t&= f_W(h_{t-1},x_t)\\ &= tanh(W_{hh}h_{t-1}+W_{xh}x_t)\\ y_t&=W_{hy}h_t \end{aligned} htyt=fW(ht1,xt)=tanh(Whhht1+Wxhxt)=Whyht

3.2 结构理解

rnn循环神经网络基本原理_第6张图片

  • h t − 1 h_{t-1} ht1记忆单元,上一步时间的隐层输出信息,到最后一刻的 h t h_t ht包含所有信息
  • X t X_{t} Xt当前时间的输入输入的新信息,与 h t − 1 h_{t-1} ht1拼接【concatenate,行不变,列增加】,使用非线性激活函数tanh进行信息融合

3.3 反向传播求参推导

  • 相关公式
    h i = W h h h t − 1 + W x h x t h t = t a n h ( W h h h t − 1 + W x h x t ) y t = W y h h t L o s s t = 1 2 ( y − y t ) 2 \begin{aligned} h_i&= W_{hh}h_{t-1}+W_{xh}x_t\\ h_t&= tanh(W_{hh}h_{t-1}+W_{xh}x_t)\\ y_t&=W_{yh}h_t\\ Loss_t&=\frac{1}{2}(y-y_t)^2 \end{aligned} hihtytLosst=Whhht1+Wxhxt=tanh(Whhht1+Wxhxt)=Wyhht=21(yyt)2

  • 链式求导法则
    ∂ L o s s ( t ) ∂ W h h = ∂ L o s s ( t ) ∂ y t ∗ ∂ y ( t ) ∂ h t ∗ ∂ h ( t ) ∂ h i ∗ ∂ h ( i ) ∂ W h h \begin{aligned} \frac{\partial Loss_{(t)}}{\partial W_{hh}}&=\frac{\partial Loss_{(t)}}{\partial y_{t}}*\frac{\partial y_{(t)}}{\partial h_{t}}*\frac{\partial h_{(t)}}{\partial h_{i}}*\frac{\partial h_{(i)}}{\partial W_{hh}} \end{aligned} WhhLoss(t)=ytLoss(t)hty(t)hih(t)Whhh(i)

  • 求导结果
    ∂ L o s s ( t ) ∂ y t = 1 2 ( y t r u e − y t ) 2 ∂ y t ∂ y ( t ) ∂ h t = W y h h t ∂ h t = W y h ∂ h ( i ) ∂ W h h = W h h h t − 1 + W x h x t ∂ W h h = h t − 1 ∂ h t ∂ h i = ∂ h t ∂ h t − 1 ∗ ∂ h t − 1 ∂ h t − 2 ∗ ∂ h t − 2 ∂ h t − 3 . . . ∂ h i + 1 ∂ h i = ∏ k = i t − 1 ∂ h k + 1 ∂ h k ∂ h k + 1 ∂ h k = d i a g ( f ′ ( W h h h t − 1 + W x h x t ) ) W h h ∂ h k ∂ h 1 = ∏ k = i k d i a g ( f ′ ( W h h h t − 1 + W x h x t ) ) W h h \begin{aligned} \frac{\partial Loss_{(t)}}{\partial y_{t}}&=\frac{\frac{1}{2}(y_{true}-y_t)^2}{\partial y_{t}}\\ \frac{\partial y_{(t)}}{\partial h_{t}}&=\frac{W_{yh}h_t}{\partial h_{t}}\\&=W_{yh}\\ \frac{\partial h_{(i)}}{\partial W_{hh}}&=\frac{ W_{hh}h_{t-1}+W_{xh}x_t}{\partial W_{hh}}\\&=h_{t-1}\\ \frac{\partial h_{t}}{\partial h_{i}}&=\frac{\partial h_{t}}{\partial h_{t-1}}*\frac{\partial h_{t-1}}{\partial h_{t-2}}*\frac{\partial h_{t-2}}{\partial h_{t-3}}...\frac{\partial h_{i+1}}{\partial h_{i}}\\&=\prod_{k=i}^{t-1}\frac{\partial h_{k+1}}{\partial h_{k}}\\ \frac{\partial h_{k+1}}{\partial h_{k}}&=diag(f^{'}(W_{hh}h_{t-1}+W_{xh}x_t))W_{hh}\\ \frac{\partial h_{k}}{\partial h_{1}}&=\prod_{k=i}^{k}diag(f^{'}(W_{hh}h_{t-1}+W_{xh}x_t))W_{hh}\\ \end{aligned} ytLoss(t)hty(t)Whhh(i)hihthkhk+1h1hk=yt21(ytrueyt)2=htWyhht=Wyh=WhhWhhht1+Wxhxt=ht1=ht1htht2ht1ht3ht2...hihi+1=k=it1hkhk+1=diag(f(Whhht1+Wxhxt))Whh=k=ikdiag(f(Whhht1+Wxhxt))Whh
    ∂ h t ∂ h i = ∂ h t ∂ h t − 1 ∗ ∂ h t − 1 ∂ h t − 2 ∗ ∂ h t − 2 ∂ h t − 3 . . . ∂ h i + 1 ∂ h i = ∏ k = i t − 1 ∂ h k + 1 ∂ h k ∂ h k + 1 ∂ h k = d i a g ( f ′ ( W h h h t − 1 + W x h x t ) ) W h h ∂ h k ∂ h 1 = ∏ k = i k d i a g ( f ′ ( W h h h t − 1 + W x h x t ) ) W h h \begin{aligned} \frac{\partial h_{t}}{\partial h_{i}}&=\frac{\partial h_{t}}{\partial h_{t-1}}*\frac{\partial h_{t-1}}{\partial h_{t-2}}*\frac{\partial h_{t-2}}{\partial h_{t-3}}...\frac{\partial h_{i+1}}{\partial h_{i}}=\prod_{k=i}^{t-1}\frac{\partial h_{k+1}}{\partial h_{k}}\\ \frac{\partial h_{k+1}}{\partial h_{k}}&=diag(f^{'}(W_{hh}h_{t-1}+W_{xh}x_t))W_{hh}\\ \frac{\partial h_{k}}{\partial h_{1}}&=\prod_{k=i}^{k}diag(f^{'}(W_{hh}h_{t-1}+W_{xh}x_t))W_{hh}\\ \end{aligned} hihthkhk+1h1hk=ht1htht2ht1ht3ht2...hihi+1=k=it1hkhk+1=diag(f(Whhht1+Wxhxt))Whh=k=ikdiag(f(Whhht1+Wxhxt))Whh

  • 根据求导公式发现,再求 ∂ h k ∂ h 1 \frac{\partial h_{k}}{\partial h_{1}} h1hk的导数时,会出现累积计算,会出现 W h h W_{hh} Whh的k次方

    • 当k足够大时,且 W h h W_{hh} Whh大于1,最后结果无穷大,导致梯度爆炸,大幅度更新网络参数,可能参数溢出(出现NaN值)出现计算崩溃,导致模型不稳定。参数迭代调整过大,也会导致模型不稳定。
    • 当k足够大时,且 W h h W_{hh} Whh小于1,最后结果无穷小,出现梯度消失,使参数无法更新迭代,导致模型训练失败。

4. 传统RNN的优缺点

  • 优点
    • 内部结构简单,对计算资源要求低
    • 相比于RNN变体(LSTM和GRU模型)参数少很多
    • 在短序列任务上性能和效果表现优异
  • 缺点
    • 传统RNN在解决长序列之间的关联时,表现很差
      • 原因在于反向传播时,过长的序列导致梯度的计算异常,发生梯度消失或爆炸
    • 具有长时依赖问题,具有遗忘性

你可能感兴趣的:(#,深度学习,rnn,深度学习,神经网络,rnn原理,传统rnn原理推导)