DL ML Learning Lab
08 / 10
第 8 步 · 让网络拥有记忆

循环神经网络 · RNNRecurrent Neural Network

同一个网络反复使用,把过去的信息带进现在——序列建模的起点,也是 attention 要超越的对象。

14 分钟
阅读 + 实操
2 个
交互演示
中级
难度

循环神经网络 · 交互演示

隐层6
序列长6
当前步0
① 时序展开:同一个 RNN 单元在每个时间步复用,隐状态 h 从左流向右——点击「步进」逐步喂入输入
序列长度 6
每个单元接收当前输入 x_t 与上一步隐状态 h_{t-1},算出新的 h_t。颜色越深表示该隐状态维度激活越强。
② char-RNN 训练:在浏览器里训练一个预测下一字符的小 RNN,看 loss 下降;下方柱状图是反向传播时各时间步的梯度范数——越往左(越早的时间步)梯度越小,这就是「梯度消失」
③ 梯度范数随时间步衰减(左 = 早期时间步,右 = 末期)
学习率 0.05
生成结果
当前 loss:
训练样本 "hello":用前一个字符预测下一个(h→e, e→l, l→l, l→o)。反复训练后采样,看 RNN 是否学会拼出 "hello"。

为什么学这步?

你已经见过 Transformer,但序列建模的起点是 RNN。理解 RNN 的「记忆」与它的「遗忘」(梯度消失),才能真正明白 attention 为什么出现。

📌 发生了什么

  • 隐状态跨时间步传递信息
  • 权重在时间上共享
  • BPTT 沿时间展开反向

⚠️ 常见陷阱

  • 梯度随时间步指数衰减
  • 长序列早期信息被「遗忘」
  • 难以并行(依赖上一步)

本章小结

  • RNN = 带记忆的序列网络
  • 梯度消失是它的致命伤
  • 催生了 attention

📐 BPTT 与梯度消失

RNN 把网络沿时间展开,反向传播也沿时间进行(Backpropagation Through Time)。链式法则里反复乘 W_h,是梯度消失的数学根源。

每多回传一步,梯度就多乘一次 W_h(与 tanh 的导数)。若 W_h 的谱半径 < 1,连乘让梯度指数衰减——早期时间步几乎收不到信号。

这正是上方梯度柱状图所示:右端(末期)梯度大,左端(早期)梯度小到几乎为零。LSTM 用门控保留长期记忆,attention 则干脆让每步直连任意远的词——绕过这条衰减链。

🎛 截断步长对比

BPTT 截断(truncated BPTT)只回传最近若干步,用部分梯度换取训练稳定与效率。

截断步长 表现 结果
T(完整) 捕捉全部依赖 易爆炸/消失
10–20 工程常用折中 推荐
1 近似无记忆 快但短视

💡 截断越短训练越稳但丢失长程信息;本页演示用完整 BPTT 以暴露衰减现象。

💻 RNN 前向一步

单个时间步前向的 Python 实现(与上方演示器逻辑一致):

# RNN 单步前向:h_t = tanh(W_x·x_t + W_h·h_{t-1} + b_h)
def rnn_step(x_t, h_prev, Wx, Wh, bh):
    z = np.zeros(H)                            # pre-activation
    for j in range(H):
        s = bh[j]
        for k in range(I): s += Wx[j*I + k] * x_t[k]
        for m in range(H): s += Wh[j*H + m] * h_prev[m]
        z[j] = s
    h_t = np.zeros(H)
    for j in range(H): h_t[j] = np.tanh(z[j])  # 隐状态
    return h_t
# 时序展开:对 t=0..T-1 反复调用,h 在步间传递
# BPTT:沿时间反向,链式连乘 W_h —— 梯度随步长衰减

📚 参考文献与延伸阅读

  • Elman, J. L. (1990), Finding Structure in Time, Cognitive Science — 经典简单循环网络
  • Hochreiter & Schmidhuber (1997), Long Short-Term Memory, Neural Computation — LSTM 用门控对抗梯度消失
  • Pascanu, Mikolov & Bengio (2013), On the difficulty of training recurrent neural networks — 梯度爆炸/消失的数学分析
  • 续读 → 第 6 步 · 注意力机制:attention 如何绕过这条衰减链;第 7 步 · Transformer:用注意力彻底取代循环

📝 课后练习

检验你的理解——答对为止