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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484532.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

梯度提升树(GBDT)与房价预测案例

文章目录 什么是梯度提升树(GBDT)?核心思想GBDT 的特点 梯度提升树的应用案例:房价预测场景描述步骤详解代码详情 详细代码讲解1. 导入必要的库2. 设置中文字体支持3. 可视化真实值与预测值4. 可视化预测误差分布5. 代码的运行效果…

Rust : 生成日历管理markdown文件的小工具

需求: 拟生成以下markdown管理小工具,这也是我日常工作日程表。 可以输入任意时间段,运行后就可以生成以上的markdown文件。 一、toml [package] name "rust-workfile" version "0.1.0" edition "2021"[d…

Linux网络:代理 穿透 打洞

Linux网络:代理 & 穿透 代理正向代理反向代理 内网穿透frp 内网打洞 代理 正向代理 正向代理是一种常见的网络代理方式,它位于客户端与目标服务器之间,代表客户端向服务器发送请求,接收响应。 如图,客户端发送的…

给el-table表头添加icon图标,以及鼠标移入icon时显示el-tooltip提示内容

在你的代码中,你已经正确地使用了 el-tooltip 组件来实现鼠标划过加号时显示提示信息。el-tooltip 组件的 content 属性设置了提示信息的内容,placement 属性设置了提示信息的位置。 你需要确保 el-tooltip 组件的 content 属性和 placement 属性设置正…

游戏引擎学习第30天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中,重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾:在第30天,回顾了前一天的工作,并提到今天的任务是继续从第29天的代码开始&#xff0c…

python使用python-docx处理word

文章目录 一、python-docx简介二、基本使用1、新建与保存word2、写入Word(1)打开文档(2)添加标题(3)添加段落(4)添加文字块(5)添加图片(6&#xf…

springboot kafka在kafka server AUTH变动后consumer自动销毁

前言 笔者使用了kafka用来传输数据,笔者在今年10月写了文章,怎么使用配置化实现kafka的装载:springboot kafka多数据源,通过配置动态加载发送者和消费者-CSDN博客 不过在实际运行中,kafka broker是加密的&#xff0c…

Jupyter Lab打印日志

有时候在 jupyter 中执行运行时间较长的程序,且需要一直信息,但是程序执行到某些时候就不再打印了。 可以开启 日志控制台,将日志信息记录在控制台中。 参考:https://www.autodl.com/docs/jupyterlab/

EtherCAT转ProfiNet网关实现西门子1200PLC与伺服电机连接的通讯案例

一. 案例背景 西门子1200PLC通过捷米特JM-ECTM-PN(EtherCAT转ProfiNet)网关将松下伺服电机(包括不限于型号MHMFO22D1U2M)或EtherCAT协议的其它设备或连接到ProfiNetPLC上,并在正常运行中支持EtherCAT协议。本产品可作为EtherCAT主站,做为西门子S7-1200系…

Redis 基础、Redis 应用

Redis 基础 什么是 Redis? Redis (REmote DIctionary Server)是一个基于 C 语言开发的开源 NoSQL 数据库(BSD 许可)。与传统数据库不同的是,Redis 的数据是保存在内存中的(内存数据库&#xf…

Vue 组件通信全面解析

Vue 组件通信全面解析:方式、原理、优缺点及最佳实践 在 Vue 开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式…

Python-链表数据结构学习(1)

一、什么是链表数据? 链表是一种通过指针串联在一起的数据结构,每个节点由2部分组成,一个是数据域,一个是指针域(存放下一个节点的指针)。最后一个节点的指针域指向null(空指针的意思&#xff0…

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

ISAAC SIM踩坑记录--添加第三方3D场景

ISAAC SIM仿真首先就是要有合适的3D场景,官方提供了一些场景,如果不能满足要求,那就只能自己建。 对于我这种不会3D建模的菜鸟,只能到网上下载了,sketchfab就是一个不错的平台,有不少免费资源可以下载。 …

CentOS 9 配置静态IP

文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布,基于 RHEL 7,并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本,今天闲来闲来无事下载下来后…

C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合

无源蜂鸣器是一种多功能的声音输出设备,与有源蜂鸣器相比,它能够通过不同频率的方波生成丰富多样的音调。本项目使用树莓派Pico开发板,通过编程控制无源蜂鸣器播放经典旋律《归来有风》。本文将详细介绍项目实现中的硬件连接、C++代码解析,以及无源蜂鸣器的工作原理。 一、…

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!! 【VScode】VSCode中的智能AI-G…

Runway 技术浅析(六):文本到视频(Text-to-Video)

1. 核心组件与工作原理 1.1 自然语言处理(NLP) 1.1.1 文本解析与语义理解 文本到视频的第一步是将用户输入的自然语言文本解析为机器可理解的语义信息。Runway 使用预训练的 NLP 模型,如 GPT-3 和 BERT,这些模型通过大规模文本数…

【C++】双温度转换与并联电阻计算的编程题分析与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯从华氏温度到摄氏温度的转换题目背景与华氏温度与摄氏温度的转换初始代码与验证通过的解法代码分析特点与优缺点 老师的代码:结合 C 与 C 的风格代码分析与对比…

【采样率、采样定理、同步和异步采样】

内容来源:【数据采集卡的【采样率】【采样定理】【同步采样】【异步采样】的相关说明】 此篇文章仅作笔记分享。 前言 模拟信号需要通过采样、储存、量化、编码这几个步骤转换成数字信号,本篇文章将会对采样进行一个更详细的说明。 采样 采样就是将一…