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)

核心组件

  1. 重置门(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[ht1,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之间
  2. 更新门(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[ht1,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之间
  3. 候选隐藏状态(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[rtht1,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
  4. 最终隐藏状态(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=(1zt)ht1+zth^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.8 r_t = 0.8 rt=0.8
        • 作用:保留更多上文信息,以便与后续原因关联
      • 更新门值 : z t = 0.5 z_t = 0.5 zt=0.5
        • 作用: 平衡旧状态(上文结论) 和 新状态(下文原因) ,逐步构建完整的逻辑链

内部结构

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

  • 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38755.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VScode

由于centos停止了维护 ,后面使用ubuntu 在Ubuntu中用vscode 充当记事本的作用 替代了centos中vim的作用 后面使用vscode编辑 vscode中继续使用makefile , xshell中的cgdb进行debug (半图形写 ,半命令行debug&&运行) 官网下载地址:https://code.visuals…

【行驶证识别】批量咕嘎OCR识别行驶证照片复印件图片里的文字信息保存表格或改名字,基于QT和腾讯云api_ocr的实现方式

项目背景 在许多业务场景中,如物流管理、车辆租赁、保险理赔等,常常需要处理大量的行驶证照片复印件。手动录入行驶证上的文字信息,像车主姓名、车辆型号、车牌号码等,不仅效率低下,还容易出现人为错误。借助 OCR(光学字符识别)技术,能够自动识别行驶证图片中的文字信…

异步编程与流水线架构:从理论到高并发

目录 一、异步编程核心机制解析 1.1 同步与异步的本质区别 1.1.1 控制流模型 1.1.2 资源利用对比 1.2 阻塞与非阻塞的技术实现 1.2.1 阻塞I/O模型 1.2.2 非阻塞I/O模型 1.3 异步编程关键技术 1.3.1 事件循环机制 1.3.2 Future/Promise模式 1.3.3 协程(Cor…

python-selenium 爬虫 由易到难

本质 python第三方库 selenium 控制 浏览器驱动 浏览器驱动控制浏览器 推荐 edge 浏览器驱动(不容易遇到版本或者兼容性的问题) 驱动下载网址:链接: link 1、实战1 (1)安装 selenium 库 pip install selenium&#…

前端OOM内存泄漏如何排查?

前言 现代前端开发中,随着应用的复杂性和交互性的增加,OOM(Out Of Memory,内存不足)问题和内存泄漏逐渐成为影响用户体验和应用性能的关键挑战。排查和解决这些问题需要开发人员具备良好的调试技巧和优化策略。 造成…

C++20:玩转 string 的 starts_with 和 ends_with

文章目录 一、背景与动机二、string::starts_with 和 string::ends_with(一)语法与功能(二)使用示例1\. 判断字符串开头2\. 判断字符串结尾 (三)优势 三、string_view::starts_with 和 string_view::ends_w…

Redis、Memcached应用场景对比

环境 Redis官方网站: Redis - The Real-time Data Platform Redis社区版本下载地址:Install Redis | Docs Memcached官方网站:memcached - a distributed memory object caching system Memcached下载地址:memcached - a dis…

【MySQL】日志

目录 基本概念错误日志二进制日志查询日记慢查询日志 基本概念 日志(Log)是系统、软件或设备在运行过程中对发生的事件、操作或状态变化所做的记录。这些记录通常包含时间戳、事件类型、相关数据等信息,用于跟踪运行过程、排查故障、审计操作…

ArkUI-List组件

列表是一个复杂的容器,当列表项达到一定数量,使得列表内容超出其范围的时候,就会自动变为可以滚动。列表适合用来展现同类数据类型。 List组件支持使用,条件渲染,循环渲染,懒加载等渲染控制方式生成子组件…

Word限定仅搜索中文或英文引号

在Word中,按下CtrlF键,左侧会弹出导航搜索栏; 点击放大镜旁边的下拉栏,选择高级查找 在查找内容处输入英文状态下的",然后选择更多->使用通配符,就可以仅查找英文状态下的" 同理&#xff…

智能飞鸟监测 守护高压线安全

飞鸟检测新纪元:视觉分析技术的革新应用 在现代化社会中,飞鸟检测成为了多个领域不可忽视的重要环节。无论是高压线下的安全监测、工厂内的生产秩序维护,还是农业区的作物保护,飞鸟检测都扮演着至关重要的角色。传统的人工检测方…

React初学分享 事件绑定 组价通信 useState useEffect

React初学 React介绍快速搭建React项目JSXJSX的本质优势:JSX中使用JS表达式JSX中的列表渲染JSX实现简单条件渲染JSX实现复杂条件渲染 React中的事件绑定React基础事件绑定传递自定义参数同时传递事件对象和自定义参数 React中的组件useState修改状态的规则状态不可变…

【实战】deepseek数据分类用户评论数据

在平时的工作中,我们会遇到数据分类的情况,比如将一些文本划分为各个标签。如果人工分类这块的工作量将是非常大,而且分类数据的准确性也不高。我们需要用到一些工具来实现。提高效率的同时也提高准确率。 1.示例数据 用户ID 时间戳 评论场…

git tag以及git

git tag 以及git 一、先说收获吧 1. git bash 在windows上 类似于linux的bash提供的shell命令行窗口,可以执行很多linux命令,cd pwd ls vim cat touch mkdir,还可以用正则匹配查看标签。相当于在windows上装了一个小的linux。git init myproj…

[动手学习深度学习]28. 批量归一化

当前所有的深度学习网络,或多或少都用了批归一化操作 批归一化的思想不新,但是这个特定的层是16年左右出现的,在这之后,发现他对深度学习算法性能的提升非常有效 概念理解 这是一个网络的结构: 当数据很深的时候&am…

AI比人脑更强,因为被植入思维模型【17】万物联系思维模型

万物联系,万物,并不孤立。 定义 万物联系思维模型是一种强调世界上所有事物都相互关联、相互影响的思维方式。它认为任何事物都不是孤立存在的,而是与周围的环境、其他事物以及整个宇宙构成一个有机的整体。这种联系不仅包括直接的因果关系,还涵盖了间接的、潜在的、动态的…

昆仑技术重构AI大模型落地范式,长期作“加法”迎来国产生态化“拐点”

作者 | 曾响铃 文 | 响铃说 DeepSeek的爆火,在业内迅速掀起了一场国产化的变革。“国产大模型国产算力”软硬协同的范式正在被重构,AI产业国产化的含金量持续提升,越来越多的企业在这一趋势下加速走上数智化转型路径。 其中,以…

【C++初阶】---类和对象(上)

1.类的定义 1.1类的定义格式 • class为定义类的关键字,Data为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。 •…

常见中间件漏洞(tomcat)

CVE-2017-12615 当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产生,(需要允许put请求) , 攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传…

NSSCTF(MISC)——[NSSRound#4 SWPU]Type Message

相应的做题地址:https://www.nssctf.cn/problem/2478 得到4个wav文件 使用DTMF Decoder工具,对D.wav进行识别 随波逐流,发现九宫格键盘解码能够得到flag 对其他3个文件依次进行识别解码 最终得到fNSSCTF{DTMFISREALLYEASY}