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

四、自然语言处理_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…...

双目相机的标定,视差图,深度图,点云生成思路与实现。

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

【H2O2|全栈】MySQL的基本操作(三)

目录 前言 开篇语 准备工作 案例准备 多表查询 笛卡尔积 等值连接 外连接 内连接 自连接 子查询 存在和所有 含于 分页查询 建表语句 结束语 前言 开篇语 本篇继续讲解MySQL的一些基础的操作——数据字段的查询中的多表查询和分页查询&#xff0c;与单表查询…...

2、C++命名空间

命名空间 命名空间是一种用来避免命名冲突的机制; 原理是将一个全局的作用域分成一个个命名空间&#xff0c;每个命名空间是个单独的作用域,从而有效避免命名冲突。 注意&#xff1a;命名空间定义在全局 命名空间定义格式 使用&#xff1a; …...

Elemenu-UI时间日期单个组件,限制当前日期之后的时间

element的时间日期组件&#xff0c; type"datetime" &#xff0c;当你设置了:picker-options"pickerOptions"之后 pickerOptions: { disabledDate(time) { return time.getTime() > Date.now(); }, }, 会发现&#xff0c;他只会限制日期&#xff0c;但不…...

flutter修改状态栏学习

在flutter中如何动态更改状态栏的颜色和风格。 前置知识点学习 AnnotatedRegion AnnotatedRegion 是 Flutter 中的一个小部件&#xff0c;用于在特定区域中提供元数据&#xff08;metadata&#xff09;以影响某些系统级的行为或外观。它通常用于改变系统 UI 的外观&#xff…...

解决Unity编辑器Inspector视图中文注释乱码

1.问题介绍 新创建一个脚本&#xff0c;用VS打开编辑&#xff0c;增加一行中文注释保存&#xff0c;在Unity中找到该脚本并选中&#xff0c;Inspector视图中预览的显示内容&#xff0c;该中文注释显示为乱码&#xff0c;如下图所示&#xff1a; 2.图示解决步骤 按上述步骤操作…...

关于csgo的游戏作弊与封禁

关于csgo的游戏作弊与封禁 一.关于作弊 什么叫作弊&#xff1f; 1.换肤&#xff0c;换库存 2.各种参&#xff08;回溯&#xff0c;自瞄&#xff0c;透视&#xff0c;急停&#xff0c;连跳&#xff0c;假身&#xff0c;子弹跟踪等&#xff09; 3.某一部分更改游戏内存&…...

严格单元测试造就安全软件

在信息技术迅速发展的今天&#xff0c;软件在各个行业中扮演着至关重要的角色&#xff0c;尤其是在汽车行业&#xff0c;其中软件的可靠性和安全性直接影响到人们的生命安全。软件缺陷所带来的潜在风险不容小觑&#xff0c;尤其在涉及到自动驾驶和车辆控制等关键系统时&#xf…...

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…...

如何查看电脑生产日期

查看电脑的生产日期通常可以通过以下方法实现&#xff0c;具体方式取决于操作系统和电脑类型&#xff1a; 方法 1&#xff1a;检查电脑 BIOS 生产日期通常记录在 BIOS 中。可以通过以下步骤查看&#xff1a; 重启电脑并进入 BIOS&#xff1a; 启动时按下特定的键&#xff08;…...

MAC M1 mysql 8.0 如何修改root用户密码

关闭mysql服务 使用brew方式安装&#xff0c;可以通过一下命令关闭 brew services stop mysql使用安装包安装的方式 可以选择&#x1f34e;->系统偏好设置->最下方单机MySQL图标->stop mysql server 启动 MySQL 到安全模式 sudo mysqld_safe --skip-grant-tables …...

漫画之家系统:Spring Boot框架下的漫画版权保护

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&a…...

在 MacOS 上为 LM Studio 更换镜像源

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

Nginx配置https(Ubuntu、Debian、Linux、麒麟)

Ubuntu操作系统&#xff0c;Debian系统底层是Ubuntu&#xff0c;差异不大 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…...

SEM教程丨如何用“场景词”突围,月揽165个询盘?

很多工业设备老板觉得SEM就是“谁出价高谁就赢”&#xff0c;结果往往是钱烧了一大堆&#xff0c;机器没卖出去几台。今天我们要复盘的是某食品安检设备公司的实操案例&#xff0c;看看它是如何摆脱“无效烧钱”&#xff0c;稳稳拿下月均165个精准咨询的 &#x1f34e;。 一、 …...

微信AI机器人终极指南:如何用开源工具打造智能群聊助手

微信AI机器人终极指南&#xff1a;如何用开源工具打造智能群聊助手 【免费下载链接】wechat-bot &#x1f916;一个基于 WeChaty 结合 ChatGPT / Claude / Kimi / DeepSeek / Ollama等Ai服务实现的微信机器人 &#xff0c;可以用来帮助你自动回复微信消息&#xff0c;或者社群分…...

R3nzSkin国服换肤工具:免费体验所有英雄联盟皮肤的终极指南

R3nzSkin国服换肤工具&#xff1a;免费体验所有英雄联盟皮肤的终极指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否梦想在英雄联盟国服中免费…...

GESP6级C++考试语法知识(二十一、深度优先搜索(一、DFS 一条路走到黑))

第一课《迷宫探险队》——DFS 到底是什么&#xff1f;&#x1f31f;一、故事开始&#xff1a;勇敢的小骑士1、很久很久以前&#xff0c;在算法王国里&#xff0c;有一座神秘的迷宫城堡。2、城堡里面&#xff1a;有墙壁有陷阱有死路还有一颗“黄金宝石”✨3、国王说&#xff1a;…...

IfcOpenShell技术架构深度解析:开源IFC引擎的模块化设计与高性能实现

IfcOpenShell技术架构深度解析&#xff1a;开源IFC引擎的模块化设计与高性能实现 【免费下载链接】IfcOpenShell Open source IFC library and geometry engine 项目地址: https://gitcode.com/gh_mirrors/if/IfcOpenShell IfcOpenShell作为开源建筑信息模型&#xff08…...

FanControl中文设置终极指南:5步让Windows风扇控制说中文

FanControl中文设置终极指南&#xff1a;5步让Windows风扇控制说中文 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...

RISC-V SoC中TileLink互连验证IP的设计与实战应用

1. 项目概述&#xff1a;为什么RISC-V SoC需要一个专门的TileLink验证IP&#xff1f;如果你正在设计或验证一个基于RISC-V的片上系统&#xff08;SoC&#xff09;&#xff0c;尤其是当它集成了多个处理器核心、加速器、DMA控制器和各种内存控制器时&#xff0c;那么“互连”这个…...

极域电子教室防控制软件JiYuTrainer:重获学习自主权的智能解决方案

极域电子教室防控制软件JiYuTrainer&#xff1a;重获学习自主权的智能解决方案 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在计算机课堂上被极域电子教室的全屏广播限…...

告别编译报错!手把手教你为最新版Keil MDK安装ARM Compiler 5(保姆级图文)

嵌入式开发者的救星&#xff1a;彻底解决Keil MDK缺失ARM Compiler 5的终极方案 当你满怀信心地打开一个历史遗留的嵌入式项目&#xff0c;准备进行功能迭代时&#xff0c;Keil MDK突然弹出一个冰冷的错误窗口&#xff1a;"Error: Compiler V5.06 update 7 (build 960) no…...

FPGA 51,基于 ZYNQ 7Z010 的 FPGA 高速路由转发加速系统架构设计(Xilinx ZYNQ-MINI 7Z010 CLG400 -1)

目录 前言 一、系统整体架构设计 1.1 设计目标与性能指标...