当前位置: 首页 > news >正文

深入浅出循环神经网络(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、语音识别、自然语言处理等领域。
 

相关文章:

  • Microsoft 365 Copilot应用4月重大更新:正式支持个人版,开启AI办公新时代!
  • 怎么做好质量管理?质量管理怎么做到高效又保质?
  • CKESC Breeze 50A FOC 电调技术解析:矢量控制赋能高效动力系统
  • 信创系统图形界面开发指南:技术选择与实践详解
  • 模式识别的基本概念与理论体系
  • LeetCode 2302.统计得分小于 K 的子数组数目:滑动窗口(不需要前缀和)
  • 【Linux】记录一个有用PS1
  • Transformer:颠覆深度学习的架构革命与技术演进
  • javaScript——正则表达式(四)
  • 从实列中学习linux shell4: shell 脚本中 $0 $1 $2 $3 >> 以及 awk 都是干啥的?
  • 国内免费连接claude-3-7大模型操作教程
  • CSS常用属性_(进阶)
  • CSS:选择器-复合选择器
  • git分支分叉强制更改为线性
  • 为Mac用户定制的云服务器Vultr 保姆级教程
  • 关于安卓自动化打包docker+jenkins实现
  • DeepSeek V2:引入MLA机制与指令对齐
  • 音视频项目在微服务领域的趋势场景题深度解析
  • Dify Agent节点的信息收集策略示例
  • 智驾赛道的诺曼底登陆,Momenta上海车展雄起
  • 鲁迅先生儿媳、周海婴先生夫人马新云女士逝世,享年94岁
  • AI观察|算力饥渴与泡沫
  • 大理杨徐邱再审上诉案宣判:驳回上诉,维持再审一审判决
  • 上海通报5起违反中央八项规定精神问题
  • 科学时代重读“老子”的意义——对谈《老子智慧八十一讲》
  • 中国海警局新闻发言人就菲律宾非法登临铁线礁发表谈话