## 1. 什么是 RNN?

 

* **全称:** Recurrent Neural Network(循环神经网络)

* **核心特点:** 它是一种专门设计用来处理**序列数据**的神经网络。

* **核心能力:** 拥有“记忆”能力,能够利用**之前步骤处理过的信息**来影响当前步骤的输出。

* **解决的核心问题:** 传统的前馈神经网络(如多层感知机 MLP 或卷积神经网络 CNN)在处理序列数据时存在根本性缺陷:

    * **输入/输出长度固定:** 它们要求输入和输出的大小是预先设定好的。

    * **缺乏时间维度上的记忆:** 它们将每个输入样本视为完全独立的,无法记住或利用序列中元素之间的顺序依赖关系和历史信息。

* **适用场景举例:**

    * **自然语言处理 (NLP):** 文本生成(写诗、写小说)、机器翻译(理解句子顺序)、情感分析(理解上下文)、语音识别(声音信号是时间序列)。

    * **时间序列预测:** 股票价格预测、天气预测、销量预测。

    * **视频分析:** 理解视频帧之间的动作连续性。

    * **音乐生成:** 创作有连贯旋律的音乐。

 

**简单来说:RNN 是一种带有“记忆”的神经网络,特别擅长处理像句子、时间线、音乐等有前后顺序的数据,因为它能记住之前看到或计算过的信息,并用这些信息来理解当前的内容。**

 

## 2. RNN 的工作原理

 

RNN 的核心思想是引入了 **“循环”** 的概念。关键点在于它有一个 **“隐藏状态”**。

 

1. **时间步:** RNN 将序列数据分解成一个一个的**时间步**。例如,一个句子可以按单词或字符拆分成多个时间步;一段音频信号可以按时间点拆分成多个时间步。

2. **输入:** 在每一个时间步 `t`,RNN 接收两个输入:

    * **当前时间步的输入 `X_t`:** 序列在 t 时刻的数据(比如第 t 个单词的词向量)。

    * **上一个时间步的隐藏状态 `H_{t-1}`:** 这是 RNN 的“记忆”,包含了之前所有时间步处理过的信息的某种**总结**。在初始时间步(t=0),`H_0` 通常初始化为零向量或小的随机值。

3. **计算新的隐藏状态:** RNN 的核心计算发生在这一步。它结合当前输入 `X_t` 和上一个隐藏状态 `H_{t-1}`,通过一个**带参数的函数 `f`**(通常是带有非线性激活函数如 `tanh` 或 `ReLU` 的线性变换)来计算**当前时间步的隐藏状态 `H_t`**:

    `H_t = f(W_xh * X_t + W_hh * H_{t-1} + b_h)`

    * `W_xh`: 连接输入层到隐藏层的权重矩阵。

    * `W_hh`: 连接上一个隐藏状态到当前隐藏状态的权重矩阵(这是实现“记忆”和“循环”的关键参数)。

    * `b_h`: 隐藏层的偏置向量。

    * `f`: 激活函数(常用 `tanh`)。

4. **生成输出 (可选):** 在需要生成输出的时间步(可能不是每个时间步都需要输出),RNN 会使用当前的隐藏状态 `H_t` 来计算当前时间步的输出 `Y_t`:

    `Y_t = g(W_hy * H_t + b_y)`

    * `W_hy`: 连接隐藏层到输出层的权重矩阵。

    * `b_y`: 输出层的偏置向量。

    * `g`: 输出层的激活函数(根据任务不同而变化,如 Softmax 用于分类,线性函数用于回归)。

5. **传递记忆:** 计算得到的当前隐藏状态 `H_t` 会被传递到下一个时间步 `t+1`,作为 `H_t`,继续参与计算。这个传递过程就是“循环”的本质,使得信息能够沿着时间步流动。

6. **循环进行:** 对序列中的每一个时间步重复步骤 2-5。

 

**关键理解:** 隐藏状态 `H_t` 是 RNN 的“记忆单元”。它捕获了从序列开始到当前时间步 `t` 的所有相关信息的一个**压缩表示**。这个状态被不断更新并传递给未来,使网络能够利用历史信息。

 

## 3. RNN 的架构

 

RNN 的架构可以通过“展开”的方式来直观理解:

 

1. **基本单元 (RNN Cell):** 这是构成 RNN 的基本计算模块。它定义了如何根据当前输入 `X_t` 和前一个隐藏状态 `H_{t-1}` 计算当前隐藏状态 `H_t`(以及可能的输出 `Y_t`)。上面工作原理中描述的公式就是在这个单元里实现的。

2. **展开视图:** 为了理解 RNN 如何处理整个序列,我们可以将 RNN 在时间维度上“展开”。想象一下,序列有多少个时间步,就把这个基本单元复制多少份,并按时间顺序连接起来。

    * 每个副本对应一个时间步。

    * 每个副本接收两个输入:当前时间步的 `X_t` 和**前一个副本**计算得到的 `H_{t-1}`。

    * 每个副本计算当前时间步的 `H_t`(和 `Y_t`)。

    * 当前副本计算出的 `H_t` 会作为输入传递给**下一个副本**(即下一个时间步)。

    * **最重要的是,所有这些展开的副本,使用的是同一套参数 (`W_xh`, `W_hh`, `W_hy`, `b_h`, `b_y`)**!这就是**参数共享**,是 RNN 能够处理任意长度序列的关键,也是其模型效率的来源。无论序列多长,处理每个时间步的规则(参数)都是一样的。

 

**图示描述:**

 

```

时间步: t=0 t=1 t=2 ... t=T

输入: X0 ---------> X1 ---------> X2 ---------> ... ------> XT

         | | | |

隐藏状态: H0 --------> H1 --------> H2 --------> ... ------> HT

         | RNN | RNN | RNN | RNN

输出: Y0 Y1 Y2 ... YT

```

 

* 每个垂直的 `RNN` 框代表同一个 RNN Cell(使用相同的参数)。

* 水平箭头表示隐藏状态 `H` 在时间步之间的传递,形成循环连接(在展开视图中表现为链式连接)。

* 输入 `X_t` 在每个时间步进入对应的 Cell。

* 输出 `Y_t` 在每个时间步从对应的 Cell 产生(根据任务需求决定是否在每个时间步都输出)。

 

**核心架构组件总结:**

 

* **输入层:** 接收序列数据在每个时间步的表示 `X_t`。

* **循环隐藏层:** 是 RNN 的核心。它包含隐藏状态 `H_t` 并执行 `H_t = f(W_xh * X_t + W_hh * H_{t-1} + b_h)` 的计算。该层负责维护和更新“记忆”。

* **输出层 (可选):** 在需要时,根据当前隐藏状态 `H_t` 计算输出 `Y_t = g(W_hy * H_t + b_y)`。

* **参数共享:** 所有时间步共享相同的权重矩阵 (`W_xh`, `W_hh`, `W_hy`) 和偏置向量 (`b_h`, `b_y`)。

 

## 重要补充:基本 RNN 的局限性及发展

 

虽然基本 RNN 的设计理念很巧妙,但它存在一个严重问题:**长序列依赖问题**(梯度消失/爆炸问题)。当序列很长时,早期时间步的信息在反向传播训练过程中,其梯度要么变得极小(消失)无法有效更新权重,要么变得极大(爆炸)导致训练不稳定。这使得基本 RNN 很难有效学习长距离的依赖关系(比如理解句子里隔得很远的两个词之间的关系)。

 

为了解决这个问题,研究者提出了更复杂的 RNN 变体:

 

* **LSTM (长短期记忆网络):** 通过引入“门控机制”(输入门、遗忘门、输出门)和“细胞状态”,显式地控制信息的遗忘、更新和输出,能更有效地捕获长距离依赖。

* **GRU (门控循环单元):** LSTM 的简化版本,合并了部分门,参数更少,计算效率更高,在许多任务上能达到与 LSTM 相当的性能。

 

**总结:**

 

RNN 是一种通过引入循环连接和隐藏状态来专门处理序列数据的神经网络。其工作原理是利用当前输入和前一个隐藏状态计算当前隐藏状态(即更新记忆),并可能生成输出。通过参数共享和展开视图,它可以处理任意长度的序列。尽管基本 RNN 存在长序列依赖问题,但其思想是理解更强大的序列模型(如 LSTM、GRU 和 Transformer)的基础。

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

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

相关文章

智能计算模拟:第一性原理+分子动力学+机器学习

第一性原理分子动力学机器学习”三位一体的综合手段,已经成为模拟计算的一个前沿方向,为解决传统计算化学方法面临的挑战提供了新的解决方案。国内外已有科研团队在深化第一性原理与分子动力学的研究与应用拓展,利用机器学习优化大规模计算、…

基于Attention机制的模型。这使得它摆脱了RNN模型顺序读取序列的缺点,可以实现高度的并行化的理解

这句话的核心意思是:​​该模型完全基于注意力机制(Attention Mechanism),不再依赖传统的循环神经网络(RNN)结构,因此避免了 RNN 的顺序计算问题,能够实现高效的并行化计算​​。我们可以从以下几个方面深入理解: 1. ​​"仅基于 Attention 机制"​​ ​​传…

解决虚拟机 Kali 系统安装了VMware Tools 不能拖入文件问题

进入终端,这里我是root模式下,不是root模式在命令前加一个sudo即可,命令如下: apt install open-vm-tools open-vm-tools-desktop 执行成功后输入 reboot 重启后即可

GitHub OAuth 认证示例

GitHub链接:github_auth 流程图 功能特性 ✅ GitHub OAuth 认证✅ 获取用户基本信息✅ 显示用户的 GitHub 仓库列表✅ 安全的会话管理✅ 响应式用户界面 技术栈 后端 Flask - Python Web 框架Flask-CORS - 跨域资源共享Requests - HTTP 库Session - 会话管理 …

百度萝卜快跑携4颗禾赛激光雷达进军迪拜,千辆L4无人车开启全球化战略

3月28日,百度旗下自动驾驶出行服务平台“萝卜快跑”宣布在迪拜市区启动无人驾驶规模化测试及服务,计划部署超1000辆L4级全无人驾驶汽车。此次出海不仅是萝卜快跑首次在中国以外地区实现规模化落地,更以“单车搭载4颗禾赛激光雷达”的硬件配置引发行业关注,标志着中国自动驾…

湖北师范大学人工智能与计算机学院电子信息研究生课程《随机过程》第六次作业

一. 计算题(共10题,100分) 1. (计算题, 10分)随机信号 的实测样本函数如题图(a)与(b)所示, ,期中X为随机变量, ,试说明它们可能是均值各态历经的吗?(写明道理&#xff…

解决Windows Server打开DNS提示“拒绝访问”和“RPC服务器不可用”

问题背景 在一个活动目录域xyzz.internal中,有两台域控制器(Domain Controller),各位于一个站点。 问题 当我们在其中一台域控制器上的服务器管理器中打开DNS管理工具时,却看到类似如下错误,提示拒绝访问…

Python中字符串常用的操作方法

在Python中,字符串是不可变序列类型,提供了丰富的内置方法。以下是常用的字符串操作方法及示例: 1. 大小写转换 lower() 转小写 upper() 转大写 capitalize() 首字母大写 title() 每个单词首字母大写 swapcase() 大小写互换 print(&q…

利用百度/高德地图API实现车辆轨迹跟踪系统

利用百度/高德地图API实现车辆轨迹跟踪系统 摘要: 本文详细阐述了如何利用百度地图API或高德地图API构建一套完整的车辆轨迹跟踪系统。内容涵盖系统架构设计、数据采集与传输、地图API核心功能实现(地图展示、轨迹绘制、实时定位、历史轨迹回放)、关键优化技术(轨迹纠偏、…

解锁K-近邻算法:数据挖掘的秘密武器

目录 一、K - 近邻算法是什么二、算法原理深度剖析2.1 核心思想2.2 距离度量方式2.3 K 值的选择2.4 分类决策规则 三、K - 近邻算法实践3.1 准备数据集3.2 代码实现步骤3.3 结果分析与评估 四、K - 近邻算法优缺点4.1 优点阐述4.2 缺点分析 五、应用案例展示5.1 图像识别领域5.…

华为OD机试_2025 B卷_构成正方形数量(Python,100分)(附详细解题思路)

题目描述 输入N个互不相同的二维整数坐标&#xff0c;求这N个坐标可以构成的正方形数量。[内积为零的的两个向量垂直] 输入描述 第一行输入为N&#xff0c;N代表坐标数量&#xff0c;N为正整数。N < 100 之后的 K 行输入为坐标x y以空格分隔&#xff0c;x&#xff0c;y为整…

Qt:智能指针QScopedPointer使用

QScopedPointer和C中的智能指针std::unique_ptr其概念是一样的&#xff0c;它包装了new操作符在堆上分配的动态对象&#xff0c;能够保证动态创建的对象在任何时候都可以被正确地删除。但它有更严格的所有权&#xff0c;并且不能转让&#xff0c;一旦获取了对象的管理权&#x…

TensorFlow基础之理解计算图

Tensor Flow TensorFlow 本章介绍TensorFlow的基础。特别地&#xff0c;你将学习如何用TensorFlow进行基础计算。在开始使用 TensorFlow之前,你必须理解它背后的哲学。 这个库基于计算图的概念&#xff0c;如果你不理解计算图是如何工作的&#xff0c;你就不能理解如何使用这…

【HarmonyOS Next之旅】DevEco Studio使用指南(三十五) -> 配置构建(二)

目录 1 -> 定制HAP多目标构建产物 1.1 -> 定义产物的HAP包名 1.2 -> 定义产物的deviceType 1.3 -> 定义产物的distributionFilter 1.4 -> 定义产物preloads的分包 1.5 -> 定义产物的source源码集-pages 1.6 -> 定义产物的source源码集-sourceRoots…

[muduo] ThreadPool | TcpClient | 异步任务 | 通信测试

第九章&#xff1a;线程池&#xff08;ThreadPool&#xff09; 在第八章《TcpServer》中&#xff0c;我们了解到muduo::net::TcpServer通过EventLoop线程池处理入站连接。 这些EventLoop线程主要负责网络I/O&#xff1a;套接字读写和定时器处理&#xff0c;由Poller和Channel…

【笔记】解决部署国产AI Agent 开源项目 MiniMax-M1时 Hugging Face 模型下载报错解决方案

MiniMax-AI/MiniMax-M1&#xff1a;MiniMax-M1&#xff0c;世界上第一个开放权重、大规模的混合注意力推理模型。 一、问题背景 【笔记】解决部署国产AI Agent 开源项目 MiniMax-M1时 Hugging Face 模型下载缓存占满 C 盘问题&#xff1a;更改缓存位置全流程-CSDN博客 在执行hu…

新手如何利用AI助手Cursor生成复杂项目

新手如何利用AI助手Cursor生成复杂项目 在编程学习的道路上&#xff0c;AI工具正成为新手开发者的得力助手。本文将介绍如何借助Cursor这一强大的AI代码助手&#xff0c;从零开始构建复杂项目。 一、基础准备工作 作为编程新手&#xff0c;面对复杂项目时常常不知从何下手。利…

【Fargo】x264的intra refresh 3: 采集、编码到 RTP打包

实际调试默认并么有打开b_intra_refresh D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\echo\codec\x264\echo_h264_encoder.cpp 即使打开了b_intra_refresh,也不影响RTP打包: 但是有一些要注意的地方: RFC 6184(“RTP Payload Format for H.264 Video”) intra …

Vue3 的生命周期:从 Composition API 视角看

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

面向互联网大厂Java岗位面试:Spring Boot与微服务架构的深入探讨

面向互联网大厂Java岗位面试&#xff1a;Spring Boot与微服务架构的深入探讨 问题1&#xff1a;什么是Spring Boot&#xff0c;它如何简化Spring应用程序的开发&#xff1f; 简洁回答&#xff1a; Spring Boot是一个基于Spring框架的开源Java平台&#xff0c;旨在简化新Sprin…