07_GRU模型

news2025/3/30 20:56:41

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 torch

def 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.coloradmin.cn/o/2322818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大模型基础_毛玉仁】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…

wokwi arduino mega 2560 - 键盘与LCD显示

截图&#xff1a; 链接&#xff1a; https://wokwi.com/projects/414520193913760769 代码&#xff1a; //cslg lcd key #include <LiquidCrystal.h> // 引入LiquidCrystal库&#xff0c;用于LCD显示 #include <Keypad.h> // 引入Keypad库&#xff0c;用于键盘输…

Linux设置SSH免密码密钥登录

文章目录 设置SSH免密码密钥登录第一步&#xff1a; 生成SSH密钥对&#xff08;在客户端操作&#xff09;方式一&#xff1a;Windows 10/11 内置的 OpenSSH 客户端&#xff08;推荐&#xff09;常用选项&#xff1a;密钥算法选择建议生成秘钥 方式二&#xff1a;借用Xshell工具…

深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

GPU算力哪家好?GpuGeek推出高性能GPU云服务

在人工智能和深度学习领域&#xff0c;GPU算力租赁已成为推动技术创新的关键因素。随着越来越多的企业和个人开发者投身于AI研究和应用开发&#xff0c;如何高效、灵活地获取GPU算力成为了一个亟待解决的问题。GpuGeek作为一站式AI基础设施平台&#xff0c;凭借其独特的优势&am…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.3前馈网络(FFN)与激活函数(GELU)优化

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.3 前馈网络(FFN)与激活函数(GELU)优化1. 前馈网络(FFN)的架构设计与数学原理1.1 FFN在Transformer中的核心作用2. GELU激活函数的数学特性与优化2.1 GELU的数学形式与近似计算3. 逐行代码实现…

组态软件之万维组态介绍(web组态、html组态、vue2/vue3组态、组态软件、组态编辑器)

一、什么是组态软件 组态软件是一种用于创建、配置和管理监控和控制系统的软件工具。组态是指不需要编写计算机程序、通过配置的方式完成工业应用开发的系统。它们通常用于工业自动化领域&#xff0c;用于实时监视和控制工业过程。组态软件提供了丰富的功能和工具&#xff0c;使…

《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 在ubuntu 22.04中&#xff0c;pam_tally2模块已被弃用&#xff0c;取而代之的是pam_faillock模块。因此&#xf…

AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤

前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…

【NLP 44、实践 ⑪ 用Bert模型结构实现自回归语言模型的训练】

目录 数据文件 一、模型定义 1.模型初始化 代码运行流程 2.前向传播&#xff0c;计算损失 ⭐ 代码运行流程 二、加载语料 代码运行流程 三、 随机生成样本 代码运行流程 四、建立模型 五、采样策略选择 代码运行流程 六、模型效果测试 代码运行流程 七、模型训练 代码运行流程 …

微信小程序如何接入直播功能

一、小程序直播开通背景 1.政府资质要求 政府的要求&#xff0c;小程序开通直播需要注册主体具备互联网直播的资质&#xff0c;普通企业需要《信息网络传播视听节目许可证》&#xff0c;表演性质的直播需要《网络文化经营许可证》&#xff0c;政府主体需要《社会信用代码》及…

基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

慧通测控汽车智能座舱测试技术

一、引言 随着科技的飞速发展&#xff0c;汽车正从单纯的交通工具向智能化移动空间转变。智能座舱作为这一转变的核心体现&#xff0c;融合了多种先进技术&#xff0c;为用户带来前所未有的驾驶体验。从简单的信息娱乐系统到高度集成的人机交互、智能驾驶辅助以及车辆状态监测…

kettle插件-rabbitmq插件

场景&#xff1a;kettle本身可以直接链接rabbitmq&#xff0c;但是需要配置rabbitmq开启mqtt协议&#xff0c;本次讲解下自定义开发组件RabbitMQ consumer&#xff0c;无需开启mqtt协议即可使用。 1、docker 安装rabbitmq 1&#xff09;下载镜像 docker pull rabbitmq 2&…

为Windows10的WSL Ubuntu启动sshd服务并使用Trae远程连接

Windows10的WSL Ubuntu&#xff0c;使用起来非常方便&#xff0c;但是美中不足的是&#xff0c;无法从Windows主机ssh到Ubuntu 。 解决的方法是在Ubuntu安装sshd服务 Ubuntu安装sshd服务 执行命令 sudo apt install openssh-server 安装好后&#xff0c;先本地测试&#x…

【C#.NET】VS2022创建Web API项目

C# Web API 是一种基于 .NET 平台&#xff08;包括但不限于.NET Framework 和 .NET Core&#xff09;构建 HTTP 服务的框架&#xff0c;用于创建 RESTful Web 服务。REST&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;它利用HTTP协议…

体育直播系统趣猜功能开发技术实现方案

功能概述 趣猜功能是“东莞梦幻网络科技”体育直播系统源码中的互动功能&#xff0c;主播可以发起竞猜题目&#xff0c;观众使用虚拟货币进行投注&#xff0c;增加直播间的互动性和趣味性。所有货币均为虚拟货币&#xff0c;通过系统活动获取&#xff0c;不可充值提现。 数据…

33.[前端开发-JavaScript基础]Day10-常见事件-鼠标事件-键盘事件-定时器-案例

1 window定时器 window定时器方法 setTimeout的使用 setInterval的使用 2 轮播消息提示 案例实战一 – 轮播消息提示 3 关闭隐藏消息 案例实战二 – 关闭隐藏消息 4 侧边栏展示 案例实战三 – 侧边栏展示 5 tab切换实现 案例实战四 – 登录框&#xff08;作业&#xff09;…

C# 多标签浏览器 谷歌内核Csharp

采用框架 &#xff1a;FBrowserCEF3lib 视频演示&#xff1a;点我直达 成品下载&#xff1a; https://wwms.lanzouo.com/iYOd42rl8vje