七、传统循环神经网络(RNN)
传统循环神经网络 RNN
- 前言
- 一、RNN 是什么?
- 1.1 RNN 的结构
- 1.2 结构举例
- 二、RNN 模型的分类
- 2.1 按照 输入跟输出 的结构分类
- 2.2 按照 内部结构 分类
- 三、传统 RNN 模型
- 3.1 RNN内部结构图
- 3.2 内部计算公式
- 3.3 其中 tanh 激活函数的作用
- 3.4 传统RNN优缺点
- 四、代码演示
- 总结
前言
- 前面我们学习了卷积神经网络CNN,通过对图像做卷积运算来提取到图片的局部特征,但是在文本中,我们该怎么对文本进行张量转换,并且让机器学习到文本前后的联系呢,接下里我们将对文本领域的循环神经网络进行讲解。
一、RNN 是什么?
- RNN(Recurrent Neural Network),中文称作循环神经网络:它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。
1.1 RNN 的结构
- 一般单层神经网络结构:
- RNN单层网络结构:
- 以时间步对RNN进行展开后的单层网络结构:
RNN 的循环机制能够使模型的隐藏层上一步产生的结果,作为当下时间步输入的一部分(当下时间步的输入除了正常输入之外,还包括上一步的隐层输出)对当下时间步的输出产生影响。
1.2 结构举例
- 我们前面说RNN能有效捕捉序列之间的关系特征,下边我们举个例子:
- 假如用户输入了一段话:“What time is it ?”,那么机器是怎么捕捉他们之间的序列关系的呢?
- 第一步:先对输入的 “What time is it ?” 进行分词,因为RNN是按照输入顺序来工作的,每次都接受一个单词进行处理。
- 第二步:首先将一个单词 “What” 输入进RNN,他将产生一个输出 O 1 O1 O1
- 第三步:继续将单词 “time” 输入到 RNN,此时 RNN 不仅利用 “time” 来产生 O 2 O2 O2,还会使用上次隐藏层的输出 O 1 O1 O1作为输入信息
- 第四步 :重复第三步,知道将所有单词输入
- 第五步:最后将隐藏层的输出 O 5 O5 O5 进行处理来理解用户意图
- 第一步:先对输入的 “What time is it ?” 进行分词,因为RNN是按照输入顺序来工作的,每次都接受一个单词进行处理。
二、RNN 模型的分类
2.1 按照 输入跟输出 的结构分类
- N vs N
- 这种结构是RNN最基础的机构形式,最大的特点就是:输入跟输出序列是等长的
- 由于这种限制的存在,使其适用范围较小,可以用于生成的等长的诗句或对联。
- N vs 1
- 当我们输入的问题是一个序列,而要求输出是单个的一个值而不是序列,这时候我们就要在最后一个隐藏层的输出上进行线性变化了。
- 大部分情况下,为了更好的明确结果,还要使用 sigmoid 或者 softmax 进行处理,这样的结构经常用于文本分类问题上。
- 1 vs N
- 如果输入的不是一个序列,而要求输出是一个序列,那我们就要让每次的输入都作用到每次的输出上
- 一般用来将图片生成文字任务、
- N vs M
- 这是一种不限输入输出长度的RNN结构,它由编码器和解码器两部分组成,两者的内部结构都是某类RNN,它也被称为 seq2seq 架构
- 输入数据首先通过编码器,最终输出一个隐含变量 c c c,之后最常用的做法是使用这个隐含变量 c c c 作用在解码器进行解码的每一步上,以保证输入信息被有效利用。
- seq2seq架构最早被提出应用于机器翻译,因为其输入输出不受限制,如今也是应用最广的RNN模型结构。
- 在机器翻译, 阅读理解, 文本摘要等众多领域都进行了非常多的应用实践。
2.2 按照 内部结构 分类
- 我们先介绍分为几种,对于其工作原理
- 在之后的章节中,我们再进行详细讨论
- 传统RNN
- LSTM
- Bi-LSTM
- GRU
- Bi-GRU
三、传统 RNN 模型
3.1 RNN内部结构图
- 解释:
- 隐藏层也就是循环层接收到的是当前时间步的输入 X t X_t Xt 和上个时间步的隐藏层的输出 h t − 1 h_{t-1} ht−1
- 这两个进入RNN结构体中,各自有跟权重矩阵进行运算以后,会融合到一起(也就是拼接到一起),形成新的张量 [ X t , h t − 1 ] [X_t , h_{t-1}] [Xt,ht−1]
- 之后这个张量经过一个全连接层(线性层),该层使用 tanh 作为激活函数,最终得到当前时间步的输出 h t h_t ht
- 最后,当前时间步的输出 h t h_t ht 将和 下一个时间步的输入 X t + 1 X_{t+1} Xt+1 一起进入结构体
3.2 内部计算公式
h t = tanh ( X t W i h T + b i h + h t − 1 W h h T + b h h ) h_t = \tanh(X_t W_{ih}^T + b_{ih} + h_{t-1}W_{hh}^T + b_{hh}) ht=tanh(XtWihT+bih+ht−1WhhT+bhh)
- W i h W_{ih} Wih 表示输入数据的权重
- b i h b_{ih} bih 表示输入数据的偏置
- W h h W_{hh} Whh 表示隐藏状态的权重
- b h h b_{hh} bhh 表示隐藏状态的偏置
3.3 其中 tanh 激活函数的作用
- 非线性映射:
- RNN中的线性层(也称为全连接层或仿射变换)仅仅是对输入进行线性组合,而tanh函数则引入了非线性特性。这使得RNN能够学习和表示更复杂的输入-输出关系,因为非线性映射能够捕捉数据中的非线性特征。
- 值域限制:
- tanh函数的输出值域为(-1, 1),这有助于将神经元的输出限制在一个合理的范围内。与sigmoid函数类似,tanh函数也能够在一定程度上缓解梯度消失的问题(尽管在非常深的网络中仍然可能存在),因为梯度在值域内不会趋于零。
- 中心化输出:
- tanh函数的输出是中心化的,即均值为0。这有助于在训练过程中保持数据的分布相对稳定,有助于加快收敛速度和提高模型的稳定性。
- 梯度传播:
- 在反向传播过程中,tanh函数的导数(即梯度)在输入接近0时最大,而在输入接近-1或1时接近0。这意味着当神经元的输出接近极端值时,梯度会变小,可能导致梯度消失问题。
3.4 传统RNN优缺点
- 优势
- 由于内部结构简单,对计算资源要求低,相比之后我们要学习的RNN变体:LSTM和GRU模型参数总量少了很多,在短序列任务上性能和效果都表现优异
- 缺点
- 传统RNN在解决长序列之间的关联时,通过实践,证明经典RNN表现很差,原因是在进行反向传播的时候,过长的序列导致梯度的计算异常,发生梯度消失或爆炸。
四、代码演示
演示代码 1 :
import torch
from torch import nndef my_rnn_dm01():'''RNN 的三个参数的含义第一个参数:input_size(输入张量 x 的维度)第二个参数:hidden_size(隐藏层的维度,隐藏层的神经元个数)第三个参数:num_layer(隐藏层的数量)'''rnn = nn.RNN(5, 6, 1)'''input 的三个参数的含义第一个参数:sequence_length(输入序列的长度)第二个参数:batch_size(批次的样本数量)第三个参数:input_size(输入张量的维度)'''input = torch.randn(5, 3, 5)'''output 的三个参数的含义第一个参数:num_layer * num_directions(层数*网络方向)第二个参数:batch_size(批次的样本数)第三个参数:hidden_size(隐藏层的维度, 隐藏层神经元的个数)'''# h0 = torch.randn(1, 5, 6) # output, hn = rnn(input, h0) # h0 可以传也可以不传output, hn = rnn(input)print(output.shape) # torch.Size([5, 3, 6])print(output)# print(hn.shape)# print(hn)
演示代码 2 :
def my_rnn_dm02():'''RNN 的三个参数的含义第一个参数:input_size(输入张量 x 的维度)第二个参数:hidden_size(隐藏层的维度,隐藏层的神经元个数)第三个参数:num_layer(隐藏层的数量)第四个参数:输入层可以把 batch_size参数 放在一个位置'''rnn = nn.RNN(5, 6, 1, batch_first=True)'''input 的三个参数的含义第一个参数:batch_size(批次的样本数量)第二个参数:sequence_length(输入序列的长度)第三个参数:input_size(输入张量的维度)'''input = torch.randn(3, 20, 5)'''output 的三个参数的含义第一个参数:num_layer * num_directions(层数*网络方向)第二个参数:batch_size(批次的样本数)第三个参数:hidden_size(隐藏层的维度, 隐藏层神经元的个数)'''output, hn = rnn(input)print(output.shape) # torch.Size([3, 20, 6])print(output)
总结
- 以上就是传统RNN的基本内容
相关文章:

七、传统循环神经网络(RNN)
传统循环神经网络 RNN 前言一、RNN 是什么?1.1 RNN 的结构1.2 结构举例 二、RNN 模型的分类2.1 按照 输入跟输出 的结构分类2.2 按照 内部结构 分类 三、传统 RNN 模型3.1 RNN内部结构图3.2 内部计算公式3.3 其中 tanh 激活函数的作用3.4 传统RNN优缺点 四、代码演示…...

LeetCode:19.删除链表倒数第N个节点
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:19.删除链表倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表…...

【RISC-V CPU debug 专栏 2 -- Debug Module (DM), non-ISA】
文章目录 调试模块(DM)功能必须支持的功能可选支持的功能兼容性要求规模限制Debug Module Interface (DMI)总线类型地址与操作地址空间控制机制Debug Module Interface Signals请求信号响应信号信号流程Reset Control复位控制方法全局复位 (`ndmreset`)Hart 复位 (`hartreset…...

单片机学习笔记 11. 外部中断
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...

基于stm32的智能教室管理系统/智能家居系统
基于stm32的智能教室管理系统/智能家居系统 持续更新,欢迎关注!!! ** 基于stm32的智能教室管理系统/智能家居系统 ** 目前,物联网已广泛应用在我们的生活中。智慧校园是将校园中的生活、学习、工作等相关的资源联系在一起,实现管理的智能化…...
基于 Qt 和 GStreamer 的环境中构建播放器
一、功能与需求分析 功能描述 播放本地视频文件(如 MP4、MKV)。 支持基本控制功能(播放、暂停、停止、跳转)。 提供音量调节功能。 在 Windows 环境下使用 Visual Studio 2022 编译。 技术选型 Qt:用于构建用户界面。 GStreamer:负责视频解码和播放。 Visual Studio 202…...
windows docker 入门
这个教程将指导你如何安装Docker、运行第一个容器以及理解一些基本概念。 第一步:安装Docker Desktop for Windows 系统要求: Windows 10 64位版本(专业版、企业版或教育版)。启用Hyper-V和Windows Subsystem for Linux (WSL 2)。…...
baomidou Mabatis plus引入异常
1 主要异常信息 Error creating bean with name dataSource 但是有个重要提示 dynamic-datasource Please check the setting of primary 解决方法: <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring…...
深度学习中的正则化模型是什么意思?
一、定义 在深度学习中,正则化是一种用于防止过拟合的技术。过拟合是指模型在训练数据上表现非常好,但在新的、未见过的数据(测试数据)上表现很差的情况。正则化模型就是通过在损失函数中添加额外的项来约束模型的复杂度…...

修改IDEA配置导致Spring Boot项目读取application.properties中文乱码问题
之前很多配置都是放在nacos里面,然后这次同事有个配置写在application.properties中,这个配置含有中文,启动之后发现拿到的中文值会乱码,然后就帮忙看了一下问题。 排查问题 经过不停的百度、排查发现,spring读取app…...
Flink 热存储维表 使用 Guava Cache 减轻访问压力
目录 背景 Guava Cache 简介 实现方案 1. 项目依赖 2. Guava Cache 集成到 Flink (1) 定义 Cache (2) 使用 Cache 优化维表查询 3. 应用运行效果 (1) 维表查询逻辑优化 (2) 减少存储压力 Guava Cache 配置优化 总结 背景 在实时计算场景中,Flink 应用中…...
深入探索SenseVoiceSmall:高效多语言语音识别与处理模型
引言 随着人工智能技术的飞速发展,语音识别技术已经广泛应用于智能助手、客户服务、智能家居等多个领域。然而,现有的语音识别模型往往存在资源消耗大、多语言支持不足等问题。今天,我们要介绍的是来自ModelScope平台的SenseVoiceSmall模型&…...

Flink--API 之Transformation-转换算子的使用解析
目录 一、常用转换算子详解 (一)map 算子 (二)flatMap 算子 (三)filter 算子 (四)keyBy 算子 元组类型 POJO (五)reduce 算子 二、合并与连接操作 …...
每日十题八股-2024年11月27日
1.类型互转会出现什么问题吗? 2.为什么用bigDecimal 不用double ? 3.装箱和拆箱是什么? 4.Java为什么要有Integer? 5.Integer相比int有什么优点? 6.那为什么还要保留int类型? 7.说一下 integer的缓存 8.怎么…...

OpenCV截取指定图片区域
import cv2 img cv2.imread(F:/2024/Python/demo1/test1/man.jpg) cv2.imshow(Image, img) # 显示图片 #cv2.waitKey(0) # 等待按键x, y, w, h 500, 100, 200, 200 # 示例坐标 roi img[y:yh, x:xw] # 截取指定区域 cv2.imshow(ROI, roi) cv2.waitKey(0) cv…...
Java部分新特性
模式匹配 instance of 模式匹配 之前写法 public void print(Object o) {if (o instanceof String){String str (String) obj;System.out.println("This is a String of length " s.length());} else {System.out.println("This is not a String");} …...

【SpringBoot】28 API接口防刷(Redis + 拦截器)
Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括:防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等,以确保接口的安全性。 常见措施 1)防火墙 防火墙是网络安全中最基本的安全设备之一,…...
IT运维专家给年轻人一些职业上的建议
运维工作在现代企业中是非常重要的一环,保证系统的稳定性、可用性以及安全性对企业的正常运营至关重要。以下是我给年轻人的一些职业发展建议,希望能够帮助你们在运维领域找到方向并取得成功。 1. 夯实基础,扎实技术功底 精通操作系统与网络:运维工作需要深入理解操作系统…...

Django基础之路由
一.前言 前面我们说了django的安装于基础配置,基础知识点我就细分下来,每天和大家讲一点,今天就要和大家说django的基础知识点了,我们今天先来讲路由,内容不多,希望大家记住 二.传统路由 路由就是前面一个…...
Python实例化中默认值的行为及应用
Python实例化中默认值的行为及应用 适合初学者阅读 本文要点 使用可变对象作为默认参数会导致所有实例共享同一对象,引发意外的数据修改。不可变对象作为默认参数时,每次实例化都会创建新的对象,不会共享数据。推荐使用None作为默认值&…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...