目标实验目标
亲手演算两种记忆的更新规则,并排对比:RNN 的 h ← tanh(0.6h + x) 每步都稀释旧记忆;LSTM 的 C ← f·C + i·g 靠阀门守住重要信息。
- 看清「固定窗口」的死角:窗口外的词等于不存在
- 一步步算出 RNN 记忆的衰减:0.6 连乘,20 步后近乎归零
- 理解 LSTM 三个阀门:忘记阀留多少旧的、写入阀写多少新的、读出阀给当前用多少
课堂问题「小猫没有过马路,因为 ___ 太害怕了。」要填「它」,模型得想起 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 几乎原封不动。
| 步骤 | 词 | 信号 x | RNN h | LSTM f | LSTM i | LSTM C |
|---|
4距离越远,衰减越狠
把「小猫」的信号往下乘,看它隔多少步还剩多少。这就是 RNN 记不住远处的根本原因。
RNN:0.6ⁿ
| 隔 n 个词 | 残留 |
|---|---|
| 5 | 8.0% |
| 10 | 0.6% |
| 20 | 0.004% |
LSTM:0.99ⁿ(f≈0.99)
| 隔 n 个词 | 残留 |
|---|---|
| 5 | 95.1% |
| 10 | 90.4% |
| 30 | 74.0% |
还有一层LSTM 守住了记忆,却有个绕不开的硬伤:必须按顺序读词,读完第 k 个才能算第 k+1 个,无法并行。这正是 Transformer 要解决的问题。
挑战实验课挑战
挑战 1 · 找归零点
一直点「读下一个词」,RNN 的记忆 h 从 0.90 掉到 0.05 以下,用了几个词?
一直点「读下一个词」,RNN 的记忆 h 从 0.90 掉到 0.05 以下,用了几个词?
挑战 2 · 阀门的功劳
读到最后一个词时,LSTM 的 C 还剩最初的百分之几?RNN 又剩多少?
读到最后一个词时,LSTM 的 C 还剩最初的百分之几?RNN 又剩多少?
挑战 3 · 为什么梯度也没了
要让第 1 步的「小猫」影响第 20 步的预测,梯度得连乘 20 次。用 0.6 算算看还剩多少?
要让第 1 步的「小猫」影响第 20 步的预测,梯度得连乘 20 次。用 0.6 算算看还剩多少?
挑战 4 · 窗口的边界
如果把窗口设为只看最近 5 个词(变回 FFNN),这句「因为 ___ 太害怕了」里的空,模型能填对吗?
如果把窗口设为只看最近 5 个词(变回 FFNN),这句「因为 ___ 太害怕了」里的空,模型能填对吗?