循环神经网络(RNN)

循环神经网络(RNN)

注意!!!!!!!

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

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

RNN模型的作用

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

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

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

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

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

在这里插入图片描述
在这里插入图片描述

RNN输入与输出

  1. one to many
    在这里插入图片描述

  2. many to one
    在这里插入图片描述

  3. n to n

动画7
  1. n to m
动画8

RNN模型

简单RNN模型
  1. 符号定义:
  • H_{i-1} : 上期状态期
  • H{i} : 当期状态值
  • 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期,参与到下期的计算。

    • sigmoid函数: o t = s i g m o i d ( w o ∗ [ H t − 1 , x t ] ) o_t = sigmoid(w_o*[H_{t-1},x_t]) ot=sigmoid(wo[Ht1,xt])

    • ==本期输出值 H t H_t Ht==公式为: H t = o t ∗ t a n h ( c t ) H_t = o_t*tanh(c_t) Ht=ottanh(ct)

    • ==本期输出值 H t H_t Ht==为: H t = s i g m o i d ( w o ∗ [ H t − 1 , x t ] ) ∗ t a n h ( c t ) H_t = sigmoid(w_o*[H_{t-1},x_t])*tanh(c_t) Ht=sigmoid(wo[Ht1,xt])tanh(ct)

在这里插入图片描述

  1. 循环操作多次后,获得 y p r e d i c t y_predict ypredict

    • 公式为: Y p r e d i c t = H k ∗ w y Y_{predict} = H_k * w_y Ypredict=Hkwy

    (此图虽然是简单RNN模型,但LSTM的 Y p r e d i c t Y_{predict} Ypredict的由来也是一样的)

在这里插入图片描述

  1. 为什么说LSTM模型能够有效缓解梯度消失梯度爆炸的问题呢?
  • 核心部分

在这里插入图片描述

  • 该4部分相加之后的和要么>1,要么在0~1之间, Δ W ΔW ΔW由黄框前面和多个4部分相乘后获得。

在这里插入图片描述

  • Δ W ΔW ΔW一般由0到1区间的数和>1的数多个混合相乘,从图可以看出该系统会变得更加稳定,不容易出现梯度消失和梯度爆炸的问题。

在这里插入图片描述

GRU(Gated Recurrent Units)
  1. GRU模型

GRU模型在计算当期状态值 H t H_t Ht时,同时考虑历史信息部分新增信息部分

在这里插入图片描述

  1. 两扇门

    • 更新门(updata gate)
    • 重置门(reset gate)
    1. 更新门

    更新门确定着上期状态能进入当期的比例 z t z_t zt

    1. 重置门

    重置门决定了上期信息的遗忘比例 r t r_t rt

  2. GRU工作原理

    1. 来到更新门:上期状态能进入当期的比例 z t z_t zt s i g m o i d ( w u ∗ [ H t − 1 , x t ] ) sigmoid(w_u*[H_{t-1},x_t]) sigmoid(wu[Ht1,xt])而来,它与上期状态值 H t − 1 H_{t-1} Ht1 相乘,就得到了新状态中历史信息的部分

在这里插入图片描述

  1. 来到重置门:上期信息的遗忘比例 r t r_t rt s i g m o i d ( w u ∗ [ H t − 1 , x t ] ) sigmoid(w_u*[H_{t-1},x_t]) sigmoid(wu[Ht1,xt])而来,它与上期状态值 H t − 1 H_{t-1} Ht1相乘,并和当期输入信息部分相加,再通过tanH函数转化得到当前信息数据,当前信息数据和和对应比例== 1 − z 1-z 1z相乘,得到新状态中新增信息的部分

在这里插入图片描述

  1. 历史信息部分和新增信息部分相加,得到最终当期状态值。

在这里插入图片描述

参考视频

【数之道 09】揭开循环神经网络RNN模型的面纱_哔哩哔哩_bilibili

【循环神经网络】5分钟搞懂RNN,3D动画深入浅出_哔哩哔哩_bilibili

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值