四、自然语言处理_03LSTM与GRU
0、前言
随着循环神经网络(RNN)在各种序列数据处理任务中被广泛应用,研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)问题,限制了其在实际应用中的有效性
-
梯度消失问题:在RNN中,信息需要通过隐藏状态在时间步之间传递,当序列很长时,如果权重矩阵的谱半径(spectral radius)小于1,那么在反向传播过程中,梯度会随着时间步的增加而指数级减小,这导致网络在处理长序列时只能捕捉到局部的模式,无法有效地利用序列中的长距离依赖信息
-
梯度爆炸问题:与梯度消失相反,梯度爆炸指的是梯度在反向传播的过程中随着时间步的增加而指数级增大,从而导致权重更新过大,使得网络训练变得不稳定,甚至导致权重更新失效(梯度爆炸通常需要通过梯度裁剪(gradient clipping)等技术来缓解)
为了解决这些问题,研究人员提出了多种改进的RNN结构,其中最成功的两种分别是LSTM和GRU:
-
LSTM(Long Short-Term Memory,长短期记忆网络):通过引入细胞状态(cell state)和三个门控机制(输入门、遗忘门、输出门)来控制信息的流动,从而有效地解决了梯度消失问题,并允许梯度在时间步之间更稳定地传播
-
GRU(Gated Recurrent Unit,门控循环单元):作为LSTM的简化版本,GRU合并了LSTM中的遗忘门和输入门为一个更新门,同时引入了重置门,GRU的结构更简单,参数更少,但在很多情况下能够达到与LSTM相似的性能
1、LSTM基本介绍
1.1 定义
LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊类型的循环神经网络(RNN),设计用于解决标准RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题,LSTM能够学习长期依赖信息,使得它在处理序列数据方面非常有效(尤其是在时间序列预测、自然语言处理和其他需要捕捉长期依赖关系的任务中)
1.2 核心组件
LSTM的核心思想是门控思想,即:先用遗忘门丢掉一部分不重要信息,再用输入门增加重要的信息
其核心组件如下:
-
细胞状态(Cell State):LSTM的核心是一个细胞状态(也称记忆细胞),它类似于一个传送带,可以沿着序列的长度保持信息,这个状态允许信息在序列中流动,而不会衰减
-
遗忘门(Forget Gate):遗忘门控制细胞状态中哪些信息需要被遗忘,它也通过一个sigmoid激活函数来决定哪些值需要丢弃
-
输入门(Input Gate):输入门控制新信息的流入,它通过一个sigmoid激活函数来决定哪些值需要更新
-
候选记忆单元(Candidate Memory Cell):候选记忆单元是细胞状态的候选更新,通过一个tanh激活函数生成,用于在更新细胞状态时提供新的信息
-
输出门(Output Gate):输出门控制细胞状态的哪一部分将被输出到隐藏状态,它通过一个sigmoid激活函数来决定输出的值,并通过一个tanh函数来生成新的候选值,这些值将被加到细胞状态上
1.3 调用示例
编码器nn.LSTM:
import torch
from torch import nn# 定义输入语句
X = torch.randn(5, 3, 10)
# 定义初始短期状态
h0 = torch.zeros(1, 3, 20, dtype=torch.float32)
# 定义初始长期状态
c0 = torch.zeros(1, 3, 20, dtype=torch.float32)# 调用LSTM
lstm = nn.LSTM(input_size=10, hidden_size=20)
output, (hn, cn) = lstm(X, (h0, c0))# 查看output、hn、cn的形状和内容
print(output.shape, hn.shape, cn.shape)
print(output)
print(hn)
print(cn)
解码器nn.RNNCell:
import torch
from torch import nnX = torch.randn(5, 3, 10)
hn = torch.zeros(3, 20, dtype=torch.float32)
cn = torch.zeros(3, 20, dtype=torch.float32)output = []lstm_cell = nn.LSTMCell(input_size=10, hidden_size=20)for x in X:hn, cn = lstm_cell(x, (hn, cn))output.append(hn)output = torch.stack(output)print(output.shape)
print(output)
2、GRU基本介绍
2.1 定义
门控循环单元(Gated Recurrent Unit,简称GRU)也是一种特殊类型的循环神经网络(RNN),具体来说,其属于LSTM的简化版,也可用于解决标准RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题
2.2 核心组件
同样是门控思想,其核心组件如下:
-
更新门(Update Gate):更新门决定了网络在当前时间步应该保留多少过去的信息,以及应该丢弃多少新信息,它通过一个sigmoid激活函数来实现
-
重置门(Reset Gate):重置门控制着网络在当前时间步应该忽略多少过去的信息,它也通过一个sigmoid激活函数来实现。
-
候选隐藏状态(Candidate Hidden State):候选隐藏状态是当前时间步的潜在隐藏状态,它结合了重置门的输出和前一时间步的隐藏状态
2.3 调用示例
调用过程与RNN极其相似
编码器nn.GRU:
import torch
from torch import nnX = torch.randn(5, 3, 10)
h0 = torch.zeros(1, 3, 20, dtype=torch.float32)gru = nn.GRU(input_size=10, hidden_size=20)
output, hn = gru(X, h0)print(output.shape, hn.shape)
print(output)
print(hn)
解码器nn.GRUCell:
import torch
from torch import nnX = torch.randn(5, 3, 10)
hn = torch.zeros(3, 20, dtype=torch.float32)output = []gru_cell = nn.GRUCell(input_size=10, hidden_size=20)for x in X:hn = gru_cell(x, hn)output.append(hn)output = torch.stack(output)print(output.shape)
print(output)
相关文章:

四、自然语言处理_03LSTM与GRU
0、前言 随着循环神经网络(RNN)在各种序列数据处理任务中被广泛应用,研究人员逐渐发现了其在处理长序列数据时会容易出现梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)问题&…...
磁盘系列基础知识(一):硬盘;IDE;ATA;SATA;AHCI;SCSI;SAS
磁盘系列基础知识(一)硬盘 IDE ATA SATA AHCI SCSI SAS 硬盘厂家 西部数据Western Digital/WD. 希捷 SEAGATE、三星 SAMSUNG、东之 Toshiba、英特尔 Intel、金士顿 Kingston、闪迪 SanDisk、 英睿达 Crucial、浦科特 Plextor 硬盘类别 HDD (…...
taro小程序进入腾讯验证码
接入原因 昨天突然晚上有人刷我们公司的登录发送短信接口,紧急将小程序的验证码校验更新上去了 接下来就是我们的接入方法,其实很简单,不过有时候可能大家着急就没有仔细看文档,腾讯验证码文档微信小程序地址,注意这里…...
原子类相关
原子引用 JUC 并发包提供了: AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

RabbitMQ 客户端 连接、发送、接收处理消息
RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务,不是像其他服务器一样,负责逻辑处理,然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息, 第一步&a…...

Java Web 3 Axios Vue组件库
一 Ajax 1 同步 异步 2 原生Ajax 比较繁琐 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…...

双目相机的标定,视差图,深度图,点云生成思路与实现。
该文档记录从双目相机标定到点云生成的所有过程,同时会附上代码。 代码直接能跑。https://github.com/stu-yzZ/stereoCamera 目录 大致思路如下: 一、相机标定 1、相机参数介绍 2、单目相机标定 3、双目相机标定 二、图片畸变矫正 三、极线矫正…...

【H2O2|全栈】MySQL的基本操作(三)
目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询,与单表查询…...
2、C++命名空间
命名空间 命名空间是一种用来避免命名冲突的机制; 原理是将一个全局的作用域分成一个个命名空间,每个命名空间是个单独的作用域,从而有效避免命名冲突。 注意:命名空间定义在全局 命名空间定义格式 使用: …...

Elemenu-UI时间日期单个组件,限制当前日期之后的时间
element的时间日期组件, type"datetime" ,当你设置了:picker-options"pickerOptions"之后 pickerOptions: { disabledDate(time) { return time.getTime() > Date.now(); }, }, 会发现,他只会限制日期,但不…...
flutter修改状态栏学习
在flutter中如何动态更改状态栏的颜色和风格。 前置知识点学习 AnnotatedRegion AnnotatedRegion 是 Flutter 中的一个小部件,用于在特定区域中提供元数据(metadata)以影响某些系统级的行为或外观。它通常用于改变系统 UI 的外观ÿ…...

解决Unity编辑器Inspector视图中文注释乱码
1.问题介绍 新创建一个脚本,用VS打开编辑,增加一行中文注释保存,在Unity中找到该脚本并选中,Inspector视图中预览的显示内容,该中文注释显示为乱码,如下图所示: 2.图示解决步骤 按上述步骤操作…...
关于csgo的游戏作弊与封禁
关于csgo的游戏作弊与封禁 一.关于作弊 什么叫作弊? 1.换肤,换库存 2.各种参(回溯,自瞄,透视,急停,连跳,假身,子弹跟踪等) 3.某一部分更改游戏内存&…...

严格单元测试造就安全软件
在信息技术迅速发展的今天,软件在各个行业中扮演着至关重要的角色,尤其是在汽车行业,其中软件的可靠性和安全性直接影响到人们的生命安全。软件缺陷所带来的潜在风险不容小觑,尤其在涉及到自动驾驶和车辆控制等关键系统时…...
ubuntu 根分区逻辑卷扩容
1、虚拟机关机通过管理界面给磁盘扩容。 rootcurtis:/home/curtis/git_code# pvdisplay--- Physical volume ---PV Name /dev/vda3VG Name ubuntu-vgPV Size <239.00 GiB / not usable 0Allocatable yes (but full)PE…...
如何查看电脑生产日期
查看电脑的生产日期通常可以通过以下方法实现,具体方式取决于操作系统和电脑类型: 方法 1:检查电脑 BIOS 生产日期通常记录在 BIOS 中。可以通过以下步骤查看: 重启电脑并进入 BIOS: 启动时按下特定的键(…...
MAC M1 mysql 8.0 如何修改root用户密码
关闭mysql服务 使用brew方式安装,可以通过一下命令关闭 brew services stop mysql使用安装包安装的方式 可以选择🍎->系统偏好设置->最下方单机MySQL图标->stop mysql server 启动 MySQL 到安全模式 sudo mysqld_safe --skip-grant-tables …...

漫画之家系统:Spring Boot框架下的漫画版权保护
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...

在 MacOS 上为 LM Studio 更换镜像源
在 MacOS 之中使用 LM Studio 部署本地 LLM时,用户可能会遇到无法下载模型的问题。 一般的解决方法是在 huggingface.co 或者国内的镜像站 hf-mirror.com 的项目介绍卡页面下载模型后拖入 LM Studio 的模型文件夹。这样无法利用 LM Studio 本身的搜索功能。 本文将…...

Nginx配置https(Ubuntu、Debian、Linux、麒麟)
Ubuntu操作系统,Debian系统底层是Ubuntu,差异不大 ubuntu 安装nginx 1.安装依赖 sudo apt-get update sudo apt-get install gcc sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install zlib1g zlib1g-dev sudo apt-get install openssl lib…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...