深度学习笔记 04:CNN、RNN 与经典结构
本篇整理序列模型,主要参考Stanford 224n的sequence model一课。整理 RNN、LSTM、GRU等模型
RNN:处理序列的基本思路
RNN 用 hidden state 记录过去信息。
最基本形式:
\[ h_t = \phi(W_xx_t + W_hh_{t-1} + b) \]
\[ y_t = W_yh_t \]
其中,\(x_t\) 是当前时间步输入,\(h_{t-1}\) 是上一个时间步的 hidden state。
比如句子:
1 | |
RNN 会按顺序读 token,每一步更新 hidden state。理论上,最后的 hidden state 可以包含前面读到的信息。
RNN 的优点是结构自然适合序列;缺点是长序列训练困难,难以捕捉很长距离的依赖。
RNN 的梯度问题
RNN 的反向传播要沿时间展开,也叫 backpropagation through time。(有点帅)
如果序列很长,gradient 会经过很多时间步反传。这和深层网络里的梯度消失/爆炸类似。
一个常见问题是 long-term dependency。
比如:
1 | |
如果要判断主语和谓语关系,模型需要记住很早之前的 “book”。普通 RNN 很容易在长距离依赖上表现差。
LSTM 和 GRU:用门控机制控制记忆
LSTM 的核心是 cell state 和 gate。
它通过门控机制控制:
- 忘掉哪些旧信息
- 写入哪些新信息
- 输出哪些状态
可以把 LSTM 想成比普通 RNN 多了一条更稳定的记忆通道。
GRU 是更简化的门控 RNN,参数更少,训练更轻一些。
常见对比:
| 模型 | 核心 | 特点 |
|---|---|---|
| RNN | hidden state | 简单,但长依赖困难 |
| LSTM | cell state + gates | 更擅长长依赖,参数较多 |
| GRU | simplified gates | 比 LSTM 简洁 |
LSTM / GRU 不是彻底解决长距离依赖,只是比普通 RNN 更稳定。
RNN的弊端
RNN 有一个天然问题:它按时间一步步处理序列,难以并行。
如果序列长度是 1000,RNN 需要从第 1 步一路算到第 1000 步。后一步依赖前一步 hidden state。导致了两个核心问题
- 梯度消失/梯度爆炸
- 无法并行计算,每一步都依赖上一个步骤的结果,计算速度很慢
这两个问题都被下一个文章中的attention解决了。