完整版 · 分步教学

RNN 与 LSTM

固定窗口看不到更早的词,于是给网络装上「记忆」。可 RNN 的记忆每步都在被稀释——直到 LSTM 给记忆装上阀门。同一句话,喂给两台机器,看谁记得住。

目标实验目标

亲手演算两种记忆的更新规则,并排对比:RNN 的 h ← tanh(0.6h + x) 每步都稀释旧记忆;LSTM 的 C ← f·C + i·g 靠阀门守住重要信息。

课堂问题「小猫没有过马路,因为 ___ 太害怕了。」要填「它」,模型得想起 5 个词之前的「小猫」。RNN 和 LSTM,谁能记住?
1逐词读入,观察记忆的流动

点「读下一个词」走一步。上面一排是 RNN 的记忆 h,下面一排是 LSTM 的长期记忆 C——喂的是同一句话。

读到第 0 / 6 个词
2两条记忆曲线并排看

RNN 记忆 h · 被动稀释

h ← tanh(0.6 × h_旧 + x)
当前 h0.00
「小猫」信号残留100%

LSTM 长期记忆 C · 阀门守护

C ← f × C_旧 + i × g
当前 C0.00
「小猫」信号残留100%
观察读到最后一个词时,RNN 的蓝条早就塌到地板,LSTM 的绿条还稳在高位——差别全在那几个阀门。
3把公式摊开:每一步到底算了什么

RNN 更新

h ← tanh( 0.6 × h_旧 + x )

0.6 是「上一步记忆能带过来多少」。每读一个无关的词,旧记忆先乘 0.6、再被 tanh 压一下,一步步变矮。

LSTM 核心一行

C ← f × C_旧 + i × g

f 是忘记阀、i 是写入阀、g 是候选新内容。读到重要内容,写入阀大开;读到无关内容,忘记阀≈1、写入阀≈0,C 几乎原封不动。

步骤词信号 xRNN hLSTM fLSTM iLSTM C
4距离越远,衰减越狠

把「小猫」的信号往下乘,看它隔多少步还剩多少。这就是 RNN 记不住远处的根本原因。

RNN:0.6ⁿ

隔 n 个词残留
58.0%
100.6%
200.004%

LSTM:0.99ⁿ(f≈0.99)

隔 n 个词残留
595.1%
1090.4%
3074.0%
还有一层LSTM 守住了记忆,却有个绕不开的硬伤:必须按顺序读词,读完第 k 个才能算第 k+1 个,无法并行。这正是 Transformer 要解决的问题。

挑战实验课挑战

挑战 1 · 找归零点
一直点「读下一个词」,RNN 的记忆 h 从 0.90 掉到 0.05 以下,用了几个词?
挑战 2 · 阀门的功劳
读到最后一个词时,LSTM 的 C 还剩最初的百分之几?RNN 又剩多少?
挑战 3 · 为什么梯度也没了
要让第 1 步的「小猫」影响第 20 步的预测,梯度得连乘 20 次。用 0.6 算算看还剩多少?
挑战 4 · 窗口的边界
如果把窗口设为只看最近 5 个词(变回 FFNN),这句「因为 ___ 太害怕了」里的空,模型能填对吗?