RNN 是什么

全称:Recurrent Neural Network · 循环神经网络 核心关键词:Recurrent(循环)—— 同一套参数反复调用处理序列每一步

一句话速记

RNN 是一种按顺序处理序列的神经网络,每一步用”当前输入 + 上一步的隐藏状态”算出新的隐藏状态,读完整个序列后最后的隐藏状态代表整体理解。

RNN 是 Transformer 的前任,理解 RNN 的三个致命缺点就理解了 Transformer 为什么存在。

通俗解释(5 分钟版)

它在解决什么任务

对一句话(或任何序列:音频帧、股票价格、一段代码)做理解,输出一个表示。比如:

  • 情感分类:读完 “这电影真难看” → 输出”负面”
  • 翻译:读完中文 → 输出英文
  • 预测下一个词:读完 “今天天气很” → 输出”好”

核心机制:隐藏状态向量 h 逐步更新

RNN 在处理序列时维护一个隐藏状态向量 h(hidden state),它是一个固定维度的向量(比如 256 维),用来累积到当前时间步为止的上下文信息。

  • 读第 1 个词 “我”:用 “我” 的向量 x_1 + 初始状态 h_0(全 0) → 算出 h_1
  • 读第 2 个词 “爱”:用 “爱” 的向量 x_2 + 上一步的 h_1 → 算出 h_2
  • 读第 3 个词 “北京”:用 x_3 + h_2h_3
  • 读第 4 个词 “天安门”:用 x_4 + h_3h_4
  • 读完。h_4 就是整句话 “我爱北京天安门” 的向量表示。

每一步都用同一组参数做这个计算(模型训练时学出来),只是输入不同。这个”反复调用同一个模块”的特性就是 RNN 里的 “R”(Recurrent)。

关键点:h 只有一份,每步的新 h_t 完全覆盖上一步的 h_{t-1},不是追加。信息靠”新 h_t 的计算里包含旧 h_{t-1}”间接继承,这正是长距离会衰减的数学根源——旧信息每一步都被重新加工一次,传得越远越稀薄。

为什么叫「隐藏状态」(hidden state)

与「隐藏层」同源:神经网络按层分,有输入层(外部输入)、输出层(任务输出)、以及中间的隐藏层(hidden layer)。叫 hidden 是因为对使用者来说不可见——中间张量不是输入张量、也不是最终消费结果,只是网络内部的工作空间。

统计 / 序列模型的传统:RNN 的语言里经常和 HMM(隐马尔可夫模型) 对照。HMM 区分观测变量(你看到的)和隐变量(模型内部需要推断的底层状态)。h 承载的是「对序列到目前为止的内部认识」,对应的是隐变量这条线,不是输入也不是最终输出。

不要误读成「加密 / 不让看」:训练、分析、部署时 h 完全可以被读出来、拿出来用(例如最后一层 hidden state 常当词向量 / 句向量做检索、相似度)。名字沿用的是历史术语,不是真的藏数据。

考察概率:词源级问题,很少考。知道「hidden = 非输入非输出的内部中间表示」足够。

画图

  "我"         "爱"        "北京"       "天安门"
    ↓            ↓            ↓             ↓
 ┌─────┐    ┌─────┐    ┌─────┐     ┌─────┐
 │ RNN │ →  │ RNN │ →  │ RNN │  →  │ RNN │
 └─────┘    └─────┘    └─────┘     └─────┘
    ↓            ↓            ↓             ↓
   h1           h2           h3            h4  ← 整句话的理解

一个数学公式(不记也行,理解直觉就够)

h_t = tanh(W_x · x_t + W_h · h_{t-1} + b)
  • x_t:当前词的向量
  • h_{t-1}:上一步的隐藏状态向量
  • W_x, W_h, b:模型学出来的参数
  • tanh:非线性激活函数

三个致命缺陷(Transformer 出现的根本原因)

1. 慢:顺序依赖,不能并行

  • h3 必须等 h2 算完
  • 100 个词必须按顺序算 100 步
  • GPU 擅长并行计算,在这里沦为单核

2. 忘:远距离信息衰减(梯度消失)

  • h4 里虽然理论上包含 “我” 的信息,但经过 3 次变换后严重稀释
  • 100 个词长的句子,第 1 个词对第 100 个词几乎没影响
  • 长句子根本理解不了

3. 训练累:反向传播也是串行

  • 前向串行,反向传播(调参数)也串行
  • GPU 大规模并行能力完全浪费
  • 训练大模型几乎不可能

LSTM 和 GRU 是什么

RNN 家族的两个重要升级版(2014~2015 年主流):

LSTM(Long Short-Term Memory)

在隐藏状态 h 之外引入了一个更稳定的细胞状态(cell state)c 作为长期记忆通道,配三扇门控制信息流动:

  • 遗忘门:决定从 c 里扔掉什么
  • 输入门:决定把当前信息写入 c 多少
  • 输出门:决定从 c 里读多少出来给 h

效果:大幅缓解了”忘”的问题(能记住更远的依赖)。 代价:参数和计算量比 RNN 多 4 倍,但还是解决不了”慢”和”不能并行”。

GRU(Gated Recurrent Unit)

LSTM 的简化版,把三扇门合并成两扇(更新门 + 重置门),参数比 LSTM 少,效果接近。工业界轻量场景用得多。

共同命运

LSTM / GRU 缓解了”忘”,但没改变”按顺序读”的根本架构,所以”慢 + 不能并行”这两个问题依然存在。这就是 2017 年 Transformer 出来后迅速取代它们的原因。

和 Transformer 对比(重点记这个表)

维度RNN / LSTMTransformer
处理方式按顺序一个个读所有词并行互看
任意两词距离O(n) 步(会衰减)O(1) 步(直达)
并行性时间维度不可并行完全可并行
GPU 利用率
长距离依赖弱(LSTM 有改善)
训练速度
推理速度一次一步(实际上生成时 Transformer 也是一次一步)训练快;推理时 Decoder 也是自回归

注意最后一行的陷阱:Transformer 在训练时完全并行(因为有真实答案做监督,可以同时给所有位置算损失);但在推理生成时(比如 GPT 生成一段文字),它还是一个 token 一个 token 吐出来的——这叫自回归(Autoregressive),本质上和 RNN 推理一样慢。差别在训练,不在推理。

RNN 还用吗(2026 年视角)

很少了,但不是完全死了:

  • 超低延迟场景:TinyRNN 在手机 / 边缘设备上做语音唤醒词,单步推理比 Transformer 省
  • 超长序列:RWKV / Mamba 这些”新 RNN”借壳回归(把 Transformer 能力塞进 RNN 架构里),目标是做到训练并行 + 推理 O(1) 内存
  • 教科书:学 NLP 的人还是会过一遍 RNN/LSTM 打底

应用工程岗通常不必实现 RNN,但需能说清结构、三缺陷、与 Transformer 对照

延伸追问

  • Q:为什么 RNN 会梯度消失? 答:反向传播时,梯度经过每个时间步要乘一次权重矩阵。如果这些乘积链条里的值小于 1,连乘到前面就趋近 0;大于 1 就会爆炸。LSTM 用门控机制让梯度可以”直通”(Constant Error Carousel)缓解了这个问题。

  • Q:LSTM 和 GRU 怎么选? 答:数据多、任务复杂、不差算力 → LSTM 更细腻;数据少、算力紧、要训得快 → GRU 参数少一成。2017 年后其实都该让位给 Transformer,除非你在做嵌入式。

  • Q:Transformer 解决了 RNN 所有问题吗? 答:解决了”慢 + 忘 + 不能并行”,但带来新问题——Self-Attention 复杂度 O(n²),序列一长就爆炸。这是 2023 年后 FlashAttention / vLLM / Linear Attention / Mamba 这些工作要解决的。

  • Q:你项目里用过 RNN 吗? 答:按实际情况答;若未用过,说明当前栈以 Transformer 系为主,仍须理解 RNN 与 Transformer 的对照,否则「为什么用注意力」讲不清。

我的记法

TODO

状态

  • 已背速记
  • 能讲通俗版
  • 能答追问
  • 在实际场景中用上过

参考资料