深入浅出循环神经网络(RNN):原理、应用与实战

1、引言


       在深度学习领域,循环神经网络(Recurrent Neural Network, RNN)是一种专门用于处理**序列数据**的神经网络架构。与传统的前馈神经网络不同,RNN 具有**记忆能力**,能够捕捉数据中的时间依赖性,广泛应用于自然语言处理(NLP)、语音识别、时间序列预测等任务。

2、原理


2.1 为什么需要 RNN?


        传统神经网络(如 MLP、CNN)假设输入数据是独立同分布的,但现实中的许多数据(如文本、语音、股票价格)是序列化的,前后数据之间存在依赖关系。RNN 通过引入‘循环连接’,使网络能够记住历史信息。

2.2 RNN 的结构


        RNN 的核心思想是—隐藏状态(Hidden State),它在每个时间步更新并传递信息。其数学表达为:

其中:

2.3 RNN 的局限性


- 梯度消失/爆炸问题:长序列训练时,梯度可能指数级衰减或增长,导致模型难以学习长期依赖。
- 短期记忆问题:标准 RNN 难以记住较早期的信息。

3. 改良


3.1 LSTM(长短期记忆网络)


LSTM 通过引入**门控机制**(输入门、遗忘门、输出门)解决梯度消失问题:

4. 实战:用 PyTorch 实现 RNN 进行时间序列预测

#5.1 数据准备import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt# 生成正弦波数据
time = np.arange(0, 100, 0.1)
data = np.sin(time) + np.random.normal(0, 0.1, len(time))# 构造输入序列(前10个点预测第11个点)
seq_length = 10
X, y = [], []
for i in range(len(data) - seq_length):X.append(data[i:i+seq_length])y.append(data[i+seq_length])
X = torch.FloatTensor(np.array(X))
y = torch.FloatTensor(np.array(y))#5.2 定义 RNN 模型class RNN(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(RNN, self).__init__()self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):out, _ = self.rnn(x)  # out: (batch, seq_len, hidden_size)out = self.fc(out[:, -1, :])  # 取最后一个时间步的输出return outmodel = RNN(input_size=1, hidden_size=32, output_size=1)
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)#5.3 训练与预测# 训练
epochs = 100
for epoch in range(epochs):optimizer.zero_grad()outputs = model(X.unsqueeze(-1))loss = criterion(outputs.squeeze(), y)loss.backward()optimizer.step()if (epoch+1) % 10 == 0:print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')# 预测
with torch.no_grad():pred = model(X.unsqueeze(-1))plt.plot(time[seq_length:], y.numpy(), label='True')plt.plot(time[seq_length:], pred.numpy(), label='Predicted')plt.legend()plt.show()

结果展示:

5. 总结


- RNN 是处理序列数据的强大工具,但存在梯度消失问题。
- LSTM通过门控机制改进长期依赖学习。
- RNN 广泛应用于 NLP、语音识别、自然语言处理等领域。
 

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

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

相关文章

广州创科——湖北房县汪家河水库除险加固信息化工程

汪家河水库 汪家河水库位于湖北省房县,建于1971年,其地利可谓是天公之作,东西二山蜿蜒起伏,山峰相连,峰峰比高,无有尽头,东边陡峭,西边相对平坦,半山腰有一条乡村道路&am…

C++日更八股--day2

### C sort 的底层原理 这里其实原来问的是你如何优化快速排序,但是我最初只以为是随机选择基准,但是很显然面试官对此并不满意 闲暇之际,看到一篇介绍sort的原理的文章,才知道原来如是也 1.快速排序:作为主要算法&…

UniApp 的现状与 WASM 支持的迫切性

UniApp 的现状与 WASM 支持的迫切性 点击进入免费1 UniApp 的现状与 WASM 支持的迫切性 点击进入免费版2 一、UniApp 的跨平台优势与性能瓶颈 UniApp 凭借“一次开发,多端发布”的核心理念,已成为跨平台开发的主流框架之一。然而,随着移动应用场景的复杂化(如 3D 渲染、音…

如何正确使用日程表

日程安排,是时间管理中非常重要的一项,也是不容易管好的一项。 日程安排,通常指放到日程表里的事情,一般来说,放到日程表的事情要符合以下几个特点: 01.明确具体时间段,比如是下午2点到下午三…

【Token系列】14|Prompt不是文本,是token结构工程

文章目录 14|Prompt不是文本,是token结构工程一、很多人写的是“自然语言”,模型读的是“token序列”二、Prompt写法会直接影响token结构密度三、token分布影响Attention矩阵的聚焦方式四、token数 ≠ 有效信息量五、Prompt结构设计建议&…

研发效率破局之道阅读总结(4)个人效率

研发效率破局之道阅读总结(4)个人效率 Author: Once Day Date: 2025年4月30日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…

CNN代码详细注释

import torch from torch import nn#定义张量x,它的尺寸是5x1x28x28 #表示了5个单通道28x28大小的数据 xtorch.zeros([5,1,28,28])#定义一个输入通道是1,输出通道是6,卷积核大小是5x5的卷积层 convnn.Conv2d(in_channels1,out_channels6,ker…

机器指标监控技术方案

文章目录 机器指标监控技术方案架构图组件简介Prometheus 简介核心特性适用场景 Grafana 简介核心特性适用场景 Alertmanager 简介核心特性适用场景 数据采集机器Node ExporterMySQL ExporterRedis ExporterES ExporterRocketMQ ExporterSpringcloud ExporterNacos 数据存储短期…

【Office-Excel】单元格输入数据后自动填充单位

1.自定义设置单元格格式 例如我想输入数字10,回车确认后自动显示10kg。 右击单元格或者快捷键(Ctrl1),选择设置单元格格式,自定义格式输入: 0"kg"格式仍是数字,但是显示是10kg&…

JavaScript的3D库有哪些?

JavaScript的3D库有哪些? 在3D开发领域,JavaScript提供了多种库和框架,使开发者能够在浏览器中创建丰富的3D体验。以下是一些流行的3D方面的JavaScript库: Three.js:这是最著名的用于创建3D图形的JavaScript库之一。它…

中央网信办部署开展“清朗·整治AI技术滥用”专项行动

为规范AI服务和应用,促进行业健康有序发展,保障公民合法权益,近日,中央网信办印发通知,在全国范围内部署开展为期3个月的“清朗整治AI技术滥用”专项行动。 中央网信办有关负责人表示,本次专项行动分两个阶…

论文阅读:2024 arxiv Jailbreaking Black Box Large Language Models in Twenty Queries

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Jailbreaking Black Box Large Language Models in Twenty Queries https://www.doubao.com/chat/4008882391220226 https://arxiv.org/pdf/2310.08419 速览 这篇论文是来…

零基础学指针2

零基础学指针---大端和小端 零基础学指针---什么是指针 零基础学指针---取值运算符*和地址运算符& 零基础学指针---结构体大小 零基础学指针5---数据类型转换 零基础学指针6---指针数组和数组指针 零基础学指针7---指针函数和函数指针 零基础学指针8---函数指针数组…

《Python实战进阶》 No46:CPython的GIL与多线程优化

Python实战进阶 No46:CPython的GIL与多线程优化 摘要 全局解释器锁(GIL)是CPython的核心机制,它保证了线程安全却限制了多核性能。本节通过concurrent.futures、C扩展优化和多进程架构,实战演示如何突破GIL限制&#…

Golang实现函数默认参数

golang原生不支持默认参数 在日常开发中,我们有时候需要使用默认设置,但有时候需要提供自定义设置 结构体/类,在Java我们可以使用无参、有参构造函数来实现,在PHP中我们也可以实现(如 public function xxx($isCName false, $sec…

Chrome 136 H265 WebRTC 支持 正式版本已包含

时间过的真快,去年8月份写过一篇文章介绍如何加参数方式启动Chrome H265 硬件解码器, 现在的136版本已经包含在内,至此WebRTC已经完整包含了H264和H265解码器,这个事情应该从2015年开始,Google强推VP9 AV1&#xff0c…

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档)

12.SpringDoc OpenAPI 功能介绍(用于生成API接口文档) SpringDoc OpenAPI 是一个基于 OpenAPI 3.0/3.1 规范的工具,用于为 Spring Boot 应用生成 API 文档。它是 springfox(Swagger 2.x)的现代替代方案,完全支持 Spring Boot 3.x…

CentOS Linux 环境二进制方式安装 MySQL 5.7.32

文章目录 安装依赖包新建用户解压初始化配置文件启动服务登录MySQL修改密码停止数据库 安装依赖包 yum -y install libaio perl perl-devel libncurses* autoconf numactl新建用户 useradd mysql解压 tar xf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.32-l…

Webug4.0通关笔记06- 第8关CSV注入

目录 CSV注入漏洞 1.CSV漏洞简介 2.漏洞原理 (1)公式执行 (2)DDE机制 (3)OS命令执行 3.漏洞防御 第08关 CSV注入 1.打开靶场 2.修改源码 3.注入命令 4.导出excel表 5.打开excel表 CSV注入漏洞…

Windows和 macOS 上安装 `nvm` 和 Node.js 16.16.0 的详细教程。

Windows和 macOS 上安装 nvm 和 Node.js 16.16.0 的详细教程。 --- ### 1. 安装 nvm(Node Version Manager) nvm 是一个 Node.js 版本管理工具,可以轻松安装和切换不同版本的 Node.js。 #### Windows 安装 nvm 1. **下载 nvm 安装包**&#x…