循环神经网络 RNN、LSTM、GRU 是什么?为什么能处理序列?

🎯 博主简介

你好,我是安逸,CSDN「人工智能技术领域新星创作者」,码龄 6 年。博客总访问量 31万+,博客粉丝 1.2万+。

我长期关注人工智能技术与工程实践,主要研究和分享 AI Agent、RAG 系统、MCP 协议、OpenClaw、AI 编程工具以及大模型工程化落地。同时也持续输出 Java / Spring、Transformer、机器学习、深度学习与计算机视觉等方向的学习笔记和项目经验。

📚 推荐系列合集

目前已经整理了 生产级 RAG 系统实战Agent 记忆系统MCP 协议深度解析OpenClaw 系列Hermes Agent + Obsidian图解机器学习Claude Code 系列Agent 经典面试题等系列合集,涵盖 AI 应用开发、智能体实践、知识管理、机器学习与 AI 编程工具。

📱GZH:安逸Ai (科技前沿新闻,Github热门项目,最新免费资料...)

网页观看完整系列合集:🌐 Anyi AI 学习资源站


上篇我们聊完CNN,看它怎么像放大镜一样,逐块扫图像、提取特征。

但有一类数据,CNN处理起来很吃力------什么数据呢?

有时间顺序的数据。

你跟 Siri 说的那句"嘿,明天早上七点叫我起床"------这串声音信号得按顺序听完,才能理解意思。少听任何一个字,意思就变了。

这种"前面影响着后面"的数据,就是序列数据

今天咱们来看看,专门处理这类数据的循环神经网络(RNN),是怎么工作的。


什么是序列数据?

先说清楚我们要对付的是什么。

序列数据,就是按顺序排排坐、后面的人跟前面有关联的数据。

举个例子:

  • 文本:读句子"这个小哥长得真__",填"帅"还是"丑"?得看前面说的是好话还是坏话。
  • 语音:听到"java"是咖啡还是编程语言?得结合前后语调判断。
  • 股票价格:今天涨了,昨天呢?上周呢?光看今天啥也不知道。
  • 视频:前一帧是狗跑过去,下一帧可能就是这个狗的特写。

这类数据的共同点:顺序即信息

你把一句话的词打乱顺序,意思可能全变了。但把一张图片的像素打乱,CNN 还能认出是只猫。

这就是序列数据和空间数据的本质区别。

传统神经网络假设每个输入都是独立的,看完就忘。但序列数据需要记着前面,才能理解后面

机器怎么做到?

靠 RNN。

生活中序列数据示例图,展示文本、语音、视频、时间序列数据的顺序依赖关系


RNN的基本原理------让网络拥有"记忆"

RNN 的全称是 Recurrent Neural Network,循环神经网络。

"循环"这两个字很关键。

普通神经网络:输入 → 输出,然后就结束了。

RNN:输入 → 处理 → 输出,同时把自己算出来的东西再塞回来,传给下一步。

什么意思?

想象你在追剧。

第一集看完,你脑子里有了印象:谁是谁、啥关系。第二集来了,你不傻站着重新认识所有人,而是结合已经记住的印象继续看。

第三集、第四集同理。每集都在旧的记忆上加新内容

RNN就是这么工作的。

它在每个时间步,都会把"上一步算出来的结果"和"这一步的新输入"放一起,一起决定"这一步该输出什么"。

这就叫隐藏状态(hidden state)------就是网络此刻的"记忆"。

用一个公式表示:

复制代码
  当前隐藏状态 = f(当前输入, 上一步隐藏状态)

你看,这个f是同一个函数。每一步都用同样的规则处理输入和记忆。

这叫参数共享------一个大脑处理所有时间步,而不是每一步都长个新脑子。

RNN循环结构与时间展开对比图,标注隐藏状态循环和权重共享机制

画成展开图就是这样:

t=1 时刻:输入x₁ + 初始记忆h₀ → 输出h₁

t=2 时刻:输入x₂ + h₁(记忆) → 输出h₂

t=3 时刻:输入x₃ + h₂(记忆) → 输出h₃

......

每一步的输出,既给当前用,也传给下一步。

循环就是这样形成的。


BPTT------RNN是怎么学习的

现在你理解了 RNN 的工作流程:记住过去,理解现在。

但还有一个问题:RNN 怎么知道该记住什么?

它得学习。

RNN 用的是 BPTT 算法,全称 Backpropagation Through Time------穿越时间的反向传播。

名字挺唬人,其实原理不复杂。

神经网络的学习都靠反向传播:算出来的结果跟正确答案比一比,错了就往回找原因,告诉网络"你哪里算错了、该往哪改"。

RNN 也是这个思路,只是它的时间步展开了。

从最后一个时间步,一路往前推。看看最终结果错在哪,然后一级一级往前问:"你们谁的责任更大?"

这就是"穿越时间"的含义------从结果倒推到开头。

但问题来了。

序列很长的时候,这种"问责链"就很长。开头的信息要传到结尾,就像跑一场马拉松。

信号每传一层,可能会变强(梯度爆炸)或变弱(梯度消失)。

什么意思?

  • 梯度爆炸:网络学过头了,一改就改得特别大,参数乱跳,训练不稳定
  • 梯度消失:网络学不动了,前面的信息传过来已经弱到忽略不计,根本学不会长依赖

你想想,让你复述一部两小时电影的全部情节,从头讲到尾细节还能对?

很难对吧。人脑也有类似问题,叫"遗忘"。

RNN 的问题是:短期记忆还行,长期记忆不太行

这就是 RNN 的局限性。

那怎么办?

聪明的研究者给 RNN 加了点东西,发明了 LSTM。


LSTM------给记忆装上"阀门"

LSTM,Long Short-Term Memory Networks,长短期记忆网络。

名字已经透露了关键:它想解决"长期依赖"的问题。

怎么做到的?

它给网络加了一套门控机制

你可以把 LSTM 想象成一个有策略的秘书。不是所有信息都往脑子里塞,而是先过一遍安检:该记的记,该忘的忘

具体来说,LSTM 有三个门:

1. 遗忘门

决定:上次的记忆,哪些该扔掉?

举个例子。

你读小说,第一章记住了"主角叫张三"。读到第五章,主角改名叫李四了。遗忘门就会说:"张三这个名字,忘了它。"

公式长这样:

复制代码
  遗忘门 = σ(Wf · [上一步隐藏状态, 当前输入] + bf)

σ 是 sigmoid 函数,输出 0 到 1 之间的值。越接近 0,越该忘掉;越接近 1,越该记住。

2. 输入门

决定:新来的信息,哪些该记住?

你读到第五章,发现主角性格大变。输入门会说:"这个性格特点,很重要,记下来。"

同时,还有一个候选记忆------新鲜滚热辣的新信息,待会儿一起决定加不加进记忆。

3. 输出门

决定:当前时刻,该输出什么?

记忆很多,但不是所有都跟当前任务有关。输出门负责筛选:"现在这个场景,我该让你看到什么?"

还有一个关键创新:细胞状态(Cell State)

它像一条传送带,信息可以从头传到尾,不用每一步都重新判断该记什么。

这条传送带上,有遗忘门把关,哪些旧记忆该删;也有输入门把关,哪些新记忆该加。

记忆的流动更稳定了,梯度消失的问题也缓解了。

LSTM单元内部结构图,标注遗忘门、输入门、输出门和细胞状态

LSTM 的设计很精妙。它不是死板的规则,而是让网络自己学习:什么时候该记住,什么时候该忘记

读小说遇到转折点,遗忘门自动加强。遇到重要情节,输入门自动激活。

这就是"智能"的体现。


GRU------更简洁的门控高手

LSTM 效果很好,但结构复杂。三个门加细胞状态,参数多,训练慢。

有没有更简单但同样有效的方案?

有。GRU。

GRU,Gated Recurrent Unit,门控循环单元。

它的改进很直接:能用一个门解决的事,就别用两个

LSTM 有三个门(遗忘、输入、输出),外加一条细胞状态。

GRU 只有两个门

1. 更新门

合并了 LSTM 的遗忘门和输入门。

它决定:该保留多少旧记忆,该吸收多少新信息

更新门值高 = 更多保留旧记忆

更新门值低 = 更多接受新信息

2. 重置门

决定:该如何看待过去的记忆

重置门值高 = 忘掉过去,从头理解

重置门值低 = 结合过去,一起理解

GRU 还取消了细胞状态,隐藏状态直接承担记忆功能。

结构简化了,但核心能力没丢。

GRU与LSTM结构对比图,展示两个门的简化设计

实际应用中,GRU 和 LSTM 性能往往不相上下。

怎么选?

  • 资源有限、追求效率:选 GRU,参数量少约 25%,训练更快
  • 序列很长、依赖关系很复杂:LSTM 的额外结构可能带来一点点优势
  • 不确定:先试 GRU,不行再换

大多数场景,GRU 是更务实的选择。


RNN家族一览------各有所长

聊完三个成员,我们来横向对比一下。

模型 门结构 复杂度 长期依赖 适用场景
标准RNN 最低 短序列、简单任务
LSTM 三个门+细胞状态 长序列、复杂依赖
GRU 两个门 长序列、追求效率

还有几个值得了解的变体:

双向RNN(Bi-RNN)

普通 RNN 只能"看"过去。但有些任务,"未来"的信息也有用。

比如读"这个电影很___"------填"好看"还是"难看",得看后面有没有"但是"两个字。

双向 RNN 就是同时从前往后、从后往前读,合并两边的信息。

深度RNN

多堆几层隐藏状态,像加深普通神经网络一样加深 RNN,提升表达能力。

但也不是越深越好,训练难度也会增加。

还有一个问题:RNN 过时了吗?

这两年 Transformer 火得一塌糊涂,Attention 机制横扫 NLP 领域。很多人觉得 RNN 该淘汰了。

但未必。

RNN 在处理超长序列、实时流数据、资源受限的场景下,依然有优势。

它的记忆机制是"按顺序"的,不需要像 Transformer 那样两两计算关系。

就好比汽车发明了,自行车也没消失。

最新最强 ≠ 所有场景最优

RNN家族性能对比表,涵盖门结构、复杂度、长期依赖能力、参数量等维度


记忆的代价与进化

从标准 RNN 到 LSTM 再到 GRU,我们看到了一条清晰的进化路线:

让机器学会更聪明地记忆。

标准 RNN 什么都记,容易忘。LSTM 学会了筛选,但结构复杂。GRU 做了权衡,用更少的资源达到接近的效果。

但万变不离其宗:这些模型都在努力解决同一个问题------如何让信息在时间的长河里有效传递

你可能会问:为什么非得记住过去?直接"看全身"不行吗?

Transformer 就是这个思路:不靠记忆,靠"一眼看到所有"。

效果确实更好。但代价是计算量随序列长度平方增长。

而 RNN 的计算量是线性增长的。序列越长,这个优势越明显。

所以,没有完美的模型,只有更适合当前场景的模型

理解 RNN 的工作原理,不只是为了知道一门"老技术",更是理解所有序列模型演进的起点。

下次你对着手机说话被准确识别,或者看到机器翻译流畅输出时,不妨想想背后这些"记忆大师"们的功劳。

不过,记忆终究有极限。

当序列越来越长,依赖关系越来越复杂,RNN 家族就开始吃力了。

怎么办?

下一个突破,就是Attention 机制------让模型学会"重点关注"。

它是怎么工作的?

相关推荐
猿小猴子1 小时前
主流 AGENT 实战教程「OpenCodex」与「ChatGPT Work」与「Codex Record & Replay」介绍
人工智能·ai·chatgpt·codex·minimax·deepseek·opencodex
shdwak....sad1 小时前
版本管理&迁移kali-vmware&知识库
人工智能·网络安全
程序员cxuan2 小时前
OpenAI Linux 版来了!
人工智能·后端·程序员
用户5619035069332 小时前
OpenAI兼容API报401/404/429怎么解决?API Key、Base URL、模型名排查
人工智能
lucky_syq2 小时前
专栏目录与学习路线 | 48 篇正文导览
人工智能·学习
TechEdu2026062 小时前
[人工智能]RLlib:基于Ray的可扩展强化学习框架
人工智能·ai
加多2 小时前
DeepSeek Harness 深度分析:用途、问题、架构原理与使用指南
人工智能·架构
风流 少年2 小时前
Spring AI 2.0:Flux
java·人工智能·spring
小马过河R2 小时前
Graph Engineering 深度解析:模型越强,越需要给它画好“地图”
人工智能·langchain·graph·ai工程化·harness·驾驭工程