← 深度学习导航
CORE PATH · 04

循环神经网络(RNN)与序列模型

序列任务的核心问题是“怎样保存历史”。Hidden State 提供记忆,BPTT 负责训练,LSTM/GRU 解决长期依赖,Attention 再进一步动态选择相关信息。

为什么需要 RNN?

术语:循环神经网络(Recurrent Neural Network, RNN)使用隐藏状态(Hidden State)保存序列历史;长短期记忆网络(Long Short-Term Memory, LSTM)通过门控结构改善长期依赖;注意力机制(Attention)按相关性读取输入信息。
MLP每次输入彼此独立,没有记忆,不知道前面发生了什么
WindowSliding Window 只能看固定窗口,只能表示短期依赖
RNN引入 Hidden State,把过去的重要信息带到当前时间步
Share所有时间步共享同一组参数,可处理 variable-length sequence
完整链条:序列任务需要记住历史信息 → RNN 引入 Hidden State → 长序列 BPTT 梯度消失/爆炸 → LSTM / GRU 用 Gate 与 Cell State 稳定长期记忆 → Seq2Seq、BiRNN、Attention 继续扩展。

Sliding Window:固定看附近 Input

原笔记内容

SLIDING WINDOW

Sliding Window = 一次直接看固定数量的附近 input。

x₁ x₂ x₃ x₄ x₅以 x₃ 为中心,看附近几个 input

缺点:Window size 固定,所以只能处理 short-range dependency。

NETTALK

看 7 Characters

NetTalk 查看 7 个 characters,预测中间 character 的 pronunciation,不是预测 character 本身。

KEY DIFFERENCE

Window vs RNN

Sliding Window = 固定看过去原文。RNN = 用 hidden state 总结过去。

扩展理解:窗口方法不会自动把窗口外的信息压缩进状态;如果依赖距离超过 window size,模型就无法直接看到那段信息。

Hidden State:连续空间里的“当前状态”

Discrete state machine

S0、S1、S2

传统状态机用离散编号表示当前状态。

RNN state

连续值向量 hₜ

每输入一个新符号就更新,携带到目前为止最重要的历史信息。

hₜ = f(Wₓₕxₜ + Wₕₕhₜ₋₁ + b)一句中文:新的记忆 = 当前输入 + 旧记忆(经过共享参数与非线性变换)

不是手写计数器

Hidden State 不需要像程序一样设置一个整数计数器;它可以通过连续空间中的运动轨迹(Trajectory)表示计数和语法结构。

RNN 是动态系统

参数稍微变化,长期行为可能突然改变,形成 Phase Transition。理论上能表示复杂动态,但序列越长越难训练。

Simple RNN、Elman 与 Jordan Network

核心记忆结构

RECURRENT LINKS

RNN = 当前 input + 过去 hidden state → 新 hidden state。

为什么 hidden state 是 memory?因为 ht−1 会一直传到下一 timestep,把过去的重要信息 compact 到固定长度 vector 里。

Elman Network

hidden state → context → 下一 hidden state。也就是把上一时刻的 hidden activation 反馈给下一时刻。

Jordan Network

output feedback → hidden。Jordan 属于低优先级,关键区别是反馈来源为 output。

RNN 如何学习规则,而不是背答案?

训练原则

  • 不能只训练固定长度
  • 要学习生成规则,而不是记住训练答案
  • 输出应是概率分布,而不是唯一答案

语言复杂度

  • Regular → Finite State Automaton
  • Context-Free → Pushdown Automaton
  • Context-Sensitive → 更强机器

Formal Language / Hidden Dynamics

SEQUENCE RULES

RNN 可以表现得像 Finite State Automaton (FSA),但不是 RNN 里面真的装了一个 FSA;而是 hidden activation 的不同区域可以学成不同“状态”,输入让 hidden state 在状态之间转换。

Formal Language Recognition:先一个字符一个字符读完整个 sequence,最后再 Accept / Reject;不是每一步都 Accept / Reject。

CLASSIC BENCHMARK

为什么 aⁿbⁿ 很重要?

读 a需要记住 a 的数量
遇到 b第一个 b 最难预测,因为转折点未知
读后续 bHidden State 逐步抵消之前累积的 a
结束判断 a 与 b 是否数量匹配

普通有限状态机没有无限计数能力,无法对任意 n 完成 aⁿbⁿ。RNN 可让 Hidden State 累积 a、抵消 b,并用连续轨迹近似计数。第一个 b 最难预测;一旦进入 b 区域,后续字符越来越容易预测。

HIDDEN DYNAMICS

Hidden trajectory · Fixed point · Spiralling · Activation space

这些词共同说明:RNN 可以用 hidden state 在连续空间中的位置或轨迹表示状态、数量和 sequence progress。读一个 a,hidden state 可以往里 spiral;读一个 b,则往外 spiral。Hidden dynamics = hidden state 的运动本身可以编码 memory。

REBER GRAMMAR

测试 Sequence Rule

Reber Grammar 用于测试 sequence rule;Embedded Reber Grammar 加入更长距离 dependency,更适合测试 long-range memory。不用背 grammar 图。

怎么训练 RNN:Unroll 与 BPTT

Backpropagation Through TimeBPTT = Unroll + Shared Weights + Backprop Through Time
Unroll把同一个 RNN 单元沿时间展开
Forward每个 hₜ 依赖 hₜ₋₁
Loss各时间步产生预测误差
BPTT梯度沿时间反向传播
Shared W累计后更新共享参数
非常重要:所有 timestep 使用 shared weights。展开图不是很多不同 network,而是同一个 RNN cell 在不同 timestep 的展开;梯度沿 t → t−1 → t−2 → … 传播。

Gradient Vanishing

梯度跨越很多时间步时反复乘以小导数,早期信息的学习信号越来越弱,模型容易遗忘。

Gradient Exploding

反复乘以较大导数时,梯度突然变得极大,参数更新不稳定。

核心表述:普通 RNN 很难学习长期依赖,因为梯度必须跨越很多时间步传播,在传播过程中容易发生梯度消失或梯度爆炸。

LSTM:RNN + 长期记忆本 + 三个管理员

Hidden State

你此刻脑子里正在想的东西,例如正在做的一道题;它会快速变化。

+

细胞状态(Cell State)

它像长期信息通道,保存需要跨越多个时间步的信息,让信息与梯度能沿更长序列传播。

Forget Gate哪些旧知识已经没用了,可以从笔记本划掉?
Input Gate当前的新知识是否重要,要不要写进长期笔记?
Output Gate当前做题时,应该从笔记本拿出哪些知识来回答?
一句话牢牢记住:RNN 只有一个不断变化的“脑子”(Hidden State);LSTM 增加一个“长期笔记本”(Cell State),并通过 Forget、Input、Output 三个 Gate 管理信息,因此更擅长长序列和长期依赖。

GRU:更轻量的门控版本

Update Gate

综合 LSTM 的 Forget / Input 思想,决定保留多少旧信息、写入多少新信息。

Reset Gate

决定在产生候选状态时,要忽略多少过去信息。

模型独立 Cell State特点
普通 RNN结构简单,长依赖较弱
LSTMForget / Input / Output长期记忆控制细致,参数更多
GRUUpdate / ResetLSTM 简化版,参数更少、通常训练更快

从 Seq2Seq 到 Attention

S2SSeq2Seq 用 Encoder 把输入序列编码,再由 Decoder 生成输出,常用于机器翻译
Limit传统 Seq2Seq 把整句压成固定长度向量,长句容易丢失信息
AttnAttention 在生成每个目标词时,动态关注输入序列中最相关的位置
BiRNNBiRNN 同时利用过去与未来上下文,但不适合严格在线、只能看过去的场景

普通 RNN

Hidden State 保存历史,但长距离依赖容易遗忘早期信息。

LSTM

三门共同管理 Cell State,让长期信息和梯度稳定传播。

GRU

Update / Reset Gate 控制信息流,无独立 Cell State,参数较少。

Attention

不再只依赖单个固定向量,而是为每个输出动态读取输入。

比较第一种方法第二种方法
Sliding Window vs RNNWindow = 固定附近原文RNN = hidden state 总结过去
RNN vs LSTMRNN 长期 memory 容易丢LSTM 用 gates 控制 memory
LSTM vs GRULSTM 有 3 gatesGRU 更简单,有 2 gates
Bidirectional vs AttentionBidirectional = 两个方向处理 sequenceAttention = 动态决定关注哪些 positions
一句话:RNN = 把过去压进 memory。Attention = 需要的时候直接回头看相关位置。

RNN 全章知识树

RNN ├── 为什么需要? │ ├── MLP 没有记忆 │ ├── Sliding Window 只能短期依赖 │ └── Hidden State 引入记忆 ├── 怎么工作? │ ├── Hidden State │ ├── Parameter Sharing │ └── Variable-length Sequence ├── 怎么训练? │ ├── Unroll │ └── BPTT ├── 能做什么? │ ├── 状态表示 / 计数 │ ├── Grammar │ └── aⁿbⁿ ├── 为什么不够? │ ├── Long-range Dependency │ ├── Gradient Vanishing │ └── Gradient Exploding ├── 怎么改进? │ ├── LSTM │ ├── GRU │ └── Gate + Cell State └── 后续发展 ├── Seq2Seq ├── BiRNN └── Attention

序列模型的四句核心总结

普通 RNN
普通 RNN 利用 Hidden State 保存历史信息,但面对长距离依赖时容易遗忘早期信息。
必背
LSTM
LSTM 通过 Forget、Input、Output Gate 管理 Cell State,使长期信息和梯度稳定传播,从而缓解梯度消失。
必背
GRU
GRU 是 LSTM 的简化版,使用 Update Gate 和 Reset Gate,没有独立 Cell State,参数更少、训练更快。
高频
Attention
Attention 不再把整句话压缩成固定长度向量,而是在生成每个目标词时动态关注输入中最相关的位置。
必背

10 个知识点,按重要性排序

★★★★★为什么需要 RNN(MLP → 滑动窗口 → RNN)核心
★★★★★隐藏状态是什么、为什么能表示历史核心
★★★★★为什么普通 RNN 难以学习长期依赖(梯度消失/爆炸)核心
★★★★★LSTM 的思想(门控结构 + 细胞状态)核心
★★★★★注意力机制怎样缓解 Seq2Seq 的固定向量瓶颈核心
★★★★☆BPTT 与 Unroll高频
★★★★☆LSTM vs GRU高频
★★★★☆为什么 aⁿbⁿ 是经典 Benchmark高频
★★★☆☆BiRNN一般
★★☆☆☆Reber Grammar、Fixed Point、Trajectory理解思想

序列模型必背 10 句

  1. Sequence = 顺序重要。
  2. Sliding Window = 固定看附近 input。
  3. RNN = current input + previous hidden → new hidden。
  4. Hidden state = 对过去的 learned summary。
  5. BPTT = unroll + shared weights + backprop。
  6. Hidden dynamics 可以编码状态和计数。
  7. Long-range dependency = 当前依赖很久以前的信息。
  8. LSTM = Forget + Input + Output gates。
  9. GRU = 类似 LSTM,但只有 2 gates。
  10. Attention = 动态关注不同 input positions。

循环神经网络与注意力机制测验(Quiz)

40 道选择题覆盖本页全部知识点:30 道简单、5 道中等、5 道困难。

开始 40 题测验 →