RNN 与 LSTM
循环神经网络(RNN)逐个读取序列元素,把新输入合入隐藏状态,各步共享权重。LSTM 增加了细胞状态:它通过遗忘门缩放,再加上新内容,而不是每步完整重算。
关键区别是前向保留信息与反向传回学习信号。训练好的普通 RNN 可以答对长距离问题,但同一路径向前传值、向后传梯度的效果不同。本课中,主语信息到达句尾,反向路径的典型增益却只有约十万分之一。
普通 RNN 的两条方向
每步用当前词 x_t 和旧状态 h_(t−1) 计算:
h_t = tanh(W_x x_t + W_h h_(t−1) + b)
W_h 在所有位置复用,所以参数量不随句长增长。最后由读出层从最终状态生成答案。在这个结构中,隐藏状态承担已经读过的内容的摘要。
任务是英语主谓数一致:the keys to the desk near the door ___ 应填 are,把 keys 改成 key 则应填 is。决定标签的是第二个词。后续填充词在两种答案中来自同一词池,不能提供标签线索;成对切换主语可以检查网络是否利用了这个提示。
反向沿时间传播需计算 ∂h_T/∂h_t,由多步雅可比相乘:
∂h_t/∂h_(t−1) = diag(1 − h_t²) · W_h
矩阵乘积可以在不同方向缩小、放大或保持信号。tanh 饱和时 1 − h² 接近零。本例学出的锁存单元靠饱和保留前向值,同时削弱反向梯度;不能据此说所有记忆都必须靠饱和。
LSTM 的细胞状态路径
C_t = f_t ⊙ C_(t−1) + i_t ⊙ g_t
h_t = o_t ⊙ tanh(C_t)
i、f、g、o 来自对 (x_t, h_(t−1)) 的仿射计算及相应激活。网络学习保留多少、写入多少,以及对外暴露多少状态。沿直接细胞状态路径,旧状态只逐元素乘遗忘门再相加;反向为遗忘门值的乘积。门接近一时,这条路径衰减较慢。
这不是总导数。门也依赖旧隐藏状态,另有穿过循环矩阵的间接路径,会受相应雅可比影响。画布只比较直接细胞状态通道,展示通常称作 constant error carousel 的加性记忆思想;带遗忘门时并不自动保持常数梯度。
逐步演示:先读句子,再看反向路径
默认普通 RNN 读取 the keys to the desk near the door ___。主语和空位间有六个填充词,共九个时间步,隐藏单元 12 个,权重已经训练。
h₀ = 0,从空状态开始。t = 1,读the,状态来自W_x和偏置。t = 2,读 keys。描边单元是切换主语后最终值变化最大的隐藏单元,随后进入锁存状态。t = 3…8,依次读to、the、desk、near、the、door。同一个W_h使用六次,锁存单元保留线索,其他状态继续变化。t = 9,读空位,从h₉读出are,显示 100%,is显示 0%。显示经过舍入。切到key后答案变成is,说明不是只输出多数类。
动画停留在正确答案,将七列之前的 keys 再次点亮,并连接箭头:若答案有误,修正信号能否回到这个词?
下方对数轴显示路径增益:∂h_T/∂h_t 的 Frobenius 范数除以 √H。它是对方向取均方根的增益,不是某个真实梯度的幅度,也不是普通算术平均。答案位置的路径是恒等映射,增益为 1.000。
| 反向步数 | 时间与词 | 相邻显示增益之比 | 路径增益 |
|---|---|---|---|
| 0 | t = 9,空位 | — | 1.000 |
| 1 | t = 8,door | ×0.122 | 0.122 |
| 2 | t = 7,the | ×0.075 | 9.2e-3 |
| 3 | t = 6,near | ×0.066 | 6.0e-4 |
| 4 | t = 5,desk | ×0.108 | 6.5e-5 |
| 5 | t = 4,the | ×0.192 | 1.2e-5 |
| 6 | t = 3,to | ×0.542 | 6.8e-6 |
| 7 | t = 2,keys | ×1.312 | 8.9e-6 |
到主语时,典型方向的相对信号约为十万分之一,但前向答案仍正确。具体梯度还取决于误差方向和其他路径。
均方根增益不是上界。保持最好的方向由乘积的最大奇异值给出,本例为 3.1e-5,约为均方根的 3.5 倍,仍只有约三万分之一。这个路径在所有方向都有强衰减,但更新是否有用还受损失尺度、优化器、精度和其他路径影响。
每步有效倍率也不是固定 ρ:它从 0.066 到 1.312,因为各状态的饱和程度不同。最后一步甚至放大信号,但无法弥补此前损失;七步几何平均约为 ×0.19。
同一句子的 LSTM 对照
结尾的对照节拍直接把 LSTM 的数值放在同一列,无需先切换模型。
| 反向步数 | 有效倍率 | 直接细胞状态路径增益 |
|---|---|---|
| 1 | ×0.867 | 0.867 |
| 3 | ×0.859 | 0.652 |
| 5 | ×0.898 | 0.524 |
| 7 | ×0.906 | 0.427 |
这些显示倍率概括逐元素遗忘门构成的路径,并非把多单元 LSTM 简化成一个门。七步后约 0.43,普通 RNN 为 0.0000089,相差约 48,000 倍。本课最大间隔为 12 个填充词,此时差距约 400 亿倍。这些是特定已训练模型的路径指标,不能当作训练速度比。
切到 LSTM,可看到状态下方的通道逐步乘 f 并加入新内容。移动间隔滑杆,两种模型在各选项中都答对,但普通 RNN 到主语的增益下降更快。
LSTM 仍有边界
直接路径为 Π f_t。如果每步 f = 0.5,七步只有 0.5⁷ ≈ 7.8e-3,十三步为 1.2e-4。门接近一才利于保留,结构不保证所有长距离梯度都健康。它提供的是可学习、逐单元的保留决策。本课沿用一种常见做法,把遗忘门偏置初始化为 1,先偏向打开,再学习何时遗忘。
长距离任务失败可能是信息没被保留,也可能是信息保留了却难以学会使用。前者可检查容量和输入表示,后者可检查梯度路径。路径测量能帮助诊断,但完整雅可比或其范数可能需要多个向量反向计算;一次方向探测只测一个方向。
门控循环单元能用固定大小的状态处理流式音频或控制输入,是否比其他结构便宜取决于任务和实现。注意力中允许的连接可在一层内直接联系远处位置,避免逐个经过中间循环步;掩码、权重、网络深度和其他雅可比仍影响信号,距离不意味着完全没有代价。
边界情况
- 最短间隔,两填充词:反向三步,RNN 保留约 7.8%,LSTM 约 61%。衰减随距离改变,不是各位置都同样失败。
- 单数主语:两种模型在各间隔把
key判为is。这是检查提示依赖的成对对照;单次失败不能单独证明模型在利用类不平衡。 - 放大的一步:有效倍率大于一可以出现,仍需看完整路径增益。
- LSTM 的其他路径:平缓曲线只属于直接
C路径。经o ⊙ tanh(C)和循环矩阵的隐藏状态路径仍可能衰减或放大。 - 两种模型都能学会这个任务:路径差距不能推出普通 RNN 无法训练。相同训练配方、固定间隔、五个随机种子的实验如下:
| 固定间隔 | RNN 收敛次数 | LSTM 收敛次数 | 解题迭代次数中位数 |
|---|---|---|---|
| 20 | 5/5 | 5/5 | RNN 331;LSTM 48 |
| 40 | 2/5 | 2/5 | 成功运行太少,不报告 |
间隔 20 时 LSTM 约快七倍,40 时两者都不可靠。这只需保存一个比特,饱和 tanh 可以锁存,Adam 与梯度裁剪也帮助训练。它不是复杂长距离信用分配的强测试;准确结论是路径相差多个数量级,而两种单元仍能学会这个小任务。
常见错误
- 用正确答案证明梯度健康。前向保留和反向可达性是两项指标。
- 把均方根路径增益当上界。上界需看最大奇异值,本例约高 3.5 倍。
- 把理论中的
ρ^k界当实际每步固定比例;本例倍率约从0.07到1.3。 - 以为 LSTM 删除了乘法。直接路径仍连乘各单元遗忘门,只是保留率可学习。
- 认为把
tanh换 ReLU 就足够。循环权重仍会让信号收缩或放大;加性状态改变路径,裁剪只限制爆炸。 - 将 12 单元、10 词词表的合成句子推广为真实语言模型结论。权重、前向和雅可比在浏览器中实际计算,但大模型的层数、结构和数据不同;机制可比较,具体数值不可照搬。