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

RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)

🔄 RNN循环网络:给AI装上"记忆"(superior哥AI系列第5期)

嘿!小伙伴们,又见面啦!👋 上期我们学会了让AI"看懂"图片,今天要给AI装上一个更酷的技能——记忆力!🧠

想象一下,如果你看电影时只能看到孤立的画面,完全记不住前面的剧情,你能理解这部电影吗?😵‍💫 如果你说话时忘记上一秒说了什么,别人能听懂你在说啥吗?

这就是为什么我们需要RNN(循环神经网络)!它能让AI像人类一样拥有"记忆",理解时间序列,掌握语言的前后文关系。今天superior哥就带你揭开RNN的神秘面纱!🎭

🤔 为什么AI需要"记忆力"?

回忆一下我们之前学过的网络

📊 传统神经网络:
  • 就像一个"瞬间反应机器"
  • 看到输入立马给出输出,完全不记得之前发生了什么
  • 适合处理固定大小的数据
📸 CNN:
  • 专门处理图像,有"空间感知能力"
  • 但仍然是"一次性"处理,没有时间概念
  • 看完这张照片就忘了,下张照片重新开始

🚨 传统网络遇到序列数据就"傻眼"了

生活中很多数据都是有时间顺序的:

📝 文本理解问题
  • 句子: “我昨天去北京吃了烤鸭”
  • 传统网络: 只能看到单个词,不知道时间关系
  • 问题: "昨天"和"吃了"的时态关系完全丢失!
🎵 音乐识别问题
  • 音乐: do-re-mi-fa-sol…
  • 传统网络: 每个音符都是独立的
  • 问题: 没有旋律的概念,无法理解音乐!
📈 股价预测问题
  • 股价: 今天100→明天102→后天98…
  • 传统网络: 只看当前价格
  • 问题: 看不到趋势,预测完全没用!

所以,AI急需一种"记忆力"来处理这些序列问题! 💪

🧠 RNN的核心思想:带着"记忆"去学习

RNN的设计哲学超级简单:让AI在处理每个新信息时,都能"回忆"起之前的经历!

🎭 生活中的记忆例子

想象你在听朋友讲故事:

  1. 朋友说:“昨天我去商场…”
    👉 你的大脑记住:时间=昨天,地点=商场

  2. 朋友接着说:“买了一件衣服…”
    👉 你的大脑想:昨天在商场买衣服

  3. 朋友最后说:“今天穿着很帅!”
    👉 你理解了:昨天买的衣服今天穿着帅

这就是RNN的工作方式!每处理一个新词,都会结合之前的"记忆"!

🔄 RNN的工作机制

RNN的核心创新就是引入了**“循环连接”**:

传统网络:失忆症患者
输入 → 处理 → 输出 
(每次都是全新开始,完全不记得之前的事)
RNN:有记忆力的智者
输入₁ → 处理 → 输出₁ → 记忆₁↓
输入₂ → 处理 ← 记忆₁ → 输出₂ → 记忆₂  ↓
输入₃ → 处理 ← 记忆₂ → 输出₃ → 记忆₃

🎯 RNN的三个关键步骤

在每个时间步,RNN都会:

  1. 📥 接收当前输入 x_t(比如当前这个词)
  2. 🧠 回忆过去记忆 h_{t-1}(之前理解的内容)
  3. 🔄 更新当前理解 h_t(结合新信息和旧记忆)
  4. 📤 输出当前结果 y_t(基于完整理解的预测)

📊 RNN的数学表达(别怕,很简单!)

h_t = tanh(W_hh × h_{t-1} + W_xh × x_t + b_h)
y_t = W_hy × h_t + b_y

翻译成人话:

  • h_t:当前时刻的"理解状态"(记忆)
  • tanh:激活函数(给神经元装个"性格")
  • W_hh:记忆权重(多重视过去的经验)
  • W_xh:输入权重(多重视当前信息)
  • W_hy:输出权重(如何基于理解做决策)

简单总结:新理解 = 过去记忆 + 当前输入 + 一点数学魔法✨

🎯 RNN的典型应用:从聊天到预测

💬 语言理解与生成

文本分类(情感分析)

任务: 判断"这部电影真的很棒,我推荐大家去看!"是正面还是负面评价

RNN处理过程:

  1. “这部” → 理解:在讨论某个事物
  2. “电影” → 更新理解:在讨论电影
  3. “真的很棒” → 更新理解:这是正面评价!
  4. “推荐” → 确认理解:确实是正面的
机器翻译

任务: “我爱学习” → “I love learning”

RNN处理:

  1. 编码器RNN:理解中文句子的含义
  2. 解码器RNN:根据理解生成英文

📈 时间序列预测

股价预测

历史数据: [100, 102, 98, 105, 103, …]
RNN学习: 股价的变化趋势和模式
预测: 下一天可能的价格

天气预测

历史数据: [温度、湿度、风速、气压…]
RNN学习: 天气变化的规律
预测: 明天的天气情况

🎵 创意生成

音乐创作

训练: 喂给RNN大量音乐作品
学习: 音符之间的关系和音乐规律
创作: 生成新的旋律

诗歌创作

训练: 学习古诗词的格律和韵律
创作: 生成符合格律的新诗

😰 RNN的"阿尔兹海默症":梯度消失问题

虽然RNN很强大,但它有个致命弱点:记忆力不持久!

🤯 梯度消失:记忆的噩梦

想象RNN是个健忘的老人:

  • 短期记忆OK: 能记住刚才说的几句话
  • 长期记忆NG: 完全忘记了开头说了什么

技术原因:
当序列很长时,梯度在反向传播过程中会越来越小,最终接近于0,导致网络无法学习长期依赖关系。

实际表现:

  • 能理解"我饿了,想吃饭"(短序列)
  • 搞不懂"我早上7点起床,刷牙洗脸,然后…(中间100个词)…所以现在很饿"(长序列)

💡 解决方案预告

为了解决这个问题,科学家们发明了RNN的"升级版":

  • LSTM(长短期记忆网络):专门解决遗忘问题
  • GRU(门控循环单元):LSTM的简化版

我们下次详细讲!

🛠️ 实战时间:用RNN预测股价

让我们用Python搭建一个简单的RNN来预测股价:

import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as pltclass SimpleRNN(nn.Module):def __init__(self, input_size=1, hidden_size=32, output_size=1, num_layers=2):super(SimpleRNN, self).__init__()# RNN层self.rnn = nn.RNN(input_size=input_size,      # 输入特征数hidden_size=hidden_size,    # 隐藏状态大小  num_layers=num_layers,      # RNN层数batch_first=True           # 批次优先)# 输出层self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):# x shape: (batch_size, sequence_length, input_size)# RNN前向传播rnn_out, hidden = self.rnn(x)# rnn_out shape: (batch_size, sequence_length, hidden_size)# 只要最后一个时间步的输出predictions = self.fc(rnn_out[:, -1, :])# predictions shape: (batch_size, output_size)return predictions# 创建模型
model = SimpleRNN(input_size=1, hidden_size=32, output_size=1)# 模拟股价数据  
def generate_stock_data(seq_length=30, num_samples=1000):"""生成模拟股价数据"""prices = []for _ in range(num_samples + seq_length):if len(prices) == 0:price = 100  # 起始价格else:# 随机游走 + 一点趋势change = np.random.normal(0, 1) + 0.01 * np.sin(len(prices) / 50)price = prices[-1] + changeprices.append(price)return np.array(prices)# 准备训练数据
def create_sequences(data, seq_length):"""创建序列数据"""X, y = [], []for i in range(len(data) - seq_length):X.append(data[i:i+seq_length])y.append(data[i+seq_length])return np.array(X), np.array(y)# 生成数据
stock_prices = generate_stock_data()
X, y = create_sequences(stock_prices, seq_length=30)# 转换为PyTorch张量
X = torch.FloatTensor(X).unsqueeze(-1)  # 添加特征维度
y = torch.FloatTensor(y)print(f"输入形状: {X.shape}")  # (样本数, 序列长度, 特征数)
print(f"输出形状: {y.shape}")  # (样本数,)# 简单训练循环示例
criterion = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 训练几个epoch
for epoch in range(100):optimizer.zero_grad()predictions = model(X[:800])  # 用前800个样本训练loss = criterion(predictions.squeeze(), y[:800])loss.backward()optimizer.step()if epoch % 20 == 0:print(f'Epoch {epoch}, Loss: {loss.item():.4f}')# 测试预测
model.eval()
with torch.no_grad():test_predictions = model(X[800:900])test_loss = criterion(test_predictions.squeeze(), y[800:900])print(f'Test Loss: {test_loss.item():.4f}')

🎉 总结:RNN开启了AI的"时光记忆"

🏆 RNN的核心优势

  1. 🧠 拥有记忆:能记住之前的信息,理解上下文
  2. 🔄 处理变长序列:不限制输入长度,灵活应对
  3. ⏰ 理解时间关系:掌握事件的先后顺序
  4. 📝 自然语言友好:特别适合文本和语音处理

🎯 RNN的典型应用

  • 💬 聊天机器人:理解对话上下文
  • 🌐 机器翻译:Google翻译的核心技术
  • 📈 金融预测:股价、汇率预测
  • 🎵 艺术创作:音乐、诗歌生成
  • 🗣️ 语音识别:Siri、Alexa背后的技术

⚠️ RNN的局限性

  1. 🤕 梯度消失问题:长序列记忆力不足
  2. 🐌 训练速度慢:无法并行计算
  3. 💾 计算资源需求大:尤其是长序列

🚀 下期预告:LSTM和GRU

下一期我们要学习RNN的"升级版":

  • 🧠 LSTM:如何解决遗忘问题?
  • ⚡ GRU:更简洁但同样强大
  • 🎯 实战项目:文本情感分析、聊天机器人

这些技术将让AI的记忆力大大提升,能处理更长、更复杂的序列!

记得点赞收藏关注三连!我们下期见!👋


💡 superior哥的RNN记忆小贴士:RNN就像给AI装了个"大脑记忆系统"。虽然它不完美(会健忘),但已经能让AI理解很多有时间关系的任务了。记住:AI的进步是一步步来的,先有记忆,再有更好的记忆!继续加油!🧠✨

相关文章:

RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)

🔄 RNN循环网络:给AI装上"记忆"(superior哥AI系列第5期) 嘿!小伙伴们,又见面啦!👋 上期我们学会了让AI"看懂"图片,今天要给AI装上一个更酷的技能——…...

Python训练第四十三天

DAY 43 复习日 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms, models …...

基于有效集MPC控制算法的直线同步电机simulink建模与仿真,MPC使用S函数实现

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统仿真参数 5.系统原理简介 6.参考文献 7.完整工程文件 1.课题概述 有效集算法通过迭代地选择一组 "有效" 约束,将约束优化问题转化为一系列无约束或等式约束优化问题。直线同步电机 (Linear Synch…...

让敏感数据在流转与存储中始终守护在安全范围

在企业数字化运营浪潮中,企业内部应用服务器面临着非法访问、数据泄露等风险,如何全面守护应用服务器文件安全,让敏感数据在流转与存储中始终守护在安全范围? 服务器白名单让数据流转安全又高效 天 锐 蓝盾的服务器白名单功能既…...

【Linux】find 命令详解及使用示例:递归查找文件和目录

【Linux】find 命令详解及使用示例:递归查找文件和目录 引言 find 是 Linux/Unix 系统中强大的文件搜索工具,用于在目录层次结构中递归查找文件和目录。它提供了丰富的搜索条件和灵活的操作选项,可以满足从简单到复杂的各种文件查找需求。 …...

Java转Go日记(五十九):参数验证

1. 结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多。 package mainimport ("fmt""time""github.com/gin-gonic/gin" )//Person .. type Person struct {//不能为空并且大于10Age …...

机器学习与深度学习14-集成学习

目录 前文回顾1.集成学习的定义2.集成学习中的多样性3.集成学习中的Bagging和Boosting4.集成学习中常见的基本算法5.什么是随机森林6.AdaBoost算法的工作原理7.如何选择集成学习中的基础学习器或弱分类器8.集成学习中常见的组合策略9.集成学习中袋外误差和交叉验证的作用10.集成…...

MySQL数据库表设计与索引优化终极指南

MySQL数据库表设计与索引优化终极指南 标签:MySQL 数据库设计 索引优化 性能调优 一、前言:为什么表设计和索引如此重要? 在数据库系统中,良好的表设计和高效的索引策略是保证系统性能的关键。据统计,约70%的数据库性…...

【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码

摘要 在多智能体强化学习(MARL)中,通常采用参数共享来提高样本效率。然而,全参数共享的流行方法通常会导致智能体之间的策略同质,这可能会限制从策略多样性中获得的性能优势。为了解决这一关键限制,我们提出…...

负载均衡LB》》HAproxy

Ubuntu 22.04 安装HA-proxy 官网 资料 # 更新系统包列表: sudo apt update # 安装 HAproxy sudo apt install haproxy -y # 验证安装 haproxy -v # 如下图配置 Haproxy 在这里插入代码片》》》配置完之后 重启 Haproxy sudo systemctl restart haproxy 补充几…...

Vue 中组件命名与引用

Vue 中组件命名与引用 前言 在 vue 项目中,我们会发现在代码中,import 组件 和 components 组件注册中得命名方式与组件引用时的命名方式不一样,这种现象是由组件名的大小写转换规则造成的。如下示例: 组件引入与注册&#xff…...

UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误

提问 UE5报错如图。解析原因 回答 你遇到的这个错误提示是: “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…...

在uni-app中如何从Options API迁移到Composition API?

uni-app 从 Options API 迁移到 Composition API 的详细指南 一、迁移前的准备 升级环境: 确保 HBuilderX 版本 ≥ 3.2.0项目 uni-app 版本 ≥ 3.0.0 了解 Composition API 基础: 响应式系统:ref、reactive生命周期钩子:onMount…...

Rust 控制流

文章目录 Rust 控制流if 表达式循环实现重复用 loop 重复代码从循环返回值循环标签用于区分多层循环while 条件循环用 for 循环遍历集合 Rust 控制流 在大多数编程语言中,根据条件是否为真来运行某些代码,以及在条件为真时重复运行某些代码,是…...

【Linux基础知识系列】第十三篇-Cron与定时任务管理

在Linux系统中,任务自动化是提高效率和确保服务连续性的关键。Cron是一个强大的定时任务管理工具,它允许用户设置定期执行的命令或脚本。通过Cron,用户可以自动化系统维护、备份、报告生成等多种任务。本文将详细介绍如何使用Cron工具创建和管…...

Visual Studio 中的 MD、MTD、MDD、MT 选项详解

在Visual Studio中开发C++项目时,正确选择运行时库(runtime library)对于确保应用程序的性能、稳定性和兼容性至关重要。本文将详细介绍/MD, /MT, /MDd, 和 /MTd这些编译器选项的意义、应用场景及其区别。 MSVCRT.dll MSVCRT.dll 是 Microsoft Visual C++ Runtime Library …...

Python 3.11.9 安装教程

前言 记录一下Windows环境下Python解释器的安装过程。 安装过程 1、安装程序下载 打开Python官网: 点击Downloads,选择Windows: 页面中找到需要的3.11.9版本,点击Download Windows installer (64-bit)下载: 2、…...

【各种主流消息队列(MQ)对比指南】

主流消息队列对比分析 一、核心指标对比 特性/消息队列RabbitMQKafkaRocketMQActiveMQPulsar协议支持AMQP, MQTT, STOMP自定义协议JMS/自定义协议JMS, AMQP, MQTT, STOMPMQTT, AMQP, STOMP单机吞吐量万级百万级十万级万级百万级延迟微秒级(低吞吐)毫秒…...

PySpark、Plotly全球重大地震数据挖掘交互式分析及动态可视化研究

全文链接:https://tecdat.cn/?p42455 分析师:Yapeng Zhao 在数字化防灾减灾的时代背景下,地震数据的深度解析成为公共安全领域的关键议题。作为数据科学工作者,我们始终致力于通过技术整合提升灾害数据的应用价值(点击…...

代码训练LeetCode(24)数组乘积

代码训练(24)LeetCode之数组乘积 Author: Once Day Date: 2025年6月5日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 238. 除自身以外数组的乘积 - 力扣(LeetCode)力扣 (LeetCode) 全…...

如何让AI自己检查全文?使用OCR和LLM实现自动“全文校订”(可DIY校订规则)

详细流程及描述参见仓库(如果有用的话,请给个收藏): GitHub - xurongtang/DocRevision_Proj: A simple project about how to revist docment (such as your academic paper) in a automatic way with the help of OCR and LLM.A…...

volka 25个短语动词

以下是分句分段后的内容: 3,000. Thats 95% of spoken English. And I am teaching you all of these words. First, Ill teach you todays words. And then youll hear them in real conversations. With my brother. Stick around until the end, because witho…...

Java观察者模式深度解析:构建松耦合事件驱动系统的艺术

目录 观察者模式基础解析核心结构与实现原理Java内置观察者实现Spring框架中的高级应用典型应用场景与实战案例观察者模式变体与优化常见问题与最佳实践总结与未来展望1. 观察者模式基础解析 1.1 模式定义与核心思想 观察者模式(Observer Pattern)是一种行为型设计模式,它…...

DFT测试之TAP/SIB/TDR

TAP的作用 tap全称是test access port,是将jtag接口转为reset、sel、ce、ue、se、si、tck和so这一系列测试组件接口的模块。 jtag的接口主要是下面几个信号: 信号名称信号方向信号描述TCK(测试时钟)输入测试时钟,同…...

【推荐算法】DeepFM:特征交叉建模的革命性架构

DeepFM:特征交叉建模的革命性架构 一、算法背景知识:特征交叉的演进困境1.1 特征交叉的核心价值1.2 传统方法的局限性 二、算法理论/结构:双路并行架构2.1 FM组件:显式特征交叉专家2.2 Deep组件:隐式高阶交叉挖掘机2.3…...

C#报错 iText.Kernel.Exceptions.PdfException: ‘Unknown PdfException

【问题】 直接new一个PdfWriter的对象直接会报错: iText.Kernel.Exceptions.PdfException: Unknown PdfException. NotSupportedException: Either com.itextpdf:bouncy-castle-adapter or com.itextpdf:bouncy-castle-fips-adapter dependency must be added in…...

数据库表中「不是 null」的含义

例图: 1.勾选了「不是 null」(NOT NULL): 这个字段在数据库中必须有值,不能为空。也就是说,你插入数据的时候,必须给它赋值,否则插入会报错。 2.没有勾选「不是 null」&#xff…...

Elasticsearch的搜索流程描述

Elasticsearch 的搜索流程是一个结合 分布式查询、分片协同、结果聚合和排序 的复杂过程,其设计目标是在海量数据中实现快速检索和精准结果返回。以下是搜索流程的详细解析: 一、搜索流程总览 Elasticsearch 搜索流程示意图 (图源:Elastic 官方文档) 二、详细步骤解析 …...

Visual Studio问题记录

程序"xxx dotnet.exe"已退出,返回值为-2147450730 问deepseek:visual studio输出程序dotnet.exe已退出,返回值为-2147450730 dotnet.exe 编译时退出并返回错误代码 **-2147450730**(十六进制 0x80008076)&…...

GNSS终端授时方式-合集:PPS、B码、NTP、PTP、单站授时,共视授时

GNSS接收机具备授时功能,能够对外输出高精度的时间信息,并通过多种接口、多种形式进行时间信息的传递。 step by step介绍GNSS卫星导航定位基本原理,为什么定位需要至少4个卫星?这个文章的最后,我们介绍了为什么GNSS接…...