当前位置: 首页 > news >正文

GRU(门控循环单元)详解

1️⃣ GRU介绍

前面介绍的LSTM可以有效缓解RNN的梯度消失问题,但是其内部结构比较复杂,因此衍生出了更加简化的GRU。GRU把输入门遗忘门整合成一个更新门,并且合并了细胞状态和隐藏状态。于2014年被提出


2️⃣ 原理介绍

GRU的结构和最简单的RNN是一样的。当前输入为 x t x_t xt,上一个节点传递下来的隐层状态为 h t − 1 h_{t-1} ht1,这个隐层状态包含了之前节点的相关信息。根据 x t x_t xt h t − 1 h_{t-1} ht1,GRU会得到当前时间步的输出 y t y_t yt和传递给下一个节点的隐层状态 h t h_t ht,实际上 y t y_t yt就是等于 h t h_t ht
在这里插入图片描述
下面介绍详细的原理,下图展示了GRU的详细结构:
在这里插入图片描述

第一步,计算重置门,它的参数是 W r W_r Wr用于控制之前的记忆需要保留多少。该门的输入是前一个隐层状态 h t − 1 h_{t-1} ht1以及当前时间步的输入 x t x_t xt,输出为 r t r_t rt,在0到1之间,:
r t = σ ( W r ⋅ [ h t − 1 , x t ] ) r_{t}=\sigma\left(W_{r}\cdot[h_{t-1},x_{t}]\right) rt=σ(Wr[ht1,xt])其中, σ \sigma σ表示sigmoid激活函数

第二步,我们来看更新门,它的参数为 W z W_z Wz,它将LSTM中的输入门和遗忘门结合,决定当前时间步应该保留多少以前的记忆,多少新信息应该加入。该门的输入也是前一个隐层状态 h t − 1 h_{t-1} ht1以及当前时间步的输入 x t x_t xt,省略了偏置参数 b b b,输出为 z t ,在 0 到 1 之间, z_t,在0到1之间, zt,在01之间,公式具体表达为:
z t = σ ( W z ⋅ [ h t − 1 , x t ] ) z_{t}=\sigma\left(W_{z}\cdot[h_{t-1},x_{t}]\right) zt=σ(Wz[ht1,xt])其中, σ \sigma σ表示sigmoid激活函数

第三步,计算输入值,输入值由前一个隐层状态 h t − 1 h_{t-1} ht1,当前的 x t x_t xt以及重置门 r t r_t rt得到。 r t ∗ h t − 1 r_{t}*h_{t-1} rtht1可以理解为之前的记忆保留多少来学习新的内容 x t x_t xt h ~ t \tilde{h}_{t} h~t相当于利用之前的记忆对新的内容理解的部分
h ~ t = tanh ⁡ ( W ⋅ [ r t ∗ h t − 1 , x t ] ) \tilde{h}_{t}=\operatorname{tanh}\left(W\cdot[r_{t}*h_{t-1},x_{t}]\right) h~t=tanh(W[rtht1,xt])

第四步,计算当前输出 h t h_t ht,由两部分,一部分是之前信息的影响 h t − 1 h_{t-1} ht1,后一部分是当前输入的影响 h ~ t \tilde{h}_t h~t z t z_{t} zt是更新门的输出,取值在0-1之间。给 h t − 1 h_{t-1} ht1赋予 ( 1 − z t ) (1-z_t) (1zt)权重,给 h ~ t \tilde{h}_t h~t赋予 z t z_{t} zt权重:

h t = ( 1 − z t ) ∗ h t − 1 + z t ∗ h ~ t \begin{aligned}h_t=(1-z_t)*h_{t-1}+z_t*\tilde{h}_t\end{aligned} ht=(1zt)ht1+zth~t

我前面写的这篇文章中介绍了为什么RNN会有梯度消失和爆炸:点这里查看

主要原因是反向传播时,梯度中有这一部分:
∏ j = k + 1 3 ∂ s j ∂ s j − 1 = ∏ j = k + 1 3 t a n h ′ W \prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}}=\prod_{j=k+1}^3tanh^{'}W j=k+13sj1sj=j=k+13tanhW

那么GRU如何缓解RNN的梯度消失问题呢?

在GRU里,隐层的输出换了个符号,从 s s s变成 h h h了。因此我们来分析一下 ∂ h t ∂ h t − 1 \frac{\partial h_t}{\partial h_{t-1}} ht1ht。 我们可以得到:
∂ h t ∂ h t − 1 = ( 1 − z t ) + … \frac{\partial h_t}{\partial h_{t-1}}=(1-z_t)+\ldots ht1ht=(1zt)+

因此我们可以通过控制更新门的输出 z t z_t zt来控制梯度,以缓解梯度消失问题


3️⃣ 总结

  • GRU和LSTM对比:
    在这里插入图片描述

  • GRU通过控制更新门的输出 z t z_t zt来控制梯度,以缓解梯度消失问题


4️⃣ 参考

  • Pytorch_LSTM与GRU
  • 白话机器学习-从RNN、LSTM到GRU

http://www.lryc.cn/news/487553.html

相关文章:

  • 【代码随想录|回溯算法排列问题】
  • Azure Kubernetes Service (AKS)资源优化策略
  • R语言 | 宽数据变成一列,保留对应的行名和列名
  • RTSP播放器EasyPlayer.js播放器在webview环境下,PC和安卓能够正常播放,IOS环境下播放器会黑屏无法播放
  • .NET周刊【11月第3期 2024-11-17】
  • c语言数据22数组使用
  • 深入理解TensorFlow中的形状处理函数
  • MySQL数据库3——函数与约束
  • ⾃动化运维利器 Ansible-Jinja2
  • 博客文章怎么设计分类与标签
  • FastDDS之DataSharing
  • 计算机网络在线测试-概述
  • 【MySQL】数据库必考知识点:查询操作全面详解与深度解剖
  • 鲸鱼机器人和乐高机器人的比较
  • 游戏引擎学习第15天
  • 详解模版类pair
  • AI驱动的桌面笔记应用Reor
  • 搜维尔科技:使用sensglove触觉反馈手套进行虚拟拆装操作
  • 深入理解电子邮件安全:SPF、DKIM 和 DMARC 完全指南
  • 【有啥问啥】复习一下什么是NMS(非极大值抑制)?
  • Java-异步方法@Async+自定义分布式锁注解Redission
  • 基本定时器---内/外部时钟中断
  • 实现了两种不同的图像处理和物体检测方法
  • 如何在MindMaster思维导图中制作PPT课件?
  • ORIN NX 16G安装中文输入法
  • 【金融风控项目-07】:业务规则挖掘案例
  • 退款成功订阅消息点击后提示订单不存在
  • 实验一 顺序结构程序设计
  • Elasticsearch搜索流程及原理详解
  • 芯片之殇——“零日漏洞”(文后附高通64款存在漏洞的芯片型号)