GRU 和 LSTM 公式推导与矩阵变换过程图解
GRU 和 LSTM 公式推导与矩阵变换过程图解
- GRU
- LSTM
本文的前置篇链接: 单向/双向,单层/多层RNN输入输出维度问题一次性解决
GRU
GRU(Gate Recurrent Unit)是循环神经网络(RNN)的一种,可以解决RNN中不能长期记忆和反向传播中的梯度等问题,与LSTM的作用类似,不过比LSTM简单,容易进行训练。
GRU的输入输出结构与普通的RNN是一样的:

GRU 内部结构有两个核心的门控状态,分别为r控制重置的门控(reset gate) , z控制更新的门控(update gate) ,这两个门控状态值通过上一时刻传递过来的 h t − 1 h_{t-1} ht−1和当前节点输入 x t x_{t} xt结合sigmoid得出,具体公式如下:

下面我们更加细致来看一下两个门控状态值计算过程中的矩阵维度变换:


得到门控信号后,我们首先使用重置门r来得到重置后的 h t − 1 ′ = h t − 1 ⊙ r {h_{t-1}}' =h_{t-1}\odot r ht−1′=ht−1⊙r :

符号 ⊙ 通常表示 Hadamard 乘积(也称为元素-wise 乘积或 Schur 乘积)。Hadamard 乘积是两个矩阵的元素-wise 乘积,即两个矩阵的对应元素相乘,
图中用*代替Hadamard 乘积,用x代替矩阵乘法运算。
再将 h t − 1 ′ {h_{t-1}}' ht−1′与输入 x t x_{t} xt进行拼接,再通过一个tanh激活函数对数据进行非线性变换,得到 h ′ {h}' h′, 具体计算过程如下图所示

更新记忆阶段,我们同时进行了遗忘记忆两个步骤。我们使用了先前得到的更新门控z,更新表达式如下:
h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h_{t} = z\odot h_{t-1} + (1-z) \odot {h}' ht=z⊙ht−1+(1−z)⊙h′

门控信号z的范围为0~1。门控信号越接近1,代表”记忆“下来的数据越多;而越接近0则代表”遗忘“的越多。
GRU很聪明的一点就在于,我们使用了同一个门控z就同时可以进行遗忘和选择记忆(LSTM则要使用多个门控)。
- z ⊙ h t − 1 z\odot h_{t-1} z⊙ht−1 表示对原本隐藏状态的选择性遗忘,这里的 z z z可以想象成遗忘门,忘记 h t − 1 h_{t-1} ht−1中一些不重要的信息。
- ( 1 − z ) ⊙ h ′ (1-z)\odot {h}' (1−z)⊙h′ 表示对包含当前节点信息的 h ′ {h}' h′进行选择性记忆,这里的 ( 1 − z ) (1-z) (1−z)同理会忘记 h ′ {h}' h′中一些不重要的信息,或者看成是对 h ′ {h}' h′中某些重要信息的筛选。
- h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h_{t} = z\odot h_{t-1} + (1-z) \odot {h}' ht=z⊙ht−1+(1−z)⊙h′ 总的来看就是忘记传递下来的 h t − 1 h_{t-1} ht−1中的某些不重要信息,并加入当前节点输入信息中某些重要部分。
更新门 与 重置门 总结:
- 重置门的作用是决定前一时间步的隐藏状态在多大程度上被忽略。当重置门的输出接近0时,网络倾向于“忘记”前一时间步的信息,仅依赖于当前输入;而当输出接近1时,前一时间步的信息将被更多地保留。
- 更新门的作用是决定当前时间步的隐藏状态需要保留多少前一个时间步的信息。更新门的输出值介于0和1之间,值越大表示保留的过去信息越多,值越小则意味着更多地依赖于当前输入的信息。
把GRU所有流程放在一张图展示:

总的来说:
- GRU输入输出的结构与普通的RNN相似,其中的内部思想与LSTM相似。
- 与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加”实用“的GRU啦。
补充 ( 看完 L S T M 部分后,再看该补充说明 ) : 补充(看完LSTM部分后,再看该补充说明): 补充(看完LSTM部分后,再看该补充说明):
- r (reset gate)实际上与他的名字有些不符合,因为我们仅仅使用它来获得了 h ′ {h}' h′。
- GRU中的 h ′ {h}' h′实际上可以看成对应于LSTM中的hidden state,而上一个节点传下的 h t − 1 h_{t-1} ht−1则对应于LSTM中的cell state。
- z z z对应的则是LSTM中的 z f z_{f} zf,那么 ( 1 − z ) (1-z) (1−z)就可以看成是选择门 z i z_{i} zi。
LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
LSTM 的输入输出结构与普通的RNN区别如下图所示:

相比于RNN只有一个传递状态 h t h_{t} ht,LSTM有两个传输状态,一个 c t c_{t} ct(cell state) ,和一个 h t h_{t} ht(hidden state)。
LSTM中的 c t c_{t} ct相当于RNN中的 h t h_{t} ht
下面我们来看一下LSTM内部结构,首先使用LSTM的当前输入 x t x_{t} xt和上一个状态传递下来的 h t − 1 h_{t-1} ht−1计算得到四个状态值:




z i , z f , z o z_{i},z_{f},z{o} zi,zf,zo 通过sigmoid非线性变换,分别作为输入门控,遗忘门控和输出门控,而 z z z则是通过tanh非线性变换,作为输入数据。
LSTM内部主要有三个阶段:
-
选择记忆阶段: 该阶段会对输入的数据 z z z进行有选择性的记忆,而选择的门控信号由 z i z_{i} zi来进行控制。

-
忘记阶段: 这个阶段是对上一个节点传入的输入进行选择性的忘记,通过 z f z_{f} zf作为忘记门控,来控制上一个状态 c t − 1 c_{t-1} ct−1哪些需要留下,哪些需要忘记。

- 将上面两个阶段得到的结果相加,即可得到传输给下一个状态的 c t c_{t} ct。

- 输出阶段: 这个阶段会决定哪些将会被当成当前状态的输出,主要是通过 z o z_{o} zo进行控制,并且还对上一个阶段得到的 c t c_{t} ct进行了tanh的非线性变换。

- 与普通RNN类似,输出的 y t y_{t} yt往往最终也是通过 h t h_{t} ht变换得到,如: y t = s i g m o i d ( W h t ) y_{t} = sigmoid(W h_{t}) yt=sigmoid(Wht)
把LSTM所有流程放在一张图展示:

总结:
-
以上,就是LSTM的内部结构。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。
-
但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。
相关文章:
GRU 和 LSTM 公式推导与矩阵变换过程图解
GRU 和 LSTM 公式推导与矩阵变换过程图解 GRULSTM 本文的前置篇链接: 单向/双向,单层/多层RNN输入输出维度问题一次性解决 GRU GRU(Gate Recurrent Unit)是循环神经网络(RNN)的一种,可以解决RNN中不能长期…...
现在中国三大运营商各自使用的哪些band频段
现在中国三大运营商4G和5G频段分配情况: 中国移动 4G频段: TD-LTE: Band 39:1880-1920MHz,实际使用1885-1915MHz。 Band 40:2300-2400MHz,实际使用2320-2370MHz。 Band 41:2515-26…...
使用Jenkins实现鸿蒙HAR应用的自动化构建打包
使用Jenkins实现鸿蒙HAR应用的自动化构建打包 在软件开发领域,自动化构建是提高开发效率和确保代码质量的重要手段。特别是在鸿蒙(OpenHarmony)应用开发中,自动化构建更是不可或缺。本文将详细介绍如何使用Jenkins命令行工具实现…...
AI时代,职场人如何开启学习之旅
为什么要学习 AI 在当今数字化时代,AI 正以前所未有的速度改变着我们的工作和生活方式。从智能客服到自动化生产,从数据分析到个性化推荐,AI 已经广泛渗透到各个行业和领域。学习 AI,对于工作人员来说,不仅是提升工作…...
MIT6.824 Lecture 2-RPC and Threads Lecture 3-GFS
Lecture 2-RPC and Threads Go语言在多线程、同步,还有很好用的RPC包 《Effective Go》 线程是实现并发的重要工具 在分布式系统里关注多线程的原因: I/O concurrencyParallelismConvenience Thread challenges 用锁解决race问题 Coordination channel…...
MySQL第五次作业
根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…...
【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤
以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格,以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理:在处理大量学术论文、报告等 PDF 文档时,需要提取其中的关键信…...
智慧机房解决方案(文末联系,领取整套资料,可做论文)
智慧机房解决方案-软件部分 一、方案概述 本智慧机房解决方案旨在通过硬件设备与软件系统的深度整合,实现机房的智能化管理与服务,提升机房管理人员的工作效率,优化机房运营效率,确保机房设备的安全稳定运行。软件部分包括机房管…...
【C编程问题集中营】使用数组指针时容易踩得坑
【C编程问题集中营】使用数组指针时容易踩得坑 文章目录 【C编程问题集中营】使用数组指针时容易踩得坑一、获取数组首地址二、应用场景举例2.1 正常场景2.2 异常场景 三、总结 一、获取数组首地址 一维数组的首地址即数组第一个元素的指针,常用的获取一维数组首地…...
【Redis】Linux、Windows、Docker 环境下部署 Redis
一、Linux环境部署Redis 1、卸载 # 查看 Redis 是否还在运行 [appuserlocalhost redis]$ ps -ef|grep redis appuser 135694 125912 0 14:24 pts/1 00:00:00 ./bin/redis-server *:6379 appuser 135731 125912 0 14:24 pts/1 00:00:00 grep --colorauto redis# 停止…...
反函数定义及其推导
文章目录 定义存在条件举例说明总结 反函数是数学中一种特殊的函数,用于“逆转”另一个函数的映射关系。 定义 设有一个函数 f : X → Y f: X \to Y f:X→Y。如果存在一个函数 g : Y → X g: Y \to X g:Y→X,使得对于所有 x ∈ X x \in X x∈X 和 y…...
2025.2.9机器学习笔记:PINN文献阅读
2025.2.9周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 文献阅读 题目信息 题目: GPT-PINN:Generative Pre-Trained Physics-Informed Neural Networks toward non-intrusive Meta-learning of parametric PDEs期刊: Fini…...
Oracle数据连接 Dblink
拓展: oracle远程登陆数据库 1.oracle客户端或者服务端 2.修改你的电脑如下路径文件(服务器IP,服务器的数据库名,服务器的数据库端口号) c:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora orcl_109 (DESCRIPTION …...
fetch请求总结,fastadmin中后台接口强制返回json数据
fetch请求 提交图片,只支持formData方式,这样会自动变为multiform方式,而且一般的post大多都可以用这样的方式来完成请求 const formData new FormData(); formData.append(file, fileInput.files[0]); formData.append(pid, id); formData.append(dc, 1);fetch(/api/common…...
基于STM32的智能鱼缸水质净化系统设计
🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智能鱼缸水质净化系统。 目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 1、设计要求…...
JAVA安全—FastJson反序列化利用链跟踪autoType绕过
前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…...
格式化字符串漏洞(Format String Vulnerability)
格式化字符串漏洞(Format String Vulnerability)是程序中因不当处理格式化字符串参数而导致的一类安全漏洞,常被攻击者利用来读取内存数据、篡改程序执行流程,甚至执行任意代码。以下是对其原理、利用方式及防御措施的详细解析&am…...
C++--iomanip库
目录 1. 设置字段宽度:std::setw() 2. 设置浮点数精度:std::setprecision() 3. 设置填充字符:std::setfill() 4. 控制对齐方式:std::left 和 std::right,std::internal 5. 控制进制输出:std::hex、std…...
Redis 集群原理、主从复制和哨兵模式的详细讲解
引言:本文记录了博主在学习Redis的过程中的原理,了解为什么使用与怎么样使用 Redis 集群,在使用 Redis 集群时出现的主从复制和哨兵模式的相关知识。本文并不涉及Redis安装。 文章目录 一、简单介绍什么是 Redis二、为什么要使用 Redis 集群三…...
基于Java的远程视频会议系统(源码+系统+论文)
第一章 概述 1.1 本课题的研究背景 随着人们对视频和音频信息的需求愈来愈强烈,追求远距离的视音频的同步交互成为新的时尚。近些年来,依托计算机技术、通信技术和网络条件的发展,集音频、视频、图像、文字、数据为一体的多媒体信息ÿ…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
