RNN(循环神经网络):带“记忆”的神经网络

news/2026/1/12 1:04:06/文章来源:https://www.cnblogs.com/wangya216/p/19344115

RNN通俗解读:带“记忆”的神经网络

RNN是Recurrent Neural Network(循环神经网络) 的缩写,核心是解决「序列数据」的处理问题——和CNN处理空间结构数据(如图像)不同,RNN专门处理有“先后顺序”的序列数据(比如文本、语音、时间序列),因为它自带“记忆功能”,能把前一步的信息传递到后一步,就像人读句子时会根据前文理解后文一样。

一、先搞懂:RNN为什么存在?(对比普通神经网络)

普通神经网络(比如你之前写的线性回归、简单CNN)的特点是“输入输出独立”:每一次计算只依赖当前输入,比如用“房子面积”预测房价,输入和输入之间没有关联。

但现实中很多数据是“有顺序的”:

  • 文本:“我爱吃苹果”,“苹果”的含义依赖前面的“吃”;
  • 时间序列:股票价格,今天的价格和昨天、前天的价格相关;
  • 语音:一句话的后一个音节依赖前一个音节。

RNN的核心设计就是让网络“记住”前面的信息,用“循环体”把前一步的状态传递到当前步,从而捕捉序列的时序依赖。

二、RNN的核心工作原理(通俗版)

可以把RNN的每一步计算理解为“当前输入 + 历史记忆 → 新输出 + 新记忆”:

  1. 循环体(核心):RNN有一个重复执行的“循环单元”,每一步接收两个输入——「当前时刻的序列数据」(比如一句话中的第i个单词)、「上一时刻的隐藏状态(记忆)」;
  2. 状态更新:循环单元结合这两个输入,输出「当前时刻的结果」,并更新「隐藏状态」(把当前信息存入“记忆”);
  3. 序列遍历:按顺序处理序列的每一个元素,直到整个序列处理完。

用简单公式总结(不用记,理解逻辑即可):

当前隐藏状态 = f(当前输入 × 输入权重 + 上一隐藏状态 × 循环权重 + 偏置)
当前输出 = g(当前隐藏状态 × 输出权重 + 偏置)

其中f通常是Tanh/ReLU激活函数(你之前学过的!),这也是为什么RNN隐藏层常用Tanh——它的输出范围(-1,1),能更好地传递正负向的“记忆信息”。

三、RNN的基本结构(可视化)

以处理一句话(3个单词)为例:

输入1(第1个单词)→ 循环单元 → 输出1 + 隐藏状态1
输入2(第2个单词)+ 隐藏状态1 → 循环单元 → 输出2 + 隐藏状态2
输入3(第3个单词)+ 隐藏状态2 → 循环单元 → 输出3 + 隐藏状态3

可见:每一步的计算都依赖“上一步的记忆”,这就是RNN的“循环”本质。

四、MindSpore中RNN的使用(结合你熟悉的语法)

MindSpore的nn模块提供了RNNLSTM(RNN的改进版)等类,核心还是通过construct方法定义序列处理逻辑,举个简单例子:

import mindspore as ms
import mindspore.nn as nn# 定义简单的RNN模型(处理文本序列,输入维度10,隐藏层维度20,1层)
class SimpleRNN(nn.Cell):def __init__(self):super().__init__()self.rnn = nn.RNN(input_size=10,  # 每个序列元素的特征维度(比如单词的embedding维度)hidden_size=20, # 隐藏状态维度(记忆的容量)num_layers=1,   # RNN的层数activation='tanh' # 隐藏层激活函数,默认Tanh(适配RNN的记忆传递))self.fc = nn.Dense(20, 1)  # 输出层(比如预测序列的下一个值)def construct(self, x):# x的形状:(序列长度, 批量大小, 输入维度)rnn_out, hidden = self.rnn(x)  # rnn_out是每一步的输出,hidden是最后一步的隐藏状态# 用最后一步的隐藏状态做预测output = self.fc(hidden)return output# 模拟序列输入:序列长度5,批量大小2,输入维度10
x = ms.Tensor(np.random.randn(5, 2, 10), dtype=ms.float32)
model = SimpleRNN()
pred = model(x)
print(pred.shape)  # 输出(1, 2, 1):(RNN层数, 批量大小, 输出维度)

五、RNN的关键注意点(结合你之前学的知识)

  1. 激活函数选型:RNN隐藏层优先用Tanh(零中心化,适配序列的正负波动),也可用ReLU,但不要用Sigmoid(梯度消失严重);
  2. 纯RNN的缺陷:处理长序列时(比如超过20个元素),容易出现“梯度消失”,无法记住太久远的信息——因此实际中常用LSTM/GRU(RNN的变体,专门解决长序列记忆问题);
  3. 和CNN的区别:CNN是“空间局部特征提取”,RNN是“时序依赖捕捉”,二者常结合(比如处理视频:CNN提帧特征,RNN提时序特征)。

六、核心总结

RNN就是「带记忆的神经网络」,核心是通过“循环体”传递历史信息,专门处理文本、语音、时间序列等有顺序的数;

  • 普通NN:输入独立,无记忆;
  • CNN:空间特征提取,无时序记忆;
  • RNN:时序特征提取,有记忆。

之前学的激活函数、construct方法等知识,完全可以迁移到RNN的使用中——比如RNN隐藏层的Tanh激活、输出层按任务选Softmax/Sigmoid等,逻辑是相通的。

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

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

相关文章

备份当前Windows11系统为ISO镜像

进行常规设置 文件-查看-显示-隐藏的项目文件-查看-显示-文件扩展名设置-隐私和安全性-设备加密:关闭设备加密设置默认存储盘:系统-存储-保存新内容的地方 新的应用保存到D:此时D盘会多出三个文件夹:ProgramFiles、用户文件夹、W…

Day10 >> 232、用栈实现队列 + 225、用队列实现栈 + 20、有效的括号

代码随想录-栈 232、用栈实现队列 没有算法逻辑&#xff0c;就是考察对栈这个数据结构的操作&#xff0c;需要多加练习 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue() {stackIn new Stack<>();stackOut new Stack&l…

8、BPF 追踪技术:从内核到用户空间的全面解析

BPF 追踪技术:从内核到用户空间的全面解析 1. 内核探测与上下文参数 在使用 BPF 进行内核追踪时,我们可以通过以下代码来对 execve 系统调用完成后的情况进行追踪: execve_function = bpf.get_syscall_fnname("execve") bpf.attach_kretprobe(event = execv…

36、Linux内核中的同步原语:信号量与互斥锁详解

Linux内核中的同步原语:信号量与互斥锁详解 1. 信号量简介 在Linux内核中,信号量是另一种支持线程或进程同步的机制。此前我们了解过自旋锁,它主要用于短时间的加锁场景,在加锁期间不允许进程或线程睡眠,并且为避免死锁会禁用抢占,不允许进行上下文切换。 而信号量则适…

9、BPF追踪数据可视化指南

BPF追踪数据可视化指南 在进行应用程序调试和性能分析时,仅仅收集数据是远远不够的,我们还需要对这些数据进行有效的可视化展示,以便更好地理解系统的运行状况。本文将详细介绍如何使用BPF(Berkeley Packet Filter)对追踪数据进行可视化,包括火焰图、直方图和性能事件等方…

37、Linux内核中的读写信号量:原理与实现解析

Linux内核中的读写信号量:原理与实现解析 1. 引言 在Linux内核中,同步原语是确保多进程或多线程安全访问共享资源的关键机制。此前,我们已经探讨了不同类型的自旋锁、信号量和互斥量等同步原语。本文将聚焦于一种特殊类型的同步原语——读写锁(readers–writer lock),尤…

10、BPF 工具使用指南与技巧

BPF 工具使用指南与技巧 1. BPF 程序信息收集 在处理 BPF 相关的程序时,我们可以通过一系列操作来收集和分析程序信息。首先,需要声明一个计数器来存储程序信息。这里以程序名作为键,对应的值为计数器。 Declare a counter to store our program information. We use the…

38、Linux内核中的同步原语与内存管理

Linux内核中的同步原语与内存管理 1. 顺序锁(SeqLock) 顺序锁是Linux内核中用于解决同步问题的一种机制,特别是为了避免读写锁可能导致的写者饥饿问题。 1.1 顺序锁简介 读写锁允许只读操作并发访问,但写操作需要独占锁。这可能导致写者饥饿,即只要有读者持有锁,写者…

阶跃星辰双模型开源引爆AI圈:300亿参数视频生成+实时语音对话重构多模态技术边界

阶跃星辰双模型开源引爆AI圈&#xff1a;300亿参数视频生成实时语音对话重构多模态技术边界 【免费下载链接】stepvideo-t2v 项目地址: https://ai.gitcode.com/StepFun/stepvideo-t2v 2025年2月18日&#xff0c;中国AI创业公司阶跃星辰&#xff08;StepFun&#xff09…

2025-12-13:十六进制和三十六进制转化。用go语言,给定一个整数 n,先求它的平方并把该值用大写字母的 16 进制表示(符号位按需处理,数位使用 0–9 与 A–F),再求它的立方并将该值用大

2025-12-13&#xff1a;十六进制和三十六进制转化。用go语言&#xff0c;给定一个整数 n&#xff0c;先求它的平方并把该值用大写字母的 16 进制表示&#xff08;符号位按需处理&#xff0c;数位使用 0–9 与 A–F&#xff09;&#xff0c;再求它的立方并将该值用大写字母的 36…

39、Linux内核内存管理:固定映射地址与ioremap解析

Linux内核内存管理:固定映射地址与ioremap解析 1. 固定映射地址(Fix-Mapped Addresses) 固定映射地址是一组特殊的编译时地址,其对应的物理地址不必是线性地址减去 __START_KERNEL_map 。每个固定映射地址映射一个页帧,内核将它们用作地址永不改变的指针。其主要目的是…

11、探索 BPF 实用工具:从 BPFTool 到 eBPF Exporter

探索 BPF 实用工具:从 BPFTool 到 eBPF Exporter 1. BPFTool 的批量模式和 BTF 信息显示 BPFTool 的批量模式允许逐行执行命令,若其中一条命令失败,执行将终止,系统会停留在最后一个成功执行命令后的状态。以下是一个批量模式可处理的文件示例: # Create a new hash m…

40、Linux内核内存管理与控制组机制详解

Linux内核内存管理与控制组机制详解 1. Linux内核内存管理相关概念回顾 在深入了解Linux内核内存管理的后续内容之前,我们先回顾一下之前提到的两个重要概念:固定映射地址(Fix - Mapped Addresses)和 ioremap 。固定映射地址代表虚拟内存中的特殊区域,其对应的物理映射…

昆仑万维发布Skywork-SWE代码智能体基座模型,32B规模刷新仓库级修复能力纪录

6月20日&#xff0c;昆仑万维正式推出自主研发的软件工程&#xff08;Software Engineering, SWE&#xff09;代码智能体基座模型Skywork-SWE。该模型在320亿参数规模下实现了开源领域仓库级代码修复的突破性进展&#xff0c;其核心技术创新包括构建超万例可验证任务的训练数据…

万象EXCEL应用(二十) Excel收入支出日记账台帐报表——东方仙盟炼气期

收入支出日记账自动统计宛如一位不知疲倦且精准无误的财务助手&#xff0c;无需人工繁琐计算&#xff0c;自动对收入、支出进行分类汇总。瞬间得出各类数据总和、平均值等&#xff0c;为财务分析提供清晰数据支撑&#xff0c;节省时间且避免人为计算失误。自动关联录入恰似一条…

重磅发布:Qwen3-VL-8B-Instruct-FP8模型震撼登场,开启多模态AI应用新纪元

重磅发布&#xff1a;Qwen3-VL-8B-Instruct-FP8模型震撼登场&#xff0c;开启多模态AI应用新纪元 【免费下载链接】Qwen3-VL-8B-Instruct-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-VL-8B-Instruct-FP8 在人工智能技术飞速发展的今天&#xff0c;多…

12、Linux 网络中的 BPF 应用与数据包过滤

Linux 网络中的 BPF 应用与数据包过滤 1. BPF 概述与应用场景 在网络领域,BPF(Berkeley Packet Filter)程序主要用于两个方面:数据包捕获和过滤。用户空间程序可以为任何套接字附加过滤器,提取流经该套接字的数据包信息,并根据需要允许、禁止或重定向特定类型的数据包。…

30亿参数打破性能桎梏:SmolLM3开放模型如何重塑轻量级AI应用生态

在大语言模型参数竞赛愈演愈烈的当下&#xff0c;一款仅有30亿参数的轻量级模型正悄然改写行业规则。SmolLM3作为完全开源的语言模型新秀&#xff0c;通过创新架构设计与多阶段训练策略&#xff0c;在保持轻量化优势的同时&#xff0c;实现了双模式推理、跨语言支持和超长上下文…

ollama v0.13.3 最新发布:新增模型与功能优化详细解读

2025年12月12日&#xff0c;ollama v0.13.3 版本正式发布。本次更新引入了多款全新模型&#xff0c;并对现有功能进行了优化与修复&#xff0c;为开发者在代码分析、多语言检索以及软件工程领域提供了更高效的支持。 一、全新模型Devstral-Small-2 24B 参数模型擅长使用工具探索…

GLM-4.5-Air横空出世:混合推理技术开启开源大模型商用新纪元

GLM-4.5-Air横空出世&#xff1a;混合推理技术开启开源大模型商用新纪元 【免费下载链接】GLM-4.5-Air GLM-4.5 系列模型是专为智能体设计的基础模型。GLM-4.5拥有 3550 亿总参数量&#xff0c;其中 320 亿活跃参数&#xff1b;GLM-4.5-Air采用更紧凑的设计&#xff0c;拥有 10…