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

四、自然语言处理_02RNN基础知识笔记

1、RNN的定义

RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络架构,它与传统的前馈神经网络(Feedforward Neural Network)不同,主要区别在于它能够处理输入数据之间的时间依赖性,这使得它特别适合于处理时间序列数据、自然语言文本、语音信号等类型的数据

2、RNN的工作原理与结构

2.1 工作原理

RNN通过在网络中引入循环结构来处理序列数据,使得网络能够在处理当前输入时考虑到之前的所有输入,这种结构允许信息在网络中持续存在,从而实现对序列数据的动态特征抽取

  • 循环结构:网络中的循环允许信息在时间步之间传递(通过循环的方式来抽取时序信号的特征)
  • 逐个处理:序列中的每个元素都被逐一处理,但每个元素的处理都依赖于前一个元素的处理结果
  • 前后依赖:当前的输出不仅依赖于当前的输入,还依赖于之前所有输入的累积效应(前面的处理会影响后面的处理)
  • 中间隐藏状态:RNN通过隐藏状态来存储和传递之前输入的信息,从而实现对序列的长期依赖关系的捕捉

2.2 工作结构

2.3.1 结构图

上图是RNN的工作结构示意图,包含X、A、h三个主要的模块,其简洁地展示了RNN如何通过循环结构处理序列数据,以及如何通过隐藏状态在时间步之间传递信息:

  • 循环结构:图中显示了RNN的核心特性——循环,每个方框 A 代表网络中的一个重复模块(其实也就是权重矩阵),这个模块在每个时间步都会接收新的输入并产生输出

  • 时间步:图中的 X0​,X1​,X2​,…,Xt​ 表示输入序列在不同时间步的输入,例如,如果处理的是文本数据,则 X0​ 可能是第一个词的向量表示,X1​ 是第二个词的向量表示,以此类推

  • 隐藏状态h0​,h1​,h2​,…,ht​ 表示在每个时间步的隐藏状态,隐藏状态是RNN的“记忆”,它携带了之前时间步的信息,在每个时间步,隐藏状态不仅依赖于当前的输入 Xt​,还依赖于前一个时间步的隐藏状态 ht−1​ ,在序列的末尾,最终的隐藏状态 hn​ 可以作为整个序列的上下文信息,用于分类、情感分析等任务

  • 信息传递:在每个时间步,隐藏状态 ht​ 会作为下一个时间步的输入的一部分,这样信息就可以在时间步之间传递,这种传递是通过循环连接实现的,使得网络能够捕捉到序列中元素之间的依赖关系

  • 输出:在每个时间步,RNN可以产生一个输出,这个输出可以是基于当前隐藏状态的,也可以是整个序列处理完毕后的最终输出

  • 参数共享:在RNN中,所有时间步的重复模块“A”共享相同的参数,这意味着无论序列有多长,网络都使用相同的权重来处理每个元素

  • 训练:RNN的训练通常涉及到反向传播算法的变种,如反向传播通过时间(Backpropagation Through Time, BPTT),以处理序列数据的时序特性

2.3.2 示例

对于句子“宝,你吃饭了吗? ”,分词后得到的结果是['宝', ',', '你', '吃饭', '了', '吗', '?'] ,这些词会被循环地进行处理,具体如下: x0​ = “宝”,x0​ 输入到权重矩阵 A ,得到 h0​ (在实际的RNN实现中,如PyTorch或TensorFlow,h0​ 通常是由用户手动初始化的,以确保网络从一个已知的状态开始学习,这是因为RNN在处理序列的第一个元素之前没有先前的隐藏状态可以依赖。)

x1 = “,”,x1​ 再输入到权重矩阵 A ,并与上一步的 h0 相结合,得到 h1​

x2 = “你”,x2 再输入到权重矩阵 A ,并与上一步的 h1 相结合,得到 h2​

x3 = “吃饭'”,x3 再输入到权重矩阵 A ,并与上一步的 h2 相结合,得到 h3

x4 = “了”,x4 再输入到权重矩阵 A ,并与上一步的 h3 相结合,得到 h4​

x5 = “吗”,x5 再输入到权重矩阵 A ,并与上一步的 h4 相结合,得到 h5​

x6 = “?”,x6 再输入到权重矩阵 A ,并与上一步的 h5 相结合,得到 h6​ 最后得到的h6就是最终隐藏状态​,可以作为整个序列的上下文信息

3、RNN的隐藏状态更新公式

上面的公式是RNN中隐藏状态更新的一个常见表达式,它结合了当前时间步的输入和前一时间步的隐藏状态,具体说明如下:

  • xt​:在时间步 t 的输入向量,表示当前输入
  • Wih​:输入到隐藏状态的权重矩阵,用于将当前输入 xt​ 转换为隐藏状态的输入部分
  • Whh​:隐藏状态到隐藏状态的权重矩阵,用于将前一时间步的隐藏状态 ht−1​ 传递到当前时间步
  • bih​ 和 bhh​:分别是输入和隐藏状态的偏置项
  • tanh:激活函数,通常用于引入非线性特性,使模型能够学习复杂的模式
  • ht​:输出结果,即:在时间步 t 的隐藏状态,表示当前时间步的记忆

Tanh激活函数与‌Sigmoid、ReLU的区别:

  • 输出范围

    • Sigmoid函数‌:输出范围在0到1之间,其输出值可以被看作是一个概率值,用于表示某个事件发生的概率‌

    • ReLU函数‌:输出范围在0到正无穷之间,输入小于0时输出为0,输入大于0时输出等于输入值

    • Tanh函数‌:输出范围在-1到1之间

  • 梯度特性

    • Sigmoid函数‌:在输入值较大或较小时,梯度接近于0,导致训练过程中梯度消失的问题;此外,Sigmoid函数的计算开销较大,涉及指数运算,可能会影响大规模数据和深层网络的计算效率‌

    • ReLU函数‌:在正值区间内具有线性特性,解决了梯度消失问题;ReLU函数在负值区间梯度为0,可能导致一些神经元永远不会被激活,从而停止更新‌

    • ‌Tanh函数‌:也存在梯度饱和的问题,但其输出值范围在-1到1之间,相对于Sigmoid函数,其输出值范围更大,可能导致模型学习更快‌

  • 适用场景

    • Sigmoid函数‌:适用于二分类问题或输出概率的场景

    • ReLU函数‌:适用于需要快速计算的场景,特别是在深层网络中,因为它解决了梯度消失问题,并且在正值区间内具有线性特性,所以计算速度很快‌

    • Tanh函数‌:通常用于隐藏层的激活函数,因为其输出范围更广,可以更好地表示数据的分布‌

4、RNN的使用方法及示例

由于时序数据通常需要进行向量转换(如文本词向量),经过训练和预测后,再解析为用户所需内容,所以整个处理过程通常会包含编码器和解码器两部分

在深度学习框架(如PyTorch)中,,RNN可以通过以下两种方式结合使用:

  • nn.RNN:这是一个封装好的RNN层,可以自动处理循环逻辑,通常用于编码器部分
  • nn.RNNCell:这是一个基本的RNN单元,需要手动实现循环逻辑,通常用于解码器部分,特别是在需要更精细控制的场景下

nn.RNN示例:

import torch 
from torch import nn# 定义输入语句和初始隐藏状态h0
# 5表示序列长度(sequence length),3表示批次大小(batch size),10表示每个时间步的输入特征数(input size)
X = torch.randn(5, 3, 10)
# 1表示RNN层的数量(这里只有一层),3表示批次大小,20表示隐藏层的维度(hidden size)
h0 = torch.zeros(1, 3, 20, dtype=torch.float32)# 调用RNN(与input和h0的最后一个参数相对应)
rnn = nn.RNN(input_size=10, hidden_size=20)
# 获得output和hn(output包含了每个时间步的隐藏状态的输出,hn只包含最后一个时间步的隐藏状态)
output, hn = rnn(X, h0)# 查看output和hn的形状和内容
print(output.shape, hn.shape)
print(output)
print(hn)

nn.RNNCell示例:

import torch 
from torch import nnX = torch.randn(5, 3, 10)
hn = torch.zeros(3, 20, dtype=torch.float32)
# 定义一个output空列表,用于存储每个时间步的隐藏状态
output = []# 调用RNN(与input和hn的最后一个参数相对应)
rnn_cell = nn.RNNCell(input_size=10, hidden_size=20)# 循环存储每个时间步的隐藏状态
for x in X:hn = rnn_cell(x, hn)output.append(hn)# 将列表中的所有隐藏状态堆叠成一个张量,形状为 (sequence_length, 3, 20)
output = torch.stack(output)# 查看output的形状和内容
print(output.shape)
print(output)

相关文章:

四、自然语言处理_02RNN基础知识笔记

1、RNN的定义 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络架构,它与传统的前馈神经网络(Feedforward Neural Network)不同,主要区别在于它能够处理输入数…...

Spring 容器管理 Bean

Bean是什么 Bean 是指 Java 中的可重用软件组件,容器会根据提供的元数据来创建和管理这些 Bean,也包括它们之间的依赖关系。Spring 容器对 Bean 并没有太多的要求,无须实现特定接口或依赖特定库,只要是最普通的 Java 对象即可,这类对象也被称为 POJO(Plain Old Java Obj…...

SpringBoot开发——Spring Boot3.4 强大的结构化日志记录

文章目录 1. 简介2. 实战案例2.1 环境依赖2.2 快速入门2.3 输出到文件2.4 添加附加字段2.5 自定义日志格式总结1. 简介 日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发…...

信号和槽思维脑图+相关练习

将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…...

Unity Feel插件快速入门

What is Feel? Feel是一个即用型解决方案,让你的Unity项目提高游戏体验,增强玩家获得的反馈感,例如相机震动,屏幕闪烁,淡入淡出,等等几十种效果。这是一个模块化、用户友好、易于扩展的系统。 本文旨在让你快速入门,从全局快速了解这个插件,以及基本用…...

数据链路层(四)---PPP协议的工作状态

1 PPP链路的初始化 通过前面几章的学习,我们学了了PPP协议帧的格式以及组成,那么对于使用PPP协议的链路是怎么初始化的呢? 当用户拨号上网接入到ISP后,就建立起了一条个人用户到ISP的物理链路。这时,用户向ISP发送一…...

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets

插件名称:UPIrregularWidgets 插件包含以下功能 你可以点击任何图片,而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能,复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…...

Elasticsearch Serverless 现已正式发布

作者:来自 Elastic Yaru Lin 基于全新无状态(stateless)架构的 Elasticsearch Serverless 现已正式发布。它采用完全托管方式,因此你可以快速启动项目而无需操作或升级,并且可以使用最新的向量搜索和生成式 AI 功能。 …...

如何使用apache部署若依前后端分离项目

本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…...

openEuler安装UKUI桌面

# 升级更新 sudo yum -y update # 安装UKUI界面 dnf install ukui # 设置图形启动 systemctl set-default graphical.target # 重启 # 查看当前系统启动模式 systemctl get-default # 修改默认启动模式为 命令行界面模式 systemctl set-default multi-user.target 在UK…...

深入理解Oracle DB的锁和闩

1. 引言 本文深入介绍Oracle DB的锁和闩。 2. Oracle DB 锁的基本概念 2.1 定义与作用 锁是 Oracle 数据库用于控制并发访问的一种机制。它用于防止多个事务同时对同一数据进行不一致的操作,确保数据的完整性和一致性。例如,当一个事务正在更新一行数…...

jenkins+github+springboot自动部署

背景: 最近看流水线有点意思,就说自己也搞一套。 预期效果: idea提交代码后,GitHub接收,jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…...

HTML5系列(10)-- 地理位置服务指南

前端技术探索系列:HTML5 地理位置服务指南 🌍 致读者:探索位置服务的魅力 👋 前端开发者们, 今天我们将深入探讨 HTML5 的地理位置服务(Geolocation API),这项强大的功能让我们能…...

【MySQL 进阶之路】SQL 优化

6.SQL 性能分析笔记 在现代数据库的高并发环境下,SQL 查询优化成为提升系统性能和响应速度的关键。本文将总结常见的 SQL 优化策略,包括插入优化、主键设计、排序优化、GROUP BY 优化等,帮助你在面对大规模数据时,做到高效查询和…...

Web3的技术栈详解:解读区块链、智能合约与分布式存储

随着数字时代的不断发展,Web3作为下一代互联网的核心理念逐渐走进了大众视野。它承载着去中心化、用户主权以及更高效、更安全的网络环境的期望。Web3不再是由少数中心化机构主导的网络,而是通过一系列核心技术的支撑,给每个用户赋予了更多的…...

[在线实验]-在docker中运行clickhouse

镜像下载 docker的clickhouse镜像资源-CSDN文库 加载镜像 首先,需要获取ClickHouse的Docker镜像。如果已经有镜像文件(如clickhouse.tar),可以使用docker load命令来加载它: docker load --input clickhouse.tar …...

Rust常用命令总结

安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖:安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...

Ant-Design X,AI组件库

前端的小伙伴们都知道有一个前端组件库超级火,可以说是 Top1 级别的,那就是 Ant-Design 而就在最近,他们又推出了一款新的组件库,Ant-Design X,这是专门用来做 AI 产品 的组件库,可能大家还很疑惑&#xf…...

Matplotlib 内置的170种颜色映射(colormap)

Matplotlib 提供了许多内置的颜色映射(colormap)选项,可以将数值数据映射到色彩范围——热力图、温度图、地图等可视化经常会用到。 # colormap 有两种引用形式plt.imshow(data, cmapBlues)plt.imshow(data, cmapcm.Blues) 颜色映射可以分为…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...