为什么需要 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 DIFFERENCEWindow vs RNN
Sliding Window = 固定看过去原文。RNN = 用 hidden state 总结过去。
扩展理解:窗口方法不会自动把窗口外的信息压缩进状态;如果依赖距离超过 window size,模型就无法直接看到那段信息。
Hidden State:连续空间里的“当前状态”
Discrete state machineS0、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 DYNAMICSHidden 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 | 无 | 无 | 结构简单,长依赖较弱 |
| LSTM | Forget / Input / Output | 有 | 长期记忆控制细致,参数更多 |
| GRU | Update / Reset | 无 | LSTM 简化版,参数更少、通常训练更快 |
从 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 RNN | Window = 固定附近原文 | RNN = hidden state 总结过去 |
| RNN vs LSTM | RNN 长期 memory 容易丢 | LSTM 用 gates 控制 memory |
| LSTM vs GRU | LSTM 有 3 gates | GRU 更简单,有 2 gates |
| Bidirectional vs Attention | Bidirectional = 两个方向处理 sequence | Attention = 动态决定关注哪些 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 句
- Sequence = 顺序重要。
- Sliding Window = 固定看附近 input。
- RNN = current input + previous hidden → new hidden。
- Hidden state = 对过去的 learned summary。
- BPTT = unroll + shared weights + backprop。
- Hidden dynamics 可以编码状态和计数。
- Long-range dependency = 当前依赖很久以前的信息。
- LSTM = Forget + Input + Output gates。
- GRU = 类似 LSTM,但只有 2 gates。
- Attention = 动态关注不同 input positions。
循环神经网络与注意力机制测验(Quiz)
40 道选择题覆盖本页全部知识点:30 道简单、5 道中等、5 道困难。
开始 40 题测验 →