高级变体:更强大的记忆网络
为了解决简单 RNN 面临的梯度消失/爆炸问题,研究人员设计了更复杂的循环单元,如长短期记忆网络 (LSTM) 和门控循环单元 (GRU),它们是目前处理序列数据的标准模型。
长短期记忆网络 (Long Short-Term Memory, LSTM)
核心思想:LSTM 引入了一个“细胞状态 (Cell State)”作为信息传送带,并设计了三个“门 (Gate)”来精细地控制信息。可以把它想象成一个拥有高级记忆系统的管道工:
- 遗忘门 (Forget Gate): 决定从细胞状态中丢弃哪些旧信息(关上一些旧水龙头)。
- 输入门 (Input Gate): 决定让哪些新的信息更新到细胞状态中(打开一些新水龙头)。
- 输出门 (Output Gate): 决定从细胞状态中输出哪些信息作为当前时间步的结果。
细胞状态 Ct-1 → → → → → → → → → 细胞状态 Ct
遗忘门
σ
输入门
σ
输出门
σ
隐藏状态 ht-1 → → → [LSTM单元] → → → 隐藏状态 ht
from tensorflow import keras
from keras import layers
# 在 Keras 中使用 LSTM 非常简单
model = keras.Sequential([
layers.Embedding(input_dim=10000, output_dim=128),
# 使用 LSTM 层代替 SimpleRNN
layers.LSTM(64),
layers.Dense(1, activation='sigmoid')
])
门控循环单元 (Gated Recurrent Unit, GRU)
核心思想:GRU 是 LSTM 的一个简化版本,它将遗忘门和输入门合并为了一个单一的“更新门 (Update Gate)”,并引入了一个“重置门 (Reset Gate)”。GRU 的参数更少,训练速度通常比 LSTM 更快,但在许多任务上都能取得与之相当的性能。
更新门
σ
重置门
σ
隐藏状态 ht-1 → → → [GRU单元] → → → 隐藏状态 ht
from tensorflow import keras
from keras import layers
# GRU 的使用方式与 LSTM 类似
model = keras.Sequential([
layers.Embedding(input_dim=10000, output_dim=128),
# 使用 GRU 层
layers.GRU(64),
layers.Dense(1, activation='sigmoid')
])