当前位置: 首页 > news >正文

门控循环单元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,统计学&#xf…...

英语:十、助动词和情态动词

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看一下当前分支里面有什么&#xff0c…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

[拓扑优化] 1.概述

常见的拓扑优化方法有:均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有:有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...