GRU门控循环单元【数学+图解】
文章目录
- 1、简介
- 2、门控机制
- 3、公式
- 4、图解GRU
- 4.1、重置门和更新门
- 4.2、候选隐藏状态和隐藏状态⭐
- 5、LSTM与GRU的对比
- 6、应用
- 7、训练技巧
🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹
1、简介
GRU:Gated Recurrent Unit
可以先复习一下之前的内容:
循环神经网络RNN:https://xzl-tech.blog.csdn.net/article/details/140940642
LSTM:https://xzl-tech.blog.csdn.net/article/details/140940759
概念:
GRU是另一种RNN变体,它简化了LSTM的结构,减少了计算复杂度,同时保持了处理长时依赖的能力。
结构:

GRU将LSTM的输入门和遗忘门合并为一个 更新门(Update Gate),并用一个 重置门(Reset Gate) 来决定隐藏状态如何结合新输入。
2、门控机制
- 门控机制的基本思想是使用“门”来控制信息在网络中的流动。
每个门都是通过神经网络层计算出来的权重向量,其值通常在0到1之间。- 不同的门在不同
时间步上控制信息的选择、遗忘和更新。 - 这些门是通过可学习的参数在训练过程中自动调整的。
3、公式
GRU在每个时间步的更新过程可以用以下公式描述:
- 更新门: z t = σ ( W z ⋅ [ h t − 1 , x t ] + b z ) z_t = \sigma(W_z \cdot [h_{t-1}, x_t]+b_z) zt=σ(Wz⋅[ht−1,xt]+bz)
- z t z_t zt 表示更新门的输出。
- 重置门: r t = σ ( W r ⋅ [ h t − 1 , x t ] + b r ) r_t = \sigma(W_r \cdot [h_{t-1}, x_t]+b_r) rt=σ(Wr⋅[ht−1,xt]+br)
- r t r_t rt 表示重置门的输出。
- 候选隐藏状态: h ~ t = tanh ( W h ⋅ [ r t ∗ h t − 1 , x t ] ) \tilde{h}_t = \tanh(W_h \cdot [r_t \ast h_{t-1}, x_t]) h~t=tanh(Wh⋅[rt∗ht−1,xt])
- h ~ t \tilde{h}_t h~t 表示候选的隐藏状态。
- 隐藏状态更新: h t = ( 1 − z t ) ∗ h t − 1 + z t ∗ h ~ t h_t = (1 - z_t) \ast h_{t-1} + z_t \ast \tilde{h}_t ht=(1−zt)∗ht−1+zt∗h~t
- h t h_t ht 是当前时间步的隐藏状态。
回顾一下
tanh函数: f ( x ) = 1 − e − 2 x 1 + e − 2 x f(x) = \frac{1 - e^{-2x}}{1 + e^{-2x}} f(x)=1+e−2x1−e−2x
4、图解GRU
4.1、重置门和更新门
GRU实际上影藏了记忆链条 h t h_t ht:

重置门的作用跟之前的遗忘门类似,都是充当橡皮擦的作用:

更新门则是筛选新的记忆:

4.2、候选隐藏状态和隐藏状态⭐
候选隐藏状态则是在前一时刻隐藏状态之上,擦除了一定记忆之后,融合进当前的输入 x t x_t xt,然后经过tanh函数临时记录下来:

更新门在当前的候选隐状态 h ~ t \tilde{h}_t h~t和前一时刻的候选隐状态 h ~ t − 1 \tilde{h}_{t-1} h~t−1之间取舍,组合之后输出当前的隐藏状态 h t h_t ht,然后网络进行更新,即融入了原有的"记忆"中,相当于阅后即焚:

经过这样不断的模块迭代,就是一直在短期记忆和长期记忆之间融合更新,而且存储的信息不需要像LSTM那么多,更加简单高效:

5、LSTM与GRU的对比
- 复杂性:
- LSTM更复杂,参数更多。
- GRU较为简洁,参数更少,训练速度更快。
- 性能:
- 两者在处理长时依赖性任务时表现都很优异,具体选择往往取决于数据集和计算资源。
- 在一些特定任务和数据集上,GRU可能比LSTM表现更好,尤其是在计算资源有限的情况下。
- 使用场景:
- 对于需要更强的长期记忆和复杂信息流动的任务,LSTM可能更合适。
- 对于实时性要求较高或者模型简单性要求较高的任务,GRU可能更具优势。
LSTM和GRU是两种非常成功的RNN变体,通过改进信息传递机制,有效解决了传统RNN在处理长序列数据时的局限性。
它们在自然语言处理、语音识别和时间序列预测等领域得到广泛应用。
6、应用
RNN及其变体广泛应用于以下领域:
- 自然语言处理:如语言模型、机器翻译和文本生成。
- 语音识别:将音频序列转换为文本。
- 时间序列预测:如股票价格预测和天气预报。
- 视频分析:从视频帧中提取时间信息。
7、训练技巧
- 梯度裁剪:限制梯度的大小以防止梯度爆炸。
- 正则化:使用Dropout等技术防止过拟合。
- 预训练和转移学习:利用大规模预训练模型微调特定任务。
RNN模型在序列数据处理中具有强大的表现力和适应能力,但也面临一些挑战。通过使用LSTM、GRU等改进模型,结合适当的训练技巧,能够有效地应用于各种实际问题。
相关文章:
GRU门控循环单元【数学+图解】
文章目录 1、简介2、门控机制3、公式4、图解GRU4.1、重置门和更新门4.2、候选隐藏状态和隐藏状态⭐ 5、LSTM与GRU的对比6、应用7、训练技巧 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习ÿ…...
代码随想录算法训练营第六十一天|Bellman_ford 队列优化算法(又名SPFA)、bellman_ford之判断负权回路
卡码网:94. 城市间货物运输 I from collections import dequeclass Edge:def __init__(self, to, val):self.to to # 链接的节点self.val val # 边的权重def main():n, m map(int, input().split())grid [list() for _ in range(n 1)] # 初始化邻接表for _…...
ArrayList集合源码解读(二)已完结
ArrayList集合源码解读(二) 前言 这篇文章已经把 ArrayList 更完了。各位还想看什么源码可以私信我~~ 上节课带大家阅读了 ArrayList 中的核心扩容代码,那么今天带大家阅读下List集合中我们常用的几个方法的底层实现逻辑! 常用…...
光伏逆变器、MPPT、PCS储能变流器、BMU、BCU、BDU和液冷机组
一、光伏逆变器 光伏逆变器(PV inverter或solar inverter)可以将光伏(PV)太阳能板产生的可变直流电压转换为市电频率交流电(AC)的逆变器,可以反馈回商用输电系统,或是供离网的电网使…...
OpenHarmony编译
简介:本文将会介绍编译OpendHarmony环境的搭建、编译、和刷机(rk3568) 使用场景:修改系统源码,需要验证修改的功能是否正确、编译镜像、编译SDK 1、VS Code,下载链接,用于修改源码 2、linux环…...
C语言典型例题30
《C程序设计教程(第四版)——谭浩强》 习题2.7 从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少个月能还清。 设d30000元,p6000元,r1%。对求得的月份取小数点后一位,对第二…...
springMVC @RestControllerAdvice注解使用方式
使用 RestControllerAdvice 的主要场景包括: 全局异常处理:处理所有控制器中抛出的未捕获异常。数据校验失败处理:处理 Bean Validation 校验失败的情况。自定义响应:统一定义响应格式或错误信息。 RestControllerAdvice 注解的…...
HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结
文章目录 1. 鸿蒙组件的基本概念2. 组件的使用3. 布局管理4. 组件间通信5. 组件化开发6. 性能优化7. 实战应用 鸿蒙应用开发岗位面试中关于鸿蒙组件的问题,通常会涉及多个关键知识点,这些知识点涵盖了鸿蒙组件的基本概念、使用、布局管理、性能优化、组件…...
Unity 在Editor下保存对Text组件的文本的修改
Unity 在Editor下保存对Text组件的文本的修改 /****************************************************文件:TimeStampForText.cs作者:lenovo邮箱: 日期:2024/8/8 1:9:21功能: *************************************************…...
mysql 日志爆满,删除日志文件,定时清理日志
今天发现网站不能正常访问,于是登陆服务器查找问题。 机智的我随手用命令:df -l 发现 硬盘爆满了,于是就知道问题所在了。 Filesystem 1K-blocks Used Available Use% Mounted on/dev/xvda1 20641404 16963004 16929876 10…...
MySQL学习(19):锁
1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,数据是供许多用户共享的资源,数据库必须保证数据并发访问的一致性、有效性,这就要靠锁来协调实现。 MySOL中的锁,分为以下三类: &am…...
【出海日记】关于 KD ,数据工具的陷阱
一个关键词:deepwoken builder 对标的竞品:deepwoken.co 初步分析: https://ahrefs.com/keyword-difficulty/?countryus 显示这个关键词优化难度极低 拿流量的是一个内页,单靠这个内页一个月有 22 万的流量 看起来很香&#x…...
【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本)
【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本) 一、相关名词介绍1.1 k8s简介1.2 Keepalived简介1.3 HAProxy简介二、本次实践介绍2.1 环境规划介绍2.2 本次实践简介三、所有节点基础环境配置3.1 主机配置工作3.2 关闭防火墙和seli…...
数据结构:链表经典算法OJ题
目录 前言 一、移除链表元素 二、反转链表 三、合并两个有序链表 四、链表的中间节点 五、环形链表的约瑟夫问题 前言 在了解了链表的相关知识后,我们还需要一些题目进行练习加深对链表这方面知识的理解,也可以用来检测链表这块学的的怎么样&#…...
【线性代数】【二】2.2 极大线性无关组与向量空间的基
文章目录 前言一、极大线性无关组二、向量空间的基三、向量维数与向量空间维数总结 前言 上一篇中我们介绍了向量空间的概念,并且学习了对任意给出的一组向量,如果构造一个向量空间。本文将更加细致的去分析张成一个向量空间,具有哪些性质。…...
OD C卷 - CPU算力分配
CPU算力分配 两组服务器A、B, 每组有多个算力不同的CPU;为了让两组服务器的算力和相等,允许两组各选出一个CPU进行一次交换;求两组中用于交换的CPU算力,从A中选出的算力尽可能小; 输入描述: 第一行 输入L…...
matlab实现红绿灯识别
在MATLAB中实现红绿灯识别通常涉及图像处理技术,包括颜色分割、形态学操作、边缘检测等步骤。下面我将给出一个基本的框架和示例代码,用于在MATLAB中识别图像中的红绿灯。 步骤 1: 读取图像 首先,你需要有一张包含红绿灯的图像。 img imr…...
base64 转 pdf
工作中经常会遇到一些签名的pdf传输,一般都是base64编码,这样就需要我们手动转为pdf, 其实根本不需要自己使用pdf的库写入,只是数据的简单写入就行 package mainimport ("encoding/base64""fmt""os&quo…...
vue2项目微信小程序的tabs切换效果
在 Vue 2 项目中实现类似微信小程序的 tabs 切换效果,可以通过 Vue 的 router-view 和 <router-link> 来完成。这里我们使用 Vue Router 来创建一个标签页切换的效果。 步骤 1: 安装 Vue Router 如果还没有安装 Vue Router,首先需要安装它&#…...
WPF动画的使用
前言 弹幕是什么?这里是使用动画将控件弹起来,通过C#提供的多样化动画类型,我们可以制做出丰富的界面效果。主要有基于时间的动画和基于属性的动画。 1、Animatable 一个提供动画支持的抽象类。 继承 Object DispatcherObject Depende…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
