隐藏状态是有顺序的递推
给定输入序列 x1,…,xT,简单 RNN 用同一组参数逐步更新
at=Whhht−1+Wxhxt+bh,ht=ϕ(at),
再按任务产生输出,例如 ot=Whyht+by。ht 汇总截至当前步的有限维状态;它不是自动保存全部过去输入,哪些信息能保留由参数、非线性、状态维度和训练信号共同决定。
时间展开图把同一个单元画成 T 个位置,但这些位置共享 Whh,Wxh,bh。因此参数量与序列长度无关,计算和激活内存却随长度增长。每一步依赖前一步状态,前向与反向在时间轴上通常难以像纯前馈层那样完全并行;批量可并行不同序列或同一时刻的多个样本。
初始状态 h0 可以固定为零、由上下文编码或作为可学习参数。不同独立序列之间必须重置或按业务实体正确携带状态。若训练时把上一个样本的末状态误传给下一个无关样本,模型会获得不存在的上下文并造成数据泄漏。
例 1:短线性循环的完整前向与共享参数梯度
为便于手算,取标量线性循环
ht=aht−1+xt, h0=0、a=0.5、输入 (1,2,−1),末端损失 L=h32/2。前向得到
h1=1,h2=2.5,h3=0.25, 所以 L=0.03125。反向从 δ3=∂L/∂h3=0.25 开始。第三步对共享参数的贡献是
δ3h2=0.625;状态梯度传到第二步为
δ2=aδ3=0.125,贡献 δ2h1=0.125;再传到第一步为 0.0625,但 h0=0,参数贡献为零。
总梯度
∂a∂L=0.625+0.125=0.75. 直接前向敏感度也给
∂h3/∂a=h2+ah1=3,乘 ∂L/∂h3=0.25 同样为 0.75。共享参数梯度必须累加所有时间位置,不能只取最后一步。
时间反向传播是 Jacobian 连乘
若总损失为 L=∑tLt,某个早期状态 hk 对后续 Lt 的贡献包含
∂hk∂Lt=∂ht∂Ltj=k+1∏t∂hj−1∂hj,
乘积按时间反向的正确矩阵次序排列。简单 RNN 的单步 Jacobian 为
Jj=diag(ϕ′(aj))Whh.
其范数上界会随多个 ∥Jj∥ 相乘。若典型奇异值持续小于一,远处梯度指数衰减;持续大于一则可能指数放大。tanh 和 sigmoid 在饱和区导数接近零,会进一步消失。仅看 Whh 的特征值并不充分,因为激活导数随状态变化,非正规矩阵还可能出现短期放大。
例 2:同一标量 Jacobian 的消失与爆炸
在标量近线性区,若每一步 ∂ht/∂ht−1≈q,相隔二十步的状态梯度因子约为 q20。当 q=0.5 时,
0.520≈9.54×10−7, 早期输入几乎收不到末端损失信号;当 q=1.2 时,
1.220≈38.3, 梯度被显著放大。真实 tanh RNN 的 q 随时间改变,放大状态又可能进入饱和区,因此轨迹比常数模型复杂,但连乘机制不变。
BPTT 递推同时汇总局部损失和未来损失
令 qt 表示第 t 个位置损失通过输出层直接传到 ht 的梯度,令
δt=∂L/∂at。简单 RNN 的反向递推可写为
δt=(qt+WhhTδt+1)⊙ϕ′(at),
末端之后的 δT+1 取零。括号第一项来自当前监督,第二项来自所有未来监督经状态链回传。若只有末端损失,早期 qt 为零,却仍可能通过第二项收到信号;若每步都有标签,两条路径会相加。
共享参数梯度为
∂Whh∂L=t∑δtht−1T,∂Wxh∂L=t∑δtxtT,∂bh∂L=t∑δt.
这些外积和必须使用对应时间步缓存的输入、旧状态和激活导数。就地覆盖状态而不保存或重算,会让反向缺少所需值。梯度检查应在短序列、小维度和非饱和点进行,并分别覆盖末端损失与逐步损失;长序列有限差分容易同时受舍入和连乘条件数影响。
梯度范数裁剪可把过大总体梯度缩到阈值内,防止一次更新破坏参数;它不恢复已经消失的长程信号。正交或单位附近的递归初始化、合适激活和归一化可改善早期尺度,却没有对所有输入的永久保证。门控单元通过添加近似加法状态路径,让模型有机会学习较稳定的梯度通道。
LSTM 分离细胞状态与暴露状态
一种常见 LSTM 约定为
itftotgtctht=σ(Wi[xt,ht−1]+bi),=σ(Wf[xt,ht−1]+bf),=σ(Wo[xt,ht−1]+bo),=tanh(Wg[xt,ht−1]+bg),=ft⊙ct−1+it⊙gt,=ot⊙tanh(ct).
输入门控制写入候选,遗忘门控制保留旧细胞,输出门控制暴露多少细胞内容。保持门值不变看直接路径,有
∂ct/∂ct−1=ft,不再每步必经递归权重和 tanh 导数。若一段时间 ft 接近一,梯度可沿细胞加法路径传播;若门长期接近零或饱和,仍会遗忘或难以学习。
例 3:逐门计算一次 LSTM 状态
某一维单元上一细胞状态 ct−1=2,当前门值为
ft=0.8,it=0.25,gt=−0.4,ot=0.5. 新细胞状态为
ct=0.8×2+0.25×(−0.4)=1.5, 隐藏状态为
ht=0.5tanh(1.5)≈0.4526. 若连续三步的直接遗忘门都固定为 0.8,忽略门对旧状态的间接依赖,细胞直接梯度因子为 0.83=0.512,明显大于简单 Jacobian 为 0.5 时的 0.125。这只是门值条件下的路径分析,不证明训练一定学到长期保留。
遗忘门偏置有时初始化为正值,使初始 ft 偏大,但最佳值依任务和归一化而变。细胞状态也可能无界累积,门的 sigmoid 饱和会让门参数梯度变小。训练仍需监控状态范围、梯度和序列长度。
GRU 用两道门直接混合隐藏状态
本章采用
ztrththt=σ(Wzxt+Uzht−1+bz),=σ(Wrxt+Urht−1+br),=tanh(Whxt+Uh(rt⊙ht−1)+bh),=(1−zt)⊙ht−1+zt⊙ht.
更新门 zt 决定旧状态与候选的混合,重置门 rt 控制候选计算读取多少过去。部分资料把 zt 与 1−zt 的命名角色交换,比较实现时应看公式而不是只看门名。GRU 没有与 ht 分离的细胞状态,也没有独立输出门,通常使用三组仿射变换而非 LSTM 的四组。
例 4:更新门控制保留还是改写
一维旧状态 ht−1=1,候选 ht=−0.5。若更新门 zt=0.2,
ht=0.8×1+0.2×(−0.5)=0.7, 主要保留旧状态。若其他量不变而 zt=0.9,则
ht=0.1−0.45=−0.35,主要采用候选。重置门在更早阶段改变候选怎样读取旧状态;它不直接出现在最后混合式中,不能与更新门互换解释。
LSTM 与 GRU 都可把各门仿射计算拼成一次大矩阵乘法,减少算子启动,但数学上仍需分割为不同门并应用各自非线性。输入维 D、隐藏维 H 时,LSTM 单层主权重数为
4H(D+H)、门偏置约 4H;GRU 为 3H(D+H) 与约 3H。有些框架为输入和递归矩阵各存一套偏置,或加入 LSTM projection、peephole 等变体,参数清单会不同。跨框架迁移前必须核对门顺序、候选公式和偏置布局。
较少参数并不自动让 GRU 更快:序列长度、内核融合、隐藏维和设备利用率都会影响吞吐。公平比较应给两者相近参数预算或相近墙钟预算,并分别调隐藏宽度和正则化;固定相同 H 只是在比较不同参数量的模型。
参数、计算与状态管理权衡
输入维 D、隐藏维 H 时,不计输出层,简单 RNN 的主要权重数为
HD+H2,加 H 个偏置。LSTM 约为四倍这组仿射参数,GRU 约为三倍。门控增加参数、乘加和激活内存,可能在同一预算下迫使较小隐藏维;它们的效果应按验证质量、训练时间和状态大小比较。
完整时间反传需保存各步激活,内存约随 TH 增长。检查点重算可以省内存但增加计算。双向 RNN 同时从左右读取序列,适合已完整可见的标注任务,却不能用于严格在线因果预测;部署若没有未来输入,训练也不能偷用反向状态。
变长批量通常使用长度、打包序列或状态掩码。已结束样本的状态应冻结或从计算中移除,填充位置的输出损失必须屏蔽。流式训练携带状态时,要在实体边界重置,并在截断反传边界断开梯度而保留状态数值。状态值继续不代表梯度仍能穿越边界。
堆叠、输出方式与因果边界
循环层可以堆叠:第 ℓ 层的 ht(ℓ) 读取同一时刻下层输出和本层前一状态。深度增加每步表示能力,也让时间与层两个方向的 Jacobian 共同作用。层间 dropout、循环权重 dropout 或按序列固定的 dropout 掩码具有不同随机过程;若每个时间步独立改变循环掩码,记忆动态与固定掩码不同,必须报告实现。
many-to-one 任务只用末状态预测,早期输入的监督路径较长;many-to-many 任务在每步输出,局部监督更直接。编码器—解码器把来源序列压成初始解码状态时,固定维瓶颈可能丢失长来源细节;注意力提供对全部编码位置的直接读取,但带来不同计算与掩码契约。任务若要求在线预测,只能使用当前及过去输入;离线标注可使用双向或完整上下文,两类结果不可直接当同一部署条件比较。
诊断记忆而不是只看最终损失
训练曲线不能说明模型是否真正使用长程信息。可按时间间隔记录状态梯度范数、遗忘或更新门分布、细胞状态范围和截断边界前后误差;把远程关键信息打乱、延迟或遮蔽,比较性能变化;在合成复制、括号匹配等可控任务上逐级增加依赖长度。若性能只在训练长度内有效,不能宣称具备任意长度算法能力。
门值长期全接近零或一可能表示有意义的保持政策,也可能是饱和导致难学,需要结合门参数梯度和任务扰动判断。隐藏状态探针能显示某信息可被线性读出,却不证明主任务实际依赖它;应再做干预或消融。状态范数稳定也不保证 Jacobian 稳定,因为不同方向可以一边放大一边压缩。
常见误区
常见误区
“展开图每个时间步有一套独立参数。”展开只是展示重复应用,共享参数梯度要跨时间求和。
常见误区
“LSTM 已解决任意长依赖。”门控提供可学习路径,有限状态、饱和、优化和数据仍限制记忆。
常见误区
“双向循环只是更强的因果模型。”它使用未来上下文,不能直接用于只见过去的在线预测。
练习:沿时间追踪状态和梯度
练习
- 所属知识
- 参数共享
- 难度
- 3/5
说明时间展开为何不增加 RNN 参数量,却会增加计算和反向内存。
查看提示
把每一步的局部参数梯度相加,而不是复制参数。
查看解答
展开后每个位置调用同一 W;总梯度为所有时间位置通过直接和未来损失路径产生的贡献之和。参数量与 T 无关,前向计算和保存激活仍随 T 增长。
练习
- 所属知识
- Jacobian 连乘
- 难度
- 4/5
推导简单 RNN 的状态 Jacobian,并解释为何只看递归矩阵谱半径仍不充分。
查看提示
写出每步
diag(ϕ′)W,再按时间顺序相乘。
查看解答
早期状态到后期损失的导数含
Πjdiag(ϕ′(aj))Whh。典型奇异值持续小于一会消失,大于一会爆炸;激活饱和使导数更小,非正规矩阵还可能产生短期放大。
练习
- 所属知识
- 梯度裁剪
- 难度
- 3/5
查看提示
区分限制已存在的大梯度和恢复已经接近零的梯度。
查看解答
全局范数裁剪把大梯度按同一比例缩放,可避免爆炸更新;若远程 Jacobian 连乘已把梯度压到近零,裁剪不会增加信号。还需改初始化、状态路径、门控或训练范围。
练习
- 所属知识
- LSTM 门控
- 难度
- 4/5
写出 LSTM 状态更新,并说明遗忘门如何改变直接梯度路径。
查看提示
分别追踪旧细胞、候选写入和输出暴露三条路径。
查看解答
ct=ft⊙ct−1+it⊙gt,旧细胞直接乘遗忘门,候选乘输入门;
ht=ot⊙tanh(ct),输出门只控制暴露。固定门时直接细胞梯度连乘 ft,但门本身仍依赖过去并可能饱和。
练习
- 所属知识
- GRU 对比
- 难度
- 3/5
比较 GRU 与 LSTM 的状态、门和主要参数成本。
查看提示
比较独立细胞状态、门数量和最终混合公式。
查看解答
GRU 以更新门混合旧隐藏与候选,以重置门控制候选读取过去,没有独立 c 和输出门,约三组仿射;LSTM 有独立 c、输入遗忘输出门和候选,约四组仿射。参数少不保证任务表现更好。
练习
- 所属知识
- 状态边界
- 难度
- 4/5
设计变长流式 RNN 的状态管理规则,避免跨样本泄漏与错误因果性。
查看提示
分别处理独立样本、填充位置、流式片段和未来上下文。
查看解答
独立序列重置状态;填充后冻结或移除状态并屏蔽损失;同一流式实体可携带数值状态,但截断反传时 detach;实体切换必须重置。在线预测不能使用双向反向状态。
知识连接与资源
书籍 · 2016Deep Learning
Ian Goodfellow, Yoshua Bengio, Aaron Courville
适合作为反向传播和优化章节的完整参考。
打开官方来源
《Deep Learning》作者在线教材可用于核对循环网络、时间反向传播和门控单元的基本定义。具体门命名、状态布局和融合实现仍应以所用框架公式为准。