循环神经网络(RNN)

Posted Godwinwin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环神经网络(RNN)相关的知识,希望对你有一定的参考价值。

循环神经网络(RNN)

文章目录

注意!!!!!!!

博主第一次发布的文章有点生疏,写得不够好,没有考虑到一些图片的大小以及一些小细节,本次文章主要是当成博主自己的心得笔记,如果能帮助到大家那更好,大伙嘴下留情啊!!!!!!!

在文章的最后有参考视频,小伙伴们如果还有疑惑可以看下面的参考视频,或许能对你有帮助!!!

RNN模型的作用

当序列数据需要考虑其本身的顺序性,比如天气、股票价格、语音等事件序列数据,RNN模型适合训练序列数据

为什么要使用RNN而不是用MLP?

多层感知模型(Multilayer Perception Model)的短板在于:它输入端的神经元数量是预先设定的,每一个神经元都代表一个字或词,当在序列中增加输入信息的话(也就是加入新的字或词),模型就很难处理。

为什么难处理呢? 原因是每增加一个新的字或词,就相应的增加一个神经元,根据MLP结构,也就是全连接,会导致所有权重需要重新训练。

RNN模型则避免了这个问题,它在每期计算中会同时考虑当期输入值前期状态值,并利用相同的模型架构循环下去。


RNN输入与输出

  1. one to many

  2. many to one

  3. n to n

  1. n to m

RNN模型

简单RNN模型

  1. 符号定义:
  • H_i-1 : 上期状态期
  • Hi : 当期状态值
  • x_i : 输入值
  • tanh(w_x +w_hH_0 + b) : 激活函数

  1. BPTT(Backpropagation Through Time)

同样的,BPTT也会导致梯度消失和梯度爆炸,因为tanh取值范围为(-1,1),因此就需要LSTM模型和GRU模型

LSTM(Long Short-Term Memory)长短期记忆模型

  1. LSTM模型

  • 可以看出有3个sigmoid函数和2个tanh函数:sigmoid函数的取值范围在(0,1),而tanh函数的取值范围为(-1,1),因此sigmoid函数可以作为闸门用来控制信息流出的比例;而tanh函数能够控制信息的增减方向并把值锁在-1到1的区间内
  1. 三扇门

    • 遗忘门(forget gate)
    • 输入门(input gate)
    • 输出门(output gate)
    1. 遗忘门

  1. 输入门

  1. 输出门

  1. 相比简单RNN模型,LSTM增加了记忆状态C这一元素。

  1. SLTM原理

    1. 上期状态值 C t − 1 C_t-1 Ct1通过遗忘门过滤到本期的部分,加上本期新增的部分决定 C t C_t Ct

  1. 来到遗忘门:上期过滤的部分通过sigmoid函数的遗忘门来控制。

    • 遗忘门的值为0时,意味着上期记忆完全遗忘

    • 遗忘门的值为1时,上期值记忆完全保留

    • 其公式为: f t = s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) f_t = sigmoid(w_f*[H_t-1,x_t]) ft=sigmoid(wf[Ht1,xt])

  1. 来到输入门:sigmoid控制信息流出的比例;tanh控制信息流出的方向,上期状态值的sigmoid函数tanh函数两者相乘得到本期新增的记忆部分,它与前期记忆流入的部分相加,得到当期的记忆状态值
    • sigmoid公式为: i t = s i g m o i d ( w i ∗ [ H t − 1 , x t ] ) i_t = sigmoid(w_i*[H_t-1,x_t]) it=sigmoid(wi[Ht1,xt])
    • tanh公式为: u t = t a n h ( w u ∗ [ H t − 1 , x t ] ) u_t = tanh(w_u*[H_t-1,x_t]) ut=tanh(wu[Ht1,xt])
    • ==本期记忆状态值 C t C_t Ct==公式为: C t = C t − 1 ∗ f t + u t ∗ i t C_t = C_t-1*f_t + u_t*i_t Ct=Ct1ft+utit
    • 其中 f t f_t ft表示的是遗忘门的sigmoid函数: f t = s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) f_t = sigmoid(w_f*[H_t-1,x_t]) ft=sigmoid(wf[Ht1,xt])
    • ==本期记忆状态值 C t C_t Ct==公式为: C t = C t − 1 ∗ s i g m o i d ( w f ∗ [ H t − 1 , x t ] ) + t a n h ( w u ∗ [ H t − 1 , x t ] ) ∗ s i g m o i d ( w i ∗ [ H t − 1 , x t ] ) C_t = C_t-1*sigmoid(w_f*[H_t-1,x_t]) + tanh(w_u*[H_t-1,x_t])*sigmoid(w_i*[H_t-1,x_t]) Ct=Ct1sigmoid(wf[Ht1,xt])+tanh(wu[Ht1,xt])sigmoid(wi[Ht1,xt])

  1. 最后来到输出门:输出门的sigmoid函数和当期记忆值 C t C_t Ct的tanH值相乘,得到本期输出值 H t H_t Ht**, C t C_t Ct H t H_t Ht会循环流入至T+1期,参与到下期的计算。