门控循环单元GRU
目录
- 一、GRU提出的背景:
- 1.RNN存在的问题:
- 2.GRU的思想:
- 二、更新门和重置门:
- 三、GRU网络架构:
- 1.更新门和重置门如何发挥作用:
- 1.1候选隐藏状态H~t:
- 1.2隐藏状态Ht:
- 2.GRU:
- 四、底层源码:
- 五、Pytorch版代码:
一、GRU提出的背景:
1.RNN存在的问题:
循环神经网络讲解文章
由于RNN的隐藏状态ht用于记录之前的所有序列信息,而对于长序列问题来说ht会记录太多序列信息导致序列时序特征区分度很差(最前面的序列特征因为进行了太多轮迭代往往不太好从ht中提取),因此一些比较靠前但很重要的序列特征在ht中可能就不太被重视,而一些比较靠后但没用的序列特征在ht中被过于关注。
2.GRU的思想:
GRU的思想是如何将隐藏状态ht中一些重要的序列信息给予高的关注,而一些不重要的序列信息给予低的关注。
- 对于需要关注的序列信息,使用更新门来提高关注度
- 对于需要遗忘的序列信息,使用遗忘门来降低关注度
二、更新门和重置门:
GRU提出更新门和重置门的思想来改变隐藏状态ht中不同序列信息的关注度。

更新门和重置门可以分别看做一个全连接层的隐藏层,这样的话上图就等价于两个并排的隐藏层,其中:
- 每个隐藏层都接收之前时间步的隐藏状态Ht-1和当前时间步的输入batch。
- 更新门和重置门有各自的可学习权重参数和偏置值,公式含义类似传统RNN。
- Rt 和 Zt 都是根据过去的隐藏状态 Ht-1 和当前输入 Xt 计算得到的 [0,1] 之间的量(激活函数)。
三、GRU网络架构:
1.更新门和重置门如何发挥作用:
重置门对过去t个时间步的序列信息(Ht-1)进行选择,更新门对当前一个时间步的序列信息(Xt)进行选择。具体原理如下:
1.1候选隐藏状态H~t:
候选隐藏状态既保留了之前的隐藏状态Ht-1,又保留了当前一个时间步的序列信息Xt。

因为Rt是一个[0,1] 之间的量,所以Rt×Ht-1是对之前的隐藏状态Ht-1进行一次选择:Rt 在某个位置的值越趋近于0,则表示Ht-1这个位置的序列信息越倾向于被丢弃,反之保留。
综上,重置门的作用是对过去的序列信息Ht-1进行选择,Ht-1中哪些序列信息当前的输出是有用的,应该被保存下来,而哪些序列信息是不重要的,应该被遗忘。
1.2隐藏状态Ht:

因为Zt是一个[0,1] 之间的量,如果Zt全为0,则当前隐藏状态Ht为当前候选隐藏状态,该候选隐藏状态不仅保留了之前的序列信息,还保留了当前时间步batch的序列信息;如果Zt全为1,则当前隐藏状态Ht为上一个时间步的隐藏状态。
综上,更新门的作用是决定当前一个时间步的序列信息是否保留,如果Zt全为0,则说明当前时间步batch的序列信息是有用的(候选隐藏状态包含之前的序列信息和当前一个时间步的序列信息),保留下来加入到隐藏状态Ht中;如果Zt全为1,则说明当前时间步batch的序列信息是没有用的,丢弃当前batch的序列信息,直接使用上一个时间步的隐藏状态Ht-1作为当前的隐藏状态Ht。(Ht-1仅包含之前的序列信息,不包含当前一个时间步的序列信息)
2.GRU:
GRU网络架构如下,可以看做是三个隐藏层并排的架构。



四、底层源码:
代码中num_hiddens表示隐藏层神经元个数,由于重置门、更新门的输出维度相同,所以重置门和更新门两个隐藏层的神经元个数也是一样的=num_hiddens。
import torch
from torch import nn
from d2l import torch as d2l# 数据预处理,获取datalodaer和字典
batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)# 初始化可学习参数
def get_params(vocab_size, num_hiddens, device):num_inputs = num_outputs = vocab_sizedef normal(shape):return torch.randn(size=shape, device=device) * 0.01def three():return (normal((num_inputs, num_hiddens)), normal((num_hiddens, num_hiddens)),torch.zeros(num_hiddens, device=device))W_xz, W_hz, b_z = three()W_xr, W_hr, b_r = three()W_xh, W_hh, b_h = three()W_hq = normal((num_hiddens, num_outputs))b_q = torch.zeros(num_outputs, device=device)params = [W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q]for param in params:param.requires_grad_(True)return params# 初始化隐藏状态
def init_gru_state(batch_size, num_hiddens, device):return (torch.zeros((batch_size, num_hiddens), device=device),)# 定义门控循环单元模型
def gru(inputs, state, params):W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = paramsH, = stateoutputs = []for X in inputs:Z = torch.sigmoid((X @ W_xz) + (H @ W_hz) + b_z)R = torch.sigmoid((X @ W_xr) + (H @ W_hr) + b_r)H_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h)H = Z * H + (1 - Z) * H_tildaY = H @ W_hq + b_qoutputs.append(Y)return torch.cat(outputs, dim=0), (H,)# 训练
vocab_size, num_hiddens, device = len(vocab), 256, d2l.try_gpu()
num_epochs, lr = 500, 1
model = d2l.RNNModelScratch(len(vocab), num_hiddens, device, get_params,init_gru_state, gru)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)
五、Pytorch版代码:
num_inputs = vocab_size
# 调用pytorch构建网络结构
gru_layer = nn.GRU(num_inputs, num_hiddens)
model = d2l.RNNModel(gru_layer, len(vocab))
model = model.to(device)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)
相关文章:
门控循环单元GRU
目录 一、GRU提出的背景:1.RNN存在的问题:2.GRU的思想: 二、更新门和重置门:三、GRU网络架构:1.更新门和重置门如何发挥作用:1.1候选隐藏状态H~t:1.2隐藏状态Ht: 2.GRU: 四、底层源码…...
程序员修炼之路
成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…...
PHP时间相关函数
时间、日期 time()获取当前时间戳(10位)microtime(true)返回一个浮点时间戳data(格式,时间戳)日期格式化 $time time(); echo date(Y-m-d H:i:s, $time);strtotime&am…...
python进阶——python面向对象
前言 Python是一种面向对象的编程语言,可在Python中使用类和对象来组织和封装代码。面向对象编程(OOP)是一种编程范例,它将数据和操作数据的方法封装在一个对象内部,通过对象之间的交互来实现程序的功能。 1、面向对象…...
【无标题】vue2鼠标悬停(hover)时切换图片
在Vue 2中,要实现鼠标悬停(hover)时切换图片的功能,你不能直接在模板的:src绑定中处理这个逻辑,因为Vue的模板不支持条件渲染的复杂逻辑(如基于鼠标状态的动态图片切换)。但是,你可以…...
每天一个数据分析题(四百五十九)- 分析法
故障树分析法经常与哪些方法联合使用? A. 头脑风暴法 B. 五问法 C. 配对法 D. 引力法 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取答案 数据分析专项练习题库 内容涵盖Python,SQL,统计学…...
英语:十、助动词和情态动词
1、助动词 (1)助动词be a、助动词be人称、数及时态的变化 be在作助动词时,也和系动词一样,有人称、数及时态的变化。 人称 数 现在时态 过去时态 现在分词 过去分词 第一人称 单数 am was being been 复数 are w…...
DB2-Db2DefaultValueConverter
提示:Db2DefaultValueConverter 类的核心作用是在 Debezium 数据库连接器中处理 IBM DB2 数据库表列的默认值。当 Debezium 监控 DB2 数据库的更改时,它需要能够正确地理解和表示数据库表中列的默认值,尤其是在没有明确值的情况下插入新行时。…...
(自适应手机端)行业协会机构网站模板
(自适应手机端)行业协会机构网站模板PbootCMS内核开发的网站模板,该模板适用于行业协会网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台,数据即时同步&#…...
视频理解调研笔记 | 2021年前视频动作分类发展脉络
前言 参考资料 本文基于以下四个李沐 AI 论文精度视频,对视频理解领域做初步调研 双流网络论文逐段精读 I3D 论文精读 视频理解论文串讲(上) 视频理解论文串讲(下) 相关论文 02014CVPRDeep VideoPDF12014NIPSTwo-Str…...
怎么通过 ssh 访问远程设备
文章目录 什么是 SSH背景环境配置前置准备在 linux 系统中安装 ssh 组件 什么是 SSH ssh 全称是 Secure Shell, 有时候也被叫做 Secure Socket Shell, 这个协议使你能通过命令行的方式安全的连接到远端计算机。当连接建立就会启动一个 shell 会话,这时你就能在你的…...
linux Ubuntu 安装mysql-8.0.39 二进制版本
我看到网上很多都写的乱七八糟, 我自己总结了一个 首先, 去Mysql官网上下载一个mysql-8.0.39二进制版本的安装包 这个你自己去下载我这里就写一个安装过程和遇到的坑 第一步 解压mysql压缩包和创建my.cnf文件 说明: 二进制安装指定版本MySQL的时候,需要手动写配置…...
ZooKeeper日志自动清理实用脚本
ZooKeeper日志自动清理:保持系统整洁的实用脚本 在管理ZooKeeper集群时,定期清理日志文件是一项重要但常被忽视的任务。本文将介绍一个简单而有效的bash脚本,用于自动清理ZooKeeper的日志和快照文件,并讨论如何使用cron来定期执行此脚本。 磁盘告警,所以写了一个脚…...
KVM+GFS分布式存储系统构建高可用
一:部署GFS高可用分布式存储环境 1:安装部署 KVM 虚拟化平台 2:部署 GlusterFS 在所有节点上执行如下命令: (1)关闭防所有节点的防火墙、SELiunx systemctl stop firewalldsystemctl disable firewallds…...
CIFAR-10 数据集图像分类与可视化
数据准备 CIFAR-10 and CIFAR-100 datasets (toronto.edu)在上述网站中下载Python版本的CIFAR-10数据集。 下载后的压缩包解压后会得到几个文件如下: 对应的data_batch_1 ~ data_batch_5 是划分好的训练数据,每个文件里包含10000张图片,test…...
没有了高项!!2024软考下半年软考高级哪个最容易考过?
距离2024上半年软考考试结束已经有一段时间了,有不少小伙伴都在开始准备下半年软考了,值得注意的是:近日各省陆续公布了2024上半年软考合格名单。那么,软考高级通过率到底如何?先来看看吧! 一、上半年软考通…...
用户自定义Table API Connector(Sources Sinks)
目录 概述 Metadata Planning Runtime 扩展点 动态表工厂(Dynamic Table Factories) 动态表(Dynamic Table) 动态表源(Dynamic Table Source) 扫描表源(Scan Table Source) 查找表源(Lookup Table Source) 动态表接收器(Dynamic Table Sink) 编码/解码…...
自闭症儿童能否摘帽?摘帽成功的秘诀揭秘
自闭症,这一曾经被视为不可逆转的障碍,如今在科学的进步与社会的关注下,正逐步展现出被“摘帽”的可能性。那么,自闭症儿童真的能完全摆脱这一标签,实现真正的“摘帽”吗?答案是肯定的,关键在于…...
主题巴巴WordPress主题合辑打包下载+主题巴巴SEO插件
主题巴巴WordPress主题合辑打包下载,包含博客一号、博客二号、博客X、门户一号、门户手机版、图片一号、杂志一号、自媒体一号、自媒体二号和主题巴巴SEO插件。...
git把本地文件上传远程仓库的流程
下载git,并创建一个仓库,这里着重介绍怎么把本地文件上传参考 正确执行步骤:在你需要上传的文件夹空白处下,右键鼠标,点击git bash here $ git init初始化当前目录 $ git status看一下当前分支里面有什么,…...
FPGA LVDS输入作为模拟比较器的原理、设计与工程实践
1. 项目概述:当LVDS输入遇上模拟电压 最近几年,各大FPGA厂商都在力推自家的“模拟-数字转换器(ADC)IP核”,宣传其如何集成便利、性能优越。这让我这个老工程师不禁琢磨,这些IP核的底层原理究竟是什么&#…...
GENIVI DLT Viewer:从编译到实战连接的完整指南
1. 环境准备:搭建DLT Viewer开发环境 第一次接触GENIVI DLT Viewer时,我花了两天时间才把环境搭好。现在回想起来,其实只要抓住几个关键点就能少走弯路。DLT Viewer是汽车电子和嵌入式领域常用的日志分析工具,主要用于查看设备端…...
WarcraftHelper 2024:魔兽争霸3终极优化指南
WarcraftHelper 2024:魔兽争霸3终极优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电脑上运行卡顿、画…...
Burpsuite社区版实战指南:从零掌握渗透测试核心模块
1. Burpsuite社区版入门:环境搭建与基础配置 第一次接触Burpsuite时,我被它复杂的界面吓到了——满屏的英文标签、密密麻麻的功能按钮,还有那些看不懂的专业术语。但实际用下来发现,社区版的功能对新手非常友好。先说说下载安装&a…...
用Python和statsmodels搞定因果推断:手把手教你实现边缘结构模型(MSM)
Python实战:用边缘结构模型(MSM)破解纵向数据因果推断难题 在医疗健康、社会科学和商业分析领域,我们经常面临一个核心挑战:如何从观察性数据中得出可靠的因果结论?当数据具有时间维度时——比如患者的多次就诊记录、用户的连续行…...
泄爆门是什么材质 工业厂房专用防爆门详解
很多工地、厂房分不清泄爆门和普通防爆门,关键差别就在材质和结构。本文详细讲解泄爆门常用材质、每种材质优缺点、适用场景,以及工业厂房专用防爆门选型要点、验收标准,做工程、采购、消防整改都能直接参考。在化工厂、粉尘车间、锅炉房、饲…...
告别硬件!用OneNET官方simulate-device工具5分钟搞定MQTT设备云端调试
5分钟实现云端MQTT调试:OneNET模拟设备实战指南 物联网开发中最令人头疼的环节莫过于硬件与云端的联调——硬件没到位时开发停滞,硬件到手后又要面对各种通信问题。OneNET的simulate-device工具彻底改变了这种被动局面,它让开发者能在零硬件依…...
别再死记硬背截止、放大、饱和了!用Arduino+面包板,5分钟直观演示三极管三种工作状态
用Arduino实战破解三极管工作状态的秘密 记得第一次学三极管时,盯着课本上那些截止区、放大区、饱和区的曲线图,我完全无法理解这些抽象概念和实际电路有什么关系。直到有一天,我在实验室里用Arduino和几个简单元件搭建了一个测试电路&#x…...
终极指南:NoSQL数据库大全awesome-bigdata - 文档型数据库实战入门 [特殊字符]
终极指南:NoSQL数据库大全awesome-bigdata - 文档型数据库实战入门 🚀 【免费下载链接】awesome-bigdata A curated list of awesome big data frameworks, ressources and other awesomeness. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-b…...
代码所有权的悖论:集体智慧与个人责任的边界
代码世界的身份迷局在软件测试的日常工作中,我们时常会陷入这样的困惑:当面对一行引发系统崩溃的代码时,究竟该追溯到最初编写它的开发者,还是问责于后续不断迭代维护的团队?当一个历经数十人之手、跨越数年周期的模块…...
