RNN 循环神经网络
普通神经网络的问题
普通神经网络处理序列数据时,每个词独立处理,没有记忆,没有上下文:
输入 神经网络 输出
"我" ──────────▶ [ 黑盒 ] ──────────▶ ?
"爱" ──────────▶ [ 黑盒 ] ──────────▶ ?
"吃" ──────────▶ [ 黑盒 ] ──────────▶ ?
"饭" ──────────▶ [ 黑盒 ] ──────────▶ ?
网络不知道"吃"前面是"爱"RNN 的解法:加一个"记忆"
┌─────────────────────────────────┐
│ 隐藏状态 h(记忆) │
└──┬──────────┬──────────┬────────┘
│ │ │
▼ ▼ ▼
时间步: t=1 t=2 t=3
输入: "我" "爱" "吃"
│ │ │
▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐
│ RNN │───▶│ RNN │───▶│ RNN │───▶ 输出
└─────┘ └─────┘ └─────┘
h1 ──▶ h2 ──▶ h3
h1 = f("我")
h2 = f("爱" + h1) ← h2 记住了"我爱"
h3 = f("吃" + h2) ← h3 记住了"我爱吃"每一步的输出,都会作为下一步的输入之一,状态在时间上流动。
同一个 RNN 单元在时间轴上反复使用(权重共享),不是三个不同的网络。
RNN 的问题:梯度消失
"我昨天在北京的一家很有名的餐厅里 .... 吃了 [?]"
到"吃了"这里,早期的"餐厅"信息经过太多步骤后逐渐稀释消失。
这就是梯度消失问题。RNN 家族
RNN
├── LSTM(Long Short-Term Memory)
│ 加了"遗忘门"和"记忆门",能选择性记住/忘记
│ 解决了长距离依赖问题
│
└── GRU(Gated Recurrent Unit)
LSTM 的简化版,更轻量现在还用吗?
2017 年前 RNN/LSTM 是 NLP 主流。Transformer 出现后,因为能一次看全部词、彻底解决长距离依赖,逐渐取代了 RNN。
现在的 GPT、Claude 都是 Transformer,不是 RNN。但理解 RNN 是理解 Transformer 注意力机制的基础。