07_GRU模型
GRU模型
双向GRU笔记:https://blog.csdn.net/weixin_44579176/article/details/146459952
概念
-
GRU(Gated Recurrent Unit)也称为门控循环单元,是一种改进版的RNN。与LSTM一样能够有效捕捉长序列之间的语义关联,通过引入两个"门"机制(重置门和更新门)来控制信息的流动,从而避免了传统RNN中的梯度消失问题,并减少了LSTM模型中的复杂性。
[^ 要点]:1.GRU同样是通过门机制来解决传统RNN中的梯度消失问题的 2.GRU相比于LSTM更为简洁,它只引入了两个门 :更新门(Update Gate), 重置门(Reset Gate)
核心组件
-
重置门(Reset Gate)
-
作用: 决定如何将新的输入与之前的隐藏状态结合。
- 当重置门值接近0时,表示当前时刻的输入几乎不依赖上一时刻的隐藏状态。
- 当重置门值接近1时,表示当前时刻的输入几乎完全依赖上一时刻的隐藏状态。
-
公式(变体版本): r t = σ ( W r ⋅ [ h t − 1 , x t ] + b r ) r_t = σ(W_r·[h_{t-1},x_t] + b_r) rt=σ(Wr⋅[ht−1,xt]+br)
- r t r_t rt| 重置门值, r t ∈ ( 0 , 1 ) r_t ∈ (0,1) rt∈(0,1)
- W r W_r Wr 和$ b_r$ | 重置门权值和偏置项
- σ | sigmoid函数 保证 r t r_t rt的输出值在 0 到 1之间
-
-
更新门(Update Gate)
-
作用: 决定多少之前的信息需要保留,多少新的信息需要更新。
- 当更新门值接近0时,意味着网络只记住旧的隐藏状态,几乎没有新的信息。
- 当更新门值接近1时,意味着网络更倾向于使用新的隐藏状态,记住当前输入的信息。
-
公式(变体版本): z t = σ ( W r ⋅ [ h t − 1 , x t ] + b z ) z_t = σ(W_r·[h_{t-1},x_t] + b_z) zt=σ(Wr⋅[ht−1,xt]+bz)
- z t z_t zt| 更新门值, z t ∈ ( 0 , 1 ) z_t ∈ (0,1) zt∈(0,1)
- W r W_r Wr 和$ b_r$ | 重置门权值和偏置项
- σ | sigmoid函数 保证 z t z_t zt的输出值在 0 到 1之间
-
-
候选隐藏状态(Candidate Hidden State)
-
作用: 捕捉当前时间步的信息,多少前一隐藏状态的信息被保留。
-
公式(变体版本): h ^ t = t a n h ( W h ⋅ [ r t ⊙ h t − 1 , x t ] + b h ) ĥ_t = tanh(W_h · [r_t \odot h_{t-1} , x_t] + b_h) h^t=tanh(Wh⋅[rt⊙ht−1,xt]+bh)
- h ^ t ĥ_t h^t| 候选隐藏状态值, h ^ t ∈ ( − 1 , 1 ) ĥ_t ∈ (-1,1) h^t∈(−1,1)
- W h W_h Wh 和$ b_h$ | 候选隐藏状态的权重和偏置项
- tanh| 双曲正切函数 保证 h t h_t ht的输出值在 -1 到 1之间
- ⊙ \odot ⊙ | Hadamard Product
-
-
最终隐藏状态(Final Hidden State)
-
作用: 控制信息更新,传递长期依赖。
-
公式(变体版本): h t = ( 1 − z t ) ⊙ h t − 1 + z t ⊙ h ^ t h_t = (1-z_t) \odot h_{t-1} + z_t \odot ĥ_t ht=(1−zt)⊙ht−1+zt⊙h^t
- h t h_t ht| 当前时间步的隐藏状态
- z t z_t zt | 更新门的输出,控制新旧信息的比例
- ⊙ \odot ⊙ | Hadamard Product
重置门与更新的对比
门控机制 核心功能 直观理解 重置门(Reset Gate) 控制历史信息对当前候选状态的影响:决定是否忽略部分或全部历史信息,从而生成新的候选隐藏状态。 “是否忘记过去,重新开始?”(例如:处理句子中的突变或新段落) 更新门(Update Gate) 控制新旧信息的融合比例:决定保留多少旧状态的信息,同时引入多少候选状态的新信息。 “保留多少旧记忆,吸收多少新知识?”(例如:维持长期依赖关系) 重置门作用举例:
input: [‘风’,‘可以’,‘吹起’,‘一大张’,‘白纸’,‘却’,‘无法’,‘吹走’,‘一只’,‘蝴蝶’,‘因为’,‘生命’,‘的’,‘力量’,‘在于’,‘不’,‘顺从’]
-
当处理到 ‘却’ 时,上文信息 : 风可以吹起一大张白纸
- 重置门值 : r t = 0.3 r_t = 0.3 rt=0.3
- 作用:忽略部分历史信息,弱化上文影响,为后续信息(无法吹走一只蝴蝶)腾出空间
- 更新门值 : z t = 0.8 z_t = 0.8 zt=0.8
- 作用: 表示保留更多候选隐藏状态(由于 r t r_t rt是一个较小的值,所以候选隐藏状态中新信息占比更大) 的信息
[^ 注]: 此时$ h_t $接近 $ ĥ_t$,隐藏状态被重置为“准备处理转折后的新逻辑”。
- 重置门值 : r t = 0.3 r_t = 0.3 rt=0.3
-
当处理到 ‘因为’ 时,上文信息 : 少部分的 "风可以吹起一大张白纸 " + 大部分的 “无法吹走蝴蝶”
- 重置门值 : r t = 0.8 r_t = 0.8 rt=0.8
- 作用:保留更多上文信息,以便与后续原因关联
- 更新门值 : z t = 0.5 z_t = 0.5 zt=0.5
- 作用: 平衡旧状态(上文结论) 和 新状态(下文原因) ,逐步构建完整的逻辑链
- 重置门值 : r t = 0.8 r_t = 0.8 rt=0.8
-
内部结构


- GRU的更新门和重置门结构图

Pytorch实现
nn.GRU(input_size, hidden_size, num_layers, bidirectional, batch_first, dropout)[^ input_size ]:输入特征的维度
[^ hidden_size ]:隐藏状态的维度
[^ num_layers ]:GRU的层数(默认值为1)
[^ batch_first ]:如果为True,输入和输出的形状为 (batch_size, seq_len, input_size);否则为 (seq_len, batch_size, input_size)
[^ bidirectional ]:如果为True,使用双向GRU;否则为单向GRU(默认False)
[^ dropout ]:在多层GRU中,是否在层之间应用dropout(默认值为0)
使用示例
# 定义GRU的参数含义: (input_size, hidden_size, num_layers)
# 定义输入张量的参数含义: (sequence_length, batch_size, input_size)
# 定义隐藏层初始张量的参数含义: (num_layers * num_directions, batch_size, hidden_size)
import torch.nn as nn
import torchdef dm_gru():# 创建GRU层gru = nn.GRU(input_size=5, hidden_size=6, num_layers=2)# 创建输入张量input = torch.randn(size=(1, 3, 5))# 初始化隐藏状态h0 = torch.randn(size=(2, 3, 6))# hn输出两层隐藏状态, 最后1个隐藏状态值等于output输出值output, hn = gru(input, h0)print('output--->', output.shape, output)print('hn--->', hn.shape, hn)
相关文章:
07_GRU模型
GRU模型 双向GRU笔记:https://blog.csdn.net/weixin_44579176/article/details/146459952 概念 GRU(Gated Recurrent Unit)也称为门控循环单元,是一种改进版的RNN。与LSTM一样能够有效捕捉长序列之间的语义关联,通过引入两个&qu…...
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号
【字符设备驱动开发–IMX6ULL】(二)Linux 设备号 文章目录 【字符设备驱动开发–IMX6ULL】(二)Linux 设备号1 设备号的组成2.设备号的分配 1 设备号的组成 为了方便管理,Linux 中每个设备都有一个设备号,设…...
【大模型基础_毛玉仁】3.4 Prompt 技巧
目录 3.4 Prompt 技巧3.4.1 规范Prompt 编写1)任务说明要明确2)上下文丰富且清晰3)输出格式要规范4)排版要清晰 3.4.2 合理归纳提问1)复杂问题拆解2)追问 3.4.3 适时使用CoT1)何时使用CoT2&…...
探索PyMOL新插件NRGSuite-Qt:全面提升分子对接、结合位点预测与动力学模拟的研究效率
随着分子建模和计算生物学的快速发展,分子对接(Molecular Docking)、结合位点预测、相互作用分析以及动力学研究等领域的工具越来越重要。这些工具不仅帮助研究人员理解分子间的相互作用机制,还能加速药物设计和优化过程。NRGSuit…...
sql2022 复制 事务级别发布后无法删除
Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. 用SA用户登录执行下列语句 USE [xxxxx] GO EXEC dbo.sp_changedbowner loginame Nsa, …...
wokwi arduino mega 2560 - 键盘与LCD显示
截图: 链接: https://wokwi.com/projects/414520193913760769 代码: //cslg lcd key #include <LiquidCrystal.h> // 引入LiquidCrystal库,用于LCD显示 #include <Keypad.h> // 引入Keypad库,用于键盘输…...
Linux设置SSH免密码密钥登录
文章目录 设置SSH免密码密钥登录第一步: 生成SSH密钥对(在客户端操作)方式一:Windows 10/11 内置的 OpenSSH 客户端(推荐)常用选项:密钥算法选择建议生成秘钥 方式二:借用Xshell工具…...
深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
GPU算力哪家好?GpuGeek推出高性能GPU云服务
在人工智能和深度学习领域,GPU算力租赁已成为推动技术创新的关键因素。随着越来越多的企业和个人开发者投身于AI研究和应用开发,如何高效、灵活地获取GPU算力成为了一个亟待解决的问题。GpuGeek作为一站式AI基础设施平台,凭借其独特的优势&am…...
蓝桥杯算法实战分享
蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛,涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧,帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
掌握高效决策的核心思想!今日深入解析贪心算法的底层逻辑,聚焦区间调度与最优选择两大高频场景,结合大厂真题与严谨证明,彻底掌握“局部最优即全局最优”的算法哲学。 一、贪心算法核心思想 贪心算法(Greedy Algorit…...
构建稳健的机器学习系统:应对数据偏移挑战
构建稳健的机器学习系统:应对数据偏移挑战 1. 引言:数据偏移类型与挑战 在机器学习系统从实验室到生产环境的转变过程中,数据偏移(Data Shift)是最常见也最具挑战性的问题之一。所谓数据偏移,指的是训练数…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.3前馈网络(FFN)与激活函数(GELU)优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.3 前馈网络(FFN)与激活函数(GELU)优化1. 前馈网络(FFN)的架构设计与数学原理1.1 FFN在Transformer中的核心作用2. GELU激活函数的数学特性与优化2.1 GELU的数学形式与近似计算3. 逐行代码实现…...
3个版本的Unity项目的异同
根据搜索结果,以下是关于 SPR 3D Sample Scene(URP)、SPR Universal 3D 和 3D(Built-In Render Pipeline) 的定义及区别分析: 1. 定义与用途 SPR 3D Sample Scene(URP) 是基于 Universal Render Pipeline (URP) 的 3D 示例场景,专为展示 URP …...
组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)
一、什么是组态软件 组态软件是一种用于创建、配置和管理监控和控制系统的软件工具。组态是指不需要编写计算机程序、通过配置的方式完成工业应用开发的系统。它们通常用于工业自动化领域,用于实时监视和控制工业过程。组态软件提供了丰富的功能和工具,使…...
Linux系统perf命令使用介绍,如何用此命令进行程序热点诊断和性能优化
Linux perf 命令使用指南:程序热点诊断与性能优化 perf 是 Linux 系统上一个强大的性能分析工具,它能够帮助开发者进行程序热点诊断和性能优化。下面详细介绍 perf 的使用方法。 1. perf 简介 perf (Performance Event Counters) 是 Linux 内核提供的…...
《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、背景信息 在ubuntu 22.04中,pam_tally2模块已被弃用,取而代之的是pam_faillock模块。因此…...
AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤
前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…...
Spring MVC 深度解析:原理、源码剖析与实战
Spring MVC 深度解析:原理、源码剖析与实战 在 Spring 体系中,Spring MVC 作为 Web 层的核心框架,承担着请求处理、参数解析、视图渲染等关键任务。今天,我们将深入剖析 Spring MVC 的执行流程,结合 源码分析…...
347 前k个高频元素
步骤1:统计元素频率 使用哈希表(unordered_map)统计每个元素的出现次数,时间复杂度为 O(n)。 步骤2:构建最小堆维护Top K 优先队列(最小堆):用priority_queue维护当前频率最高的k…...
BUUCTF-web刷题篇
1.EASYSQL破解密码 万能公式: 1 and 11 1 and 11 1 or 11 1 or 11 解释:payload SELECT * FROM tables WHERE username1 or 11 and password1 or 11 优先级排序:and 优先级高于 or,所以要计算 and 然后再计算 or username1…...
LeetCode 第31~33题
目录 LeetCode 第31题:下一个排列 LeetCode 第32题:最长有效括号 LeetCode 第33题:搜索旋转排序数组 LeetCode 第31题:下一个排列 题目描述 整数数组的一个排列就是将所有成员以序列或线性顺序排列。例如arr[1,2,3],以…...
【NLP 44、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】
目录 数据文件 一、模型定义 1.模型初始化 代码运行流程 2.前向传播,计算损失 ⭐ 代码运行流程 二、加载语料 代码运行流程 三、 随机生成样本 代码运行流程 四、建立模型 五、采样策略选择 代码运行流程 六、模型效果测试 代码运行流程 七、模型训练 代码运行流程 …...
Go 语言规范学习(1)
文章目录 IntroductionNotation示例(Go 语言的 if 语句): Source code representationCharacters例子:变量名可以是中文 Letters and digits Lexical elementsCommentsTokensSemicolons例子:查看程序所有的token Ident…...
ShapeCrawler:.NET开发者的PPTX操控魔法
引言 在当今的软件开发领域,随着数据可视化和信息展示需求的不断增长,处理 PPTX 文件的场景日益频繁。无论是自动化生成报告、批量制作演示文稿,还是对现有 PPT 进行内容更新与格式调整,开发者都需要高效的工具来完成这些任务。传…...
微信小程序如何接入直播功能
一、小程序直播开通背景 1.政府资质要求 政府的要求,小程序开通直播需要注册主体具备互联网直播的资质,普通企业需要《信息网络传播视听节目许可证》,表演性质的直播需要《网络文化经营许可证》,政府主体需要《社会信用代码》及…...
ArrayList<E>案例//定义一个方法,将价格低于3000的手机信息返回
import java.util.ArrayList;public class ArrayListphone {public static void main(String[] args){//定义一个方法,将价格低于3000的手机信息返回Phone p1new Phone("小米",1000);Phone p2new Phone("苹果",8000);Phone p3new Phone("锤…...
基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
慧通测控汽车智能座舱测试技术
一、引言 随着科技的飞速发展,汽车正从单纯的交通工具向智能化移动空间转变。智能座舱作为这一转变的核心体现,融合了多种先进技术,为用户带来前所未有的驾驶体验。从简单的信息娱乐系统到高度集成的人机交互、智能驾驶辅助以及车辆状态监测…...
Qt进程间通信:QSharedMemory 使用详解
1. 什么是 QSharedMemory? QSharedMemory 是 Qt 中用于进程间共享内存的类。它允许多个进程共享一块内存区域,从而避免数据传输时的 IO 操作,提高通信速度。通过共享内存,多个进程可以直接读写这块内存,而无需经过文件…...
