循环神经网络(RNN)在时间步之间复用参数并传递隐藏状态:
ht=ϕ(Wxhxt+Whhht−1+bh),ot=Whoht+bo.
ht 是为当前目标学习出的有限维摘要,不是原始历史的无损存储。这个压缩既是 RNN 的流式优势,也是长程信息丢失的来源。
序列目标不是一种
| 形式 | 输出 | 例子 | 关键边界 |
|---|
| many-to-one | 最后或汇聚后的状态 | 序列分类 | 最后状态是否能保留早期证据 |
| many-to-many(对齐) | 每个时间步 | 标注、预测 | padding 与 mask 是否正确 |
| 自回归 | 下一个 token/值 | 语言、时间序列 | 训练输入与生成输入不同 |
| encoder–decoder | 条件输出序列 | 翻译 | 单一 context 可能成为瓶颈 |
自回归分解为
p(x1:T)=t=1∏Tp(xt∣x<t).
teacher forcing 在训练时喂入真实前缀;推理时模型看到自己的历史错误,因此训练损失低不保证自由生成稳定。这种差异常称 exposure bias,但修复方式取决于任务,不能仅靠更长训练消除。
时间反向传播为何不稳定
把循环展开后,从时刻 t 回传到 k 的局部项包含 Jacobian 连乘:
∂hk∂ht=j=k+1∏tdiag(ϕ′(zj))Whh.
如果连乘方向反复缩小,梯度消失;如果反复放大,梯度爆炸。序列长度、权重谱、激活饱和和数据轨迹共同作用,不能只用“RNN 太旧”解释。
- gradient clipping 限制大更新,但不恢复已消失的梯度;
- truncated BPTT 降低内存与计算,同时截断远距离 credit assignment;
- 合理初始化、归一化和门控可改善训练,但不是无限记忆保证。
为明确连乘顺序,令 Jj=diag(ϕ′(zj))Whh,则上式的乘积为 JtJt−1⋯Jk+1;矩阵因子一般不能倒序。同一组循环参数在每个时间步复用,因此其梯度要累加所有使用位置的贡献,包括经过后续状态的间接路径。这正是 BPTT 梯度问题背后的链式法则机制。
以下面的平滑递推为例,取 α=1/2、h0=0、输入 [2,0,4],状态依次为 [1,0.5,2.25]。三步后对 h0 的敏感度为 α3=1/8。若在第二步后 detach 状态,下一步前向计算仍使用 0.5,但梯度不再传回此前片段。detach 与重置状态不同。对有填充的序列,如果后续使用最终状态,仅屏蔽损失还不够:应跳过填充位置的状态更新,或选取最后一个有效状态。
LSTM 的门控路径
长短期记忆网络(LSTM)除了隐藏状态 ht,还维护一个细胞状态 ct。遗忘门 ft 调节旧细胞状态的保留量,输入门 it 调节候选更新 c~t 的写入量,输出门 ot 则控制细胞状态如何形成隐藏状态。这里 σ 是 Sigmoid 函数,⊙ 表示逐元素相乘,[ht−1,xt] 表示拼接两个向量。注意,下式的 ot 是输出门,不是开头 RNN 公式中的输出分数。一种常见写法是:
ft=σ(Wf[ht−1,xt]+bf),it=σ(Wi[ht−1,xt]+bi),
c~t=tanh(Wc[ht−1,xt]+bc),ct=ft⊙ct−1+it⊙c~t,
ot=σ(Wo[ht−1,xt]+bo),ht=ot⊙tanh(ct).
加法 cell-state 路径让信息和梯度更容易跨步传播。门的值是学习出的软控制,不等于可解释的“记忆开关”;不同实现还可能改变 bias、projection、peephole 或 gate 顺序。
示例:用一个状态做流式平滑
设标量状态
ht=αht−1+(1−α)xt,0<α<1.
这就是指数移动平均。它每步只需常数内存,新样本权重为 1−α,距当前 m 步的样本权重为 (1−α)αm。
这个例子展示了两面:RNN 无需保存完整序列即可在线更新;但早期信息按固定规律衰减,无法在需要时重新读取某一个旧值。学习出的 RNN 更灵活,却仍受有限状态和训练信号约束。注意力通过保存并按内容访问多个位置,改变了这一权衡。
状态、方向和数据边界
- causal RNN 只看当前与过去,可用于流式预测;
- bidirectional RNN 同时用未来上下文,不适用于未来尚不可见的在线决策;
- batch 中的 padding 必须 mask;序列长度不能由 padding 泄露标签;
- 隐状态应在独立实体之间重置,除非跨边界传递有明确语义;
- 按随机窗口切分时间序列可能让相邻或重叠片段落入训练和测试。
最后一项是数据泄漏,不是架构性能。应按实体和时间设计划分。
RNN 之后的状态式序列模型
经典 RNN 不是状态式建模的终点。结构化状态空间模型(SSM)从连续或离散线性状态方程出发,利用结构化参数和并行算法兼顾长序列训练与递归推理。S4 展示了结构化 SSM 的长序列能力;Mamba 又让部分状态更新依赖输入,并用硬件感知 scan 实现;xLSTM 则继续修改 LSTM 的记忆与门控。
这些名称不能混为一种架构:
- 经典 RNN 的非线性状态转移与 SSM 的结构化状态方程不同;
- Mamba 论文中的线性序列扩展描述算法路径,不保证任何长度、硬件和 batch 下都比 attention 快;
- xLSTM 延续门控循环路线,不等于“LSTM 已重新赢过 Transformer”;
- 论文 benchmark 绑定数据、规模、kernel 与训练预算,需要目标任务复现。
截至 2026-08-11,这些方案应视为重要的竞争设计,而非新的永久默认。
RNN、SSM 与全自注意力
| 维度 | 经典 RNN / 部分 SSM | 全自注意力 |
|---|
| 训练路径 | RNN 串行;结构化 SSM 可并行 scan/convolution | 同层位置可并行 |
| 推理状态 | 可固定或受控大小 | 常见 KV cache 随上下文增长 |
| 历史访问 | 压缩进状态 | 直接访问已表示的位置 |
| 长程代价 | 依赖状态动力学与选择机制 | score 计算通常随长度平方增长 |
| 适合反例 | 流式传感器、低内存、长序列 | 大规模并行和灵活内容检索 |
因此“Transformer 出现后 RNN 无用”和“线性时间 SSM 必然取代 attention”都是过度概括。真正的选择依赖延迟、内存、序列长度、训练规模、kernel 与任务结构。
最小实验
- 用短序列 overfit 检查实现;
- 测试 mask 后改变 padding 是否影响输出;
- 打乱状态边界,确认测试能捕获污染;
- 分别报告 teacher-forced loss 与自由运行结果;
- 按时间/实体切分并与无状态、季节性或移动平均基线比较;
- 记录梯度范数、截断长度、隐藏维度和失败 seed。
本文偏重经典离散序列和监督训练;不覆盖所有现代状态空间模型、连续时间模型或序列决策方法。