语言模型需要"睡眠":离线循环巩固以提升在线推理 Language Models Need Sleep
上下文满前让模型离线递归巩固SSM权重,预测阶段单次前向即可深度推理。
前置知识
Transformer 键值缓存 (KV Cache)
Transformer 推理时为每位置存键 $K_t$、值 $V_t$,构成随 $t$ 线性增长的缓存;新 token 通过 $o_t=V_t^T\mathrm{softmax}(K_tq_t/\sqrt d)$ 访问历史。计算量 $O(t^2)$、显存 $O(t)$,是 LLM 长上下文主要瓶颈。
本文核心矛盾正是这条随长度平方增长的 attention cost;一切'睡眠'设计都是为了绕开它。
线性循环层与快速权重 (Fast Weights / SSM)
Mamba2/GDN 类状态空间层用固定矩阵 $S_t$ 存历史,按 Hebbian 规则 $S_t=\alpha_t S_{t-1}+\beta_t v_t k_t^\top$ 增量更新。$\alpha_t,\beta_t$ 为数据相关门控,显存恒定但有损。
'睡眠'修改的唯一对象就是 SSM 块里的 $S_t$,理解其按门控累加的更新方式才能看懂 sleep 如何迭代地精化它。
Attention-SSM 混合架构
把注意力块与 SSM 块交错堆叠,如 Embed→B_attn→B_ssm→B_attn→B_ssm→…→OutProj。Attention 提供近期 token 的高精度访问,SSM 用固定权重记忆超出窗口的旧信息。Jet-Nemotron、Mamba、Jamba 等前沿模型都采用此结构。
本文方法正是落在这种混合架构上:attention 段被驱逐,SSM 段进入睡眠,二者各司其职。
硬驱逐与上下文窗口 (Hard Eviction)
推理时只保留最近 $L$ 个 token 的 KV 缓存;'硬驱逐'指每满 $L$ 个 token 就彻底清空缓存,迫使模型把信息压进 $S_t$。该设定模拟了真实部署中有限 attention window 的极限场景,本文 Rule 110、Depo、GSM-Infinite 实验均使用。
硬驱逐是触发'睡眠'的开关,也是构造跨窗口推理难题的关键约束,直接决定了实验难度的可解释性。
深度循环模型 (Depth-Recurrent Models)
让 Transformer 块沿深度方向循环 $N$ 次后再输出,代表工作有 Ouro、Universal Transformer。已有研究证明动态深度对串行推理任务有益,并支持自适应早退。本文借其思想但把循环挪到 consolidation 阶段而非 prediction 阶段。
把循环位置从'预测时'改到'睡眠时',正是本文与传统深度循环模型的关键区分,决定了 latency 不会被牺牲。
研究动机
现有 LLM 长上下文推理的核心矛盾是:Transformer attention 计算量 $O(L^2)$、显存 $O(L)$ 随上下文增长;SSM 块虽有固定大小的快速权重可压缩历史,但只能在前向中做一次更新,无法为'需要深度串行计算'的推理做好准备。本文用 Rule 110 元胞自动机任务定量暴露了这一点:在 4 层 GDN-Attention 混合模型上固定 token 总预算 $T=100$、窗口 $L=24$、硬驱逐约束下,把推理所需的展开步数 $t$ 从 0 调到 32,vanilla baseline 准确率从近 100% 跌到约 10%(接近随机猜测)。同时,前人工作已多次证明 fast weight 容量本身足够,瓶颈不在'存',而在'把驱逐出去的上下文转换为有用权重表示所需的串行计算量是固定的、单层深度的 GDN 所无法扩展的'。而预测阶段又必须限制在单次前向内(禁止 CoT),不能靠 wake-time 循环补足。
本文的目标是本文提出让 LLM 拥有'睡眠'机制:每当上下文窗口 $L$ 满、要驱逐 KV 缓存之前,模型在 consolidation 阶段对当前块做 $N$ 次额外循环前向,每次都更新 SSM 块里的快速权重 $S_t$,但不接收任何外部 token;预测阶段则严格保持单次前向以满足 latency 约束。训练时端到端反向传播整张跨窗口、跨循环的计算图,让'睡眠'学会把已驱逐的上下文组织成后续单次推理能直接使用的权重表示。具体目标是在三种难度递增的设定(Rule 110、Depo 多跳检索、GSM-Infinite 数学推理)上,把'需要 $t$ 步串行展开才能解决的推理'性能显著抬升,且不增加预测阶段延迟,同时证明 $N$ 越大增益越大、$t$ 越大增益越明显。
与已有工作不同的是,已有的提升 LLM 长上下文能力的路径大致有三类:(1) 滑动窗口/稀疏 attention 仅缓解不解决推理深度;(2) Chevalier 等的上下文压缩或 Tandon 等的 test-time training(TTT),用单步梯度或一次 update 把上下文蒸馏进权重,没有迭代深度可言;(3) Ouro 等通用深度循环模型,把循环用于推理时计算,会增加预测 latency。本文的关键差异化是把循环专门分配到'睡眠'阶段:一是多次迭代更新同一个 SSM 快速权重 $S_t$,类比生物睡眠中海马回放对皮层权重的巩固;二是严格保持预测阶段单次前向,把额外算力挪到离线阶段;三是用学习的局部 Hebbian 类更新规则而非梯度下降,获得更灵活的记忆巩固算子。这与上下文蒸馏和 TTT 的'一次更新'范式有本质区别,也与 Ouro 类循环模型把循环用于预测阶段不同,填补了'离线算力专门用于记忆巩固'这一研究空白。
核心方法
方法整体思路可以一句话概括:把额外算力从预测阶段搬到'睡眠'阶段,用 $N$ 次循环迭代让 SSM 快速权重学会'巩固'被驱逐的上下文。具体来说,作者观察到混合架构(Attention+SSM)已经具备把过去信息压缩进固定大小 $S_t$ 的能力,但单次更新的压缩是'浅'的——和把 96 个 token 蒸馏成 1 个权重表示相比,深度推理需要更多'迭代'才能把上下文组织成下游能用的形式。类比生物睡眠中海马回放在离线时反复巩固皮层记忆,本文让模型在驱逐 KV 缓存之前,对当前 $L$ 个 token 做 $N$ 次前向,每次都不接收新输入,只更新 SSM 块里的快速权重 $S_t$。预测阶段恢复单次前向,latency 不变。技术上这相当于一个广义的深度循环网络,但有两点本质区别:第一,循环发生在 consolidation phase 而非 prediction phase,特征向量 $h$ 被丢弃、只有 $S_t$ 被保留;第二,由于不需要预测结果,可以对同一窗口做 $N$ 次循环,相当于把 $N\cdot D$ 层串行计算映射到'同一窗口的 $N$ 次迭代'。
核心创新有两点。一是把离线计算(sleep)和在线推理(wake)解耦,让 $N$ 变成可独立调节的算力预算:循环越多,$S_t$ 越能'消化'窗口内的信息,预测阶段越省力。二是训练时把整个'睡眠'过程纳入端到端反传:梯度通过 refined $S_t$ 反向流回前序窗口,让 consolidation 真正学到有用的迭代算子,而不是简单的梯度下降。算法 1 给出伪代码:consolidation phase 执行 $N$ 次 $B(h,S)$,prediction phase 只执行一次;MaskedCE 只在预测 token 上计算,避免对巩固阶段产生监督信号。整张计算图跨窗口递归,与标准 teacher-forced transformer 的完全并行训练相比增加了 sequence-axis 串行依赖,但 $L$ 足够大时 wall-clock 开销可控——Figure 6a 表明 1K-4K 窗口下 throughput 几乎不变。
方法步骤详情
完整训练流程如算法 1 所述。第一步,将 SSM 块的所有快速权重 $S$ 初始化为 0,保证序列起点无先验。第二步,把输入序列 $x$ 与 loss mask $m$ 按窗口长度 $L$ 切分。第三步,遍历每个 chunk:先嵌入 $h=\mathrm{Embed}(c)$;若 $m_c$ 全零进入 consolidation phase,对 $h$ 和 $S$ 连续做 $N$ 次 $B(h,S)$,期间 KV 缓存累积;若 $m_c$ 含 loss 则进入 prediction phase,只做一次 $B(h,S)$;之后无论哪个 phase,KV 缓存立即清空,$S_t$ 被保留进入下一窗口。第四步,仅对 prediction phase 的 token 计算 MaskedCE,得总损失 $\mathcal{L}$。第五步,对跨窗口、跨循环的计算图反向传播并更新参数。所有 SSM 块共享同一个 $S$,与 KV cache 解耦,这种解耦让 $S$ 可独立迭代 $N$ 次而不与 attention 状态混淆。
技术新颖性
技术新颖性主要体现在三个层面。第一,'sleep before eviction'的设计范式与传统循环模型、TTT、context distillation 有本质区别:循环次数 $N$ 成为 consolidation 算力预算的旋钮,而 prediction latency 严格不变。第二,跨窗口梯度反传通过 $S_t$ 而非细化后的特征向量 $h$,避免了递归深度模型常见的激活值爆炸问题,并允许在'同一窗口内'同时堆叠 $N$ 次循环。第三,作者明确指出这是一类 learned local update rule(类 Hebbian),而非梯度下降的一次性更新,从而获得更通用的记忆巩固算子。该方法对预测延迟零影响,仅增加训练 wall-clock(Figure 6b 显示 throughput 与 $N$ 大致反比)。在结构上,与 Ouro(depth-recurrent for prediction)、TTT(gradient step on chunk)、上下文压缩(hidden-state token)三条路线均有清晰边界。
实验结果
实验在三种递进难度任务上系统验证。**(1) Rule 110**:4 层 GDN-Att 混合在硬驱逐 $L=24$、$T=100$、5B token 预算下,无循环 baseline 在 $t=32$ 仅约 10%(随机),2 循环约 20%,3-4 循环 >30%(Fig 2b);Fig 2a 显示 vanilla 随 $t$ 从近 100% 跌至近 0,确证瓶颈是'推理深度'而非'记忆容量'。**(2) Depo 多跳**:Fig 3 表明 1 循环在 4 跳以上停滞,只有 4 循环在 16 跳开始降 loss。**(3) GSM-Infinite**:Jet-Nemotron 2B 6-op 0.742→0.812、8-op 0.351→0.388;Ouro 1.4B 6-op 0.419→0.615(+47%)、8-op 0.210→0.272(+30%),Ouro 提升更大或反映其深度循环预训练兼容性。**(4) 滑动窗口**:$L=512$ 时 Ouro 2-op 从 0.596 飙升至 0.905(+52%)。整体趋势:$N$ 越大、推理深度需求越高,提升越显著。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| Rule 110 元胞自动机 (t=32, L=24, T=100) | exact match 准确率 @ 5B tokens | 3-4 循环 ≥30% | 无循环约10% | 约3倍绝对准确率 |
| Depo 多跳检索 (k=16 hop) | test loss 下降速度 | 4 循环开始有效降低 loss | 1 循环停滞 | 让最难 hop 变得可学习 |
| GSM-Infinite Jet-Nemotron 2B 6-op | 准确率 | 6 循环 0.812 | 无循环 0.742 | +0.070 (+9.4%) |
| GSM-Infinite Jet-Nemotron 2B 8-op | 准确率 | 6 循环 0.388 | 无循环 0.351 | +0.037 (+10.5%) |
| GSM-Infinite Ouro 1.4B 6-op | 准确率 | 4 循环 0.615 | 无循环 0.419 | +0.196 (+46.8%) |
| GSM-Infinite Ouro 1.4B 8-op | 准确率 | 4 循环 0.272 | 无循环 0.210 | +0.062 (+29.5%) |
| GSM-Infinite 滑动窗口 Ouro 1.4B 2-op (L=512) | 准确率 | 4 循环 0.905 | 无循环 0.596 | +0.309 (+51.8%) |
局限与改进
作者在第 7 节承认了几点局限。**(1) 训练变慢且不稳定**:成本随 $N$ 线性增长(Figure 6b),深度循环的梯度消失/爆炸在 $N$ 较大时加剧,需借助隐式梯度、截断 BPTT 等。**(2) 串行破坏并行**:序列沿窗口变串行,teacher-forced 的 sequence-axis 并行被破;窗口 $L$ 较小时 GPU 利用率显著下降。**(3) 训练代价即部署代价**:需按 $N$ 投入额外算力预算。**(4) 超长上下文验证不足**:Figure 6a 仅到 12K token。**(5) 绝对准确率仍低**:GSM-Infinite 加 sleep 后 6-8 操作准确率仍仅 Jet 0.388 / Ouro 0.272。我额外观察到:作者为公平只调 $N=1$ 的 Muon lr,可能**低估了 $N>1$ 真实潜力**;sleep 触发固定为窗口填满,流式输入(如对话)会引入额外 latency spike。
独立分析的弱点
独立分析的方法弱点有四。第一,**'睡眠'触发时机固定为 $L$ 满**:无自适应机制判断当前窗口是否真的需要 $N$ 次循环;简单任务上 $N>1$ 是浪费算力。改进方向是引入轻量控制器预测 reasoning depth 动态选 $N$,或 early-exit。第二,**只更新 SSM 快速权重 $S_t$**:固定权重限制可学习算子族;若允许 LoRA-style 微调部分 MLP 层,可能 $N$ 较小时也能获益。第三,**窗口边界硬对齐**:所有 chunk 等长且 evict 全清空;真实长上下文信息重要性分布不均,固定窗口或丢失跨边界依赖。改进方向是分层窗口或基于内容重要性的 eviction。第四,**超长上下文(>100K) scaling 未验证**:Figure 6a 仅到 12K。改进方向是在 RULER、LongBench、NIAH 等榜单系统评估 $N$、$L$ 的 scaling law。
未来方向
作者在第 7 节和脚注 2 中提到的未来方向包括:用隐式梯度、截断 BPTT 等改进训练稳定性;探索自适应 sleep duration $N$;将 sleep 范式与 RL、test-time training 等其他离线算力机制结合。基于本文成果可延伸的方向有:第一,把 sleep 推广到**多模态 / 长视频 / 长代码**场景,这些场景天然有窗口化处理的需求;第二,结合**稀疏 attention 与 sleep**,只在 eviction 前做局部 sleep,减少整体训练成本;第三,研究 **sleep 的理论收敛性**——给当前 Hebbian-like 规则加上不动点/收敛条件,证明 $N\to\infty$ 时 SSM 状态有界;第四,把 sleep 与**人类睡眠-觉醒周期**的神经科学证据(如 hippocampal replay timing)做更深入类比,可能启发新的离线算力调度策略;第五,与 **Mamba3 / Jamba 等新一代 SSM** 结合,验证在更现代架构上的可移植性。
复现评估
复现评估偏中等。作者提供较完整的算法 1 伪代码、超参数(Muon optimizer、AdamW lr=$5\times10^{-5}$、Muon lr=$2\times10^{-3}$ 或 $1\times10^{-3}$、batch size 512/128/256)和 backbone(Jet-Nemotron 2B、Ouro 1.4B、4 层 GDN-Att hybrid)。算力明确:Rule 110 <1 A6000 GPU-day,Depo 与 GSM-Infinite 约 1-2 H100 GPU-days/run,随机种子固定。代码与权重开源文中未明确,作者致谢 Modal。复现难度:(a) 实现'跨窗口反传 + 同窗口内 $N$ 次循环'需 custom autograd 或 activation checkpointing;(b) Jet-Nemotron 与 Ouro 均为较新预训练模型需从官方仓库获取;(c) 数据集公开但 prompt 格式与 mask 规则需对照原 paper。整体对具备 SSM 与深度循环经验的团队可复现,工程门槛不低。
论文图表
左 (a) 在序列长 12000、$L\in\{1K,2K,4K\}$ 下对比 Full SWA 与 Windowed 两种训练方式的吞吐量,发现 $L$ 足够大时二者吞吐相近(>20k tokens/s);右 (b) 固定 $L$ 时 $N\in\{1,2,3,4\}$ 的吞吐量,呈近似反比下降,并启用 activation checkpointing 防 OOM。
回答了'代价有多大'的工程疑问,显示序列方向串行代价在 $L$ 大时可忽略,$N$ 的代价则线性增长——是评估方法实用性的关键图。
训练伪代码:输入为 token $x$、loss mask $m$、窗口 $L$、循环 $N$;初始化 $S=0$;按 $L$ 切分;对每个 chunk,若 $m_c$ 全零则循环 $N$ 次 Blocks,否则单次 Blocks;MaskedCE 后反向传播。
把方法步骤压缩成可执行的 14 行伪代码,是复现时唯一需要严格对照的图表;理解 sleep 时序逻辑的关键。