万江做网站的公司/新闻类软文
RNN的变体
- 前言
- 一、长短期记忆网络(LSTM)
- 1.1 LSTM结构分析
- 1.1.1 遗忘门
- 1.1.1.1 遗忘门结构图与计算公式
- 1.1.1.2 结构分析
- 1.1.1.3 遗忘门的由来
- 1.1.1.4 遗忘门的内部演示
- 1.1.2 输入门
- 1.1.2.1 输入门结构图与计算公式
- 1.1.2.2 结构分析
- 1.1.2.3 输入门的内部演示
- 1.1.3 细胞状态
- 1.1.3.1 细胞状态结构图与计算公式
- 1.1.3.2 结构分析
- 1.1.3.3 细胞状态的内部演示
- 1.1.4 输出门
- 1.1.4.1 输出门的结构和计算公式
- 1.1.4.2 结构分析
- 1.1.4.3 输出门的内部演示
- 1.2 Bi-LSTM介绍
- 1.2.1 Bi-LSTM结构示意图
- 1.2.2 Bi-LSTM结构分析
- 1.3 代码演示
- 1.4 LSTM 的优缺点
- 二、门控循环单元(GRU)
- 2.1 概述
- 2.2 GRU内部结构图和计算公式
- 2.3 结构分析
- 2.4 Bi-GRU介绍
- 2.5 代码演示
- 2.6 GRU的优缺点
- 总结
前言
- 传统 RNN 对长序列的语义捕捉效果不好,当反向传播的时候,会发生梯度消失或者爆炸的现象。
- 为了解决这种现象,人们创造了 LSTM 模型和 GRU 模型来解决长期信息保存和短期输入缺失的问题
一、长短期记忆网络(LSTM)
- 结构示意图
- 它的核心结构可以分为四个部分去解析:
- 遗忘门
- 输入门
- 细胞状态
- 输出门
1.1 LSTM结构分析
1.1.1 遗忘门
1.1.1.1 遗忘门结构图与计算公式
1.1.1.2 结构分析
- 首先将当前时间步的输入 x t x_t xt 与上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 拼接得到 [ x t , h t − 1 ] [ x_t,h_{t-1}] [xt,ht−1]
- 然后通过一个全连接层也就是乘以一个参数矩阵 W f W_f Wf 再加上偏置
- 最后通过 sigmoid 函数进行激活得到 f t f_t ft
1.1.1.3 遗忘门的由来
- 因为最后得到的 f t f_t ft 将作用到上一层的细胞状态上,代表遗忘过去的多少信息
- 因为遗忘门的门值是由 x t x_t xt , h t − 1 h_{t-1} ht−1 计算得来的,因此整个公式意味着根据当前时间步和上一个时间步隐含状态来决定遗忘掉上一层细胞状态所携带的过往信息
1.1.1.4 遗忘门的内部演示
1.1.2 输入门
1.1.2.1 输入门结构图与计算公式
1.1.2.2 结构分析
- 第一个公式是产生输入门门值 i t i_t it 的公式
- 与遗忘门公式几乎相同,区别只是在于他们之后要作用的目标上
- 第二个公式是产生当前的细胞状态 C ^ t \hat C_t C^t:
- 与传统的 RNN 内部结构计算相似
1.1.2.3 输入门的内部演示
1.1.3 细胞状态
1.1.3.1 细胞状态结构图与计算公式
1.1.3.2 结构分析
- 第一步:细胞状态的更新就是将刚刚得到的遗忘门门值与上一个时间步输出的细胞状态 C t − 1 C_{t-1} Ct−1 相乘
- 第二步:输入门门值 i t i_t it 与当前时间步未更新的细胞状态 C ^ t \hat C_t C^t 相乘
- 将前两步得到的结果进行相加得到当前时间步的细胞状态 C t C_t Ct 给下一个时间步用
1.1.3.3 细胞状态的内部演示
1.1.4 输出门
1.1.4.1 输出门的结构和计算公式
1.1.4.2 结构分析
- 第一个公式是产生输出门门值 o t o_t ot 的公式
- 与遗忘门、输入门公式几乎相同,区别只是在于他们之后要作用的目标上
- 第二个公式是产生当前时间步的隐藏状态 h t h_t ht:
- 输出门门值与到经过 tanh 激活后的当前时间步的细胞状态相乘得到当前时间步的隐藏状态 h t h_t ht
1.1.4.3 输出门的内部演示
1.2 Bi-LSTM介绍
- Bi-LSTM 即双向 LSTM,它没有改变 LSTM 本身任何的内部结构,只是将 LSTM 应用两次且方向不同,再将两次得到的 LSTM 结果进行拼接作为最终输出
1.2.1 Bi-LSTM结构示意图
1.2.2 Bi-LSTM结构分析
- 我们看到图中对"我爱中国"这句话或者叫这个输入序列,进行了从左到右和从右到左两次 LSTM 处理,将得到的结果张量进行了拼接作为最终输出
- 这种结构能够捕捉语言语法中一些特定的前置或后置特征,增强语义关联,但是模型参数和计算复杂度也随之增加了一倍,一般需要对语料和计算资源进行评估后决定是否使用该结构
1.3 代码演示
演示代码如下:
import torch
from torch import nndef dm_my_LSTM():"""input_size: 输入张量 x中特征维度的大小hidden_size: 隐层张量 h中特征维度的大小num_layers: 隐含层的数量batch_first: 是否选择 在实例化 LSTM后 接受 参数的时候, 把批次大小batch_size放在前面 如果为True, 则使用; 默认不使用当 batch_first=True时:输入数据的维度顺序为(batch_size, sequence_length, input_size)第一个维度是批量大小 (batch_size), 即一次处理的数据样本数量第二个维度是序列长度(sequence_length), 即每个样本中的时间步或序列元素数量第三个维度是输入维度(input_size), 即每个时间步的输入特征数量。当 batch_first=False时:输入数据的维度顺序为(sequence_length, batch_size, input_size)。bidirectional: 是否选择使用双向 LSTM, 如果为True, 则使用; 默认不使用."""# LSTM的参数含义 (input_size, hidden_size, num_layers)lstm = nn.LSTM(5, 6, 1, batch_first=True)"""input: 输入张量 xh0: 初始化的隐层张量 hc0: 初始化的细胞状态张量 c"""# input参数含义 (batch_size, sequence_length, input_size)input = torch.randn(4, 3, 5)# 初始化的 h0 和 c0 可以不用传# h0 = torch.randn(1, 3, 6)# c0 = torch.randn(1, 3, 6)# output, (hn, cn) = lstm(input, (h0, c0))output, (hn, cn) = lstm(input)print('输出结果是:', output)print('最后的隐藏状态是:', hn)print('最后的细胞状态是:', cn)if __name__ == '__main__':dm_my_LSTM()
1.4 LSTM 的优缺点
- LSTM 优势
- LSTM 的门结构能够有效减缓长序列问题中可能出现的梯度消失或爆炸,虽然并不能杜绝这种现象,但在更长的序列问题上表现优于传统 RNN
- LSTM缺点
- 由于内部结构相对较复杂,因此训练效率在同等算力下较传统RNN低很多
二、门控循环单元(GRU)
2.1 概述
- GRU(Gated Recurrent Unit)也称门控循环单元结构,它也是传统RNN的变体,同LSTM一样能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象
- 同时它的结构和计算要比LSTM更简单,它的核心结构可以分为两个部分去解析:
- 更新门
- 重置门
2.2 GRU内部结构图和计算公式
2.3 结构分析
- 重置门
- 上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 与当前时间步 x t x_t xt 的输入经过 sigmoid 激活得到 r t r_t rt
- 上一步得到的 r t r_t rt 与上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1相乘得到的结果还有当前时间步 x t x_t xt 的输入,一起经过 tanh 激活函数得到重置过的隐藏状态 h ^ t \hat h_t h^t
- 更新门
- 上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 与当前时间步 x t x_t xt 的输入经过 sigmoid 激活得到 z t z_t zt
- 最后 1 − z t 1-z_t 1−zt 乘以上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 再加上 z t z_t zt乘以重置门得到的 h ^ t \hat h_t h^t的结果作为当前时间步的隐藏状态 h t h_t ht 输出
2.4 Bi-GRU介绍
- Bi-GRU 与 Bi-LSTM 的逻辑相同,都是不改变其内部结构,而是将模型应用两次且方向不同,再将两次得到的 LSTM 结果进行拼接作为最终输出
- 具体参见 1.2 Bi-LSTM介绍
2.5 代码演示
演示代码如下:
import torch
from torch import nndef dm_my_GRU():"""input_size: 输入张量 x中特征维度的大小hidden_size: 隐层张量 h中特征维度的大小num_layers: 隐含层的数量batch_first: 是否选择 在实例化 GRU后 接受 参数的时候, 把批次大小batch_size放在前面 如果为True, 则使用; 默认不使用当 batch_first=True时:输入数据的维度顺序为(batch_size, sequence_length, input_size)第一个维度是批量大小 (batch_size), 即一次处理的数据样本数量第二个维度是序列长度(sequence_length), 即每个样本中的时间步或序列元素数量第三个维度是输入维度(input_size), 即每个时间步的输入特征数量。当 batch_first=False时:输入数据的维度顺序为(sequence_length, batch_size, input_size)。bidirectional: 是否选择使用双向 GRU , 如果为True, 则使用; 默认不使用."""rnn = nn.GRU(5, 6, 2, batch_first=True)# input参数含义 (batch_size, sequence_length, input_size)# 因为使用了 batch_first=Trueinput = torch.randn(1, 3, 5)# 可以传 h0 也可以不传, 实例化的GRU对象会自动创建一个 h0# h0 = torch.randn(2, 3, 6)# output, hn = rnn(input, h0)output, hn = rnn(input)print('GRU的输出结果是:', output)print('GRU的最后输出的隐层张量是:', hn)if __name__ == '__main__':dm_my_GRU()
2.6 GRU的优缺点
- 优点
- GRU 和 LSTM 作用相同,在捕捉长序列语义关联时,能有效抑制梯度消失或爆炸,效果都优于传统 RNN 且计算复杂度相比 LSTM 要小
- 缺点
- GRU 仍然不能完全解决梯度消失问题,同时其作用 RNN 的变体,有着 RNN 结构本身的一大弊端,即不可并行计算,这在数据量和模型体量逐步增大的未来,是 RNN 发展的关键瓶颈
总结
- 以上就是我们总结的 RNN 的变体——LSTM 和 GRU 大致介绍。
相关文章:

九、RNN的变体
RNN的变体 前言一、长短期记忆网络(LSTM)1.1 LSTM结构分析1.1.1 遗忘门1.1.1.1 遗忘门结构图与计算公式1.1.1.2 结构分析1.1.1.3 遗忘门的由来1.1.1.4 遗忘门的内部演示 1.1.2 输入门1.1.2.1 输入门结构图与计算公式1.1.2.2 结构分析1.1.2.3 输入门的内部…...

高级java每日一道面试题-2024年12月07日-JVM篇-如何选择垃圾收集器?
如果有遗漏,评论区告诉我进行补充 面试官: 如何选择垃圾收集器? 我回答: 在Java高级面试中,选择垃圾收集器(Garbage Collector,GC)是一个重要且常见的议题。选择合适的垃圾收集器对于优化应用程序的性能至关重要。以下是对如何…...

棋牌游戏项目ctrl + c无法退出进程问题
棋牌游戏项目ctrl c无法退出进程问题 运行的服务为 user , 启动命令为 cd user && go run main.go启动之前先加入调试语句 在 go func() { metric.Serve(...) } 打日志在 app.Run(...) 打日志 user/main.go var configFile flag.String("config", "…...

论文概览 |《Urban Analytics and City Science》2023.03 Vol.50 Issue.3
本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年3月第50卷第3期的论文的题目和摘要,一共包括18篇SCI论文! 论文1 A new kind of search 一种新型的搜索 【摘要】 ChatGPT (2022) was first launched o…...

前端知识1html
VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span: <span style"color: red;">hello</span> <span>demo</span> span实现: 标题…...

Vue03
目录 一、今日目标 1.生命周期 2.综合案例-小黑记账清单 3.工程化开发入门 4.综合案例-小兔仙首页 二、Vue生命周期 三、Vue生命周期钩子 四、生命周期钩子小案例 1.在created中发送数据 六、工程化开发模式和脚手架 1.开发Vue的两种方式 2.Vue CLI脚手架 基本介绍…...

深入浅出:Gin框架路由与HTTP请求处理
深入浅出:Gin框架路由与HTTP请求处理 引言 在Web开发中,路由和HTTP请求处理是构建API的核心部分。Gin框架作为Go语言中最受欢迎的Web框架之一,提供了简洁而强大的工具来处理这些任务。本文将深入浅出地介绍如何使用Gin框架进行路由定义、处…...

C++初阶——模板初阶
目录 1、如何实现一个通用的交换函数 2、函数模板 2.1 函数模板的概念 2.2 函数模板的格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 3、类模板 3.1 类模板的格式 3.2 类模板的实例化 1、如何实现一个通用的交换函数 void Swap(int& lef…...

y3编辑器文档3:物体编辑器
文章目录 一、物体编辑器简介1.1 界面介绍1.2 复用(导入导出)1.3 收藏夹(项目资源管理)1.4 对象池二、单位2.1 数据设置2.2 表现设置2.3 单位势力和掉率设置2.4 技能添加和技能参数修改2.5 商店2.5.1 商店属性设置2.5.2 商店物品设置三、装饰物3.1 属性编辑3.2 碰撞体积四、…...

Linux-USB驱动实验
USB 是很常用的接口,目前大多数的设备都是 USB 接口的,比如鼠标、键盘、USB 摄像头等,我们在实际开发中也常常遇到 USB 接口的设备,本章我们就来学习一下如何使能 Linux内核自带的 USB 驱动。注意!本章并不讲解具体的 …...

【配置查询】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

JavaWeb学习--cookie和session
目录 (一)Cookie概述 1.什么叫Cookie 2.Cookie规范 3.Cookie的覆盖 4.cookie的最大存活时间 (Cookie的生命) (二) Cookie的API 1.创建Cookie:new 构造方法 2.保存到客户端浏…...

Next.js系统性教学:动态路由与并行路由
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 1. 动态路由 (Dynamic Routes) 1.1 动态路由的基础 1.2 获取动态参数 1.3 动态嵌套路由 1.4 捕获所有动态路由 2. 并行路由 (Parallel Routes) 2.1 并行路由的基础…...

Backblaze 2024 Q3硬盘故障质量报告解读
作为一家在2021年在美国纳斯达克上市的云端备份公司,Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告,给大家提供了一份真实应用场景下的稳定性分析参考数据: 以往报告解读系列参考: Backblaze发布2024 Q2硬盘故障…...

[创业之路-179]:《领先的密码 - BLM核心方法体系与企业实践》主要章节与主要内容
目录 前言: 1、引言或概述 2、BLM方法论的背景与起源 3、BLM方法论的发展与完善 4、BLM方法论的重要性与价值 5、本书的内容与结构 二、BLM核心方法体系 1. 领先的起点 2. 领先的战略 3. 领先的执行 4. 领先之魂 三、本书的核心思想 1、以战略为核心 …...

uniapp的生命周期
在 UniApp 中,生命周期函数是指在组件(如页面、视图等)创建和销毁过程中会自动触发的一些函数。UniApp 提供了多种生命周期函数,帮助开发者在适当的时机进行相关的逻辑处理。 UniApp 的生命周期函数可以分为 页面生命周期 和 组件…...

基于 RNN(GRU, LSTM)+CNN 的红点位置检测(pytorch)
文章目录 1 项目背景2 数据集3 思路4 实验结果5 代码 1 项目背景 需要在图片精确识别三跟红线所在的位置,并输出这三个像素的位置。 其中,每跟红线占据不止一个像素,并且像素颜色也并不是饱和度和亮度极高的红黑配色,每个红线放大…...

L2G3000-LMDeploy 量化部署实践
文章目录 LMDeploy 量化部署实践闯关任务环境配置W4A16 量化 KV cacheKV cache 量化Function call LMDeploy 量化部署实践闯关任务 环境配置 conda create -n lmdeploy python3.10 -y conda activate lmdeploy conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.…...

verilog编程规范
verilog编程规范 文章目录 verilog编程规范前言一、代码划分二、verilog编码ABCDEFG 前言 高内聚,低耦合,干净清爽的代码 一、代码划分 高内聚: 一个功能一个模块干净的接口提取公共的代码 低耦合: 模块之间低耦合尽量用少量…...

飞飞5.4游戏源码(客户端+服务端+工具完整源代码+5.3fix+5.4patch+数据库可编译进游戏)
飞飞5.4游戏源码(客户端服务端工具完整源代码5.3fix5.4patch数据库可编译进游戏) 下载地址: 通过网盘分享的文件:【源码】飞飞5.4游戏源码(客户端服务端工具完整源代码5.3fix5.4patch数据库可编译进游戏) 链…...

【MySQL】——用一文领悟表的增删查改
目录 前言 🍃1.表的增加 🍙1.1增——insert 🍙1.2插入否则更新 🍤1.2.1影响行说明 🍂2.表的查询 🍘2.1查询——select 🍘2.2特殊表查询 🍥2.2.1添加表达式 🍥…...

Zabbix监控Oracle 19c数据库完整配置指南
Zabbix监控Oracle 19c数据库完整配置指南 本文将详细介绍如何使用Zabbix配置Oracle 19c数据库监控,包括安装、配置、问题排查等全过程。本指南适合新手独立完成配置。 1. 环境准备 1.1 系统要求 Oracle 19c数据库服务器Zabbix服务器(版本5.0或更高&a…...

静态路由与交换机配置实验
1.建立网络拓扑 添加2台计算机,标签名为PC0、PC1;添加2台二层交换机2960,标签名为S0、S1;添加2台路由器2811,标签名为R0、R1;交换机划分的VLAN及端口根据如下拓扑图,使用直通线、DCE串口线连接…...

【jvm】讲讲jvm中的gc
目录 1. 说明2. 主要算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法3. 主要回收器3.1 Serial GC3.2 Parallel GC3.3 CMS(Concurrent Mark-Sweep)GC3.4 G1(Garbage-First)GC 4. 触发条件4.1 Minor GC(Young GC&am…...

openlayers地图事件
OpenLayers是一个开源的JavaScript库,用于在Web上创建交互式地图。它提供了许多地图事件,使用户可以与地图进行交互。以下是OpenLayers常用的地图事件: 1. click:当用户单击地图时触发该事件。 2. dblclick:当用户双…...

杂记9---一些场景git操作汇总
背景:不同项目需求,所需要git操作集合,不太一样,这里汇总记录一下。 场景1:给本地项目添加到远程仓库的新建分支上 把本地节点保存在自己库的一个分支: git init git remote add origin xxx.git 远程仓库…...

Mysql索引,聚簇索引,非聚簇索引,回表查询
什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构,类似于书的目录,通过目录可以快速的定位到想要的数据,因为一张表中的数据会有很多,如果直接去表中检索数据效率会很低,所以需要为表中的数据建立…...

【优选算法 二分查找】二分查找算法入门详解:二分查找小专题
x 的平方根 题目解析 算法原理 解法一: 暴力解法 如果要求一个数(x)的平方根,可以从 0 往后枚举,直到有一个数(a),a^2<x,(a1)^2>x,a即为所求; 解法二:二分查找 …...

如何将CSDN博客下载为PDF文件
1.打开CSDN文章内容 2.按键盘上的f12键(或者右键—审查元素)进入浏览器调试模式,点击控制台(Console)进入控制台 3.在控制台输入以下代码,回车 4.在弹出的打印页面中将布局设置成横向,纵向会…...

pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具
一、简介 MinerU是开源、高质量的数据提取工具,支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面,适用于学术、商业、金融、法律等多领域,提高数据获取效率。一站式、开源、高质量的数据提取工具&…...