持续学习这个领域不温不火了很多年, 最近却因为 Ilya Sutskever 又让我重新注意到它. Safe Superintelligence (SSI) 在 2024 年成立后一直没有发布模型或产品, 却先后获得了数十亿美元融资. 2026 年 7 月, NVIDIA 又宣布投资 SSI 并建立长期合作, 向它提供 Vera Rubin 系统; Ilya 在公告里只说他们已经有一条「值得扩展」的研究路线. 到 2026 年 10 月, 外界仍然看不到这条路线具体是什么. 资金, 算力和沉默放在一起, 很难不让人好奇.
从 Ilya 过去的报告, 演讲和访谈来看, 我觉得他的思路可能接近 TTT, 或者更广义的持续学习. 这是我的主观判断, 不是 SSI 公布过的研究计划. TTT 也不等于传统 Continual Learning: 前者可以只在一条序列内部更新一个状态模型, 后者通常研究任务和数据分布依次变化时怎样保住旧能力. 但它们碰到一个共同问题: 模型写入新信息时, 哪些旧信息会被覆盖, 又怎样判断这次更新到底让系统变好了还是变坏了.
我原本就是这个方向的门外汉. 与其等 SSI 公布答案, 不如先把相关问题从头补一遍. 这座知识库因此从经典的灾难性遗忘出发, 经过正则化, 回放和参数隔离, 再走到大模型持续预训练, Test-Time Adaptation 和 TTT 层. 几条路线的论文传统不同, 名词也经常重叠; 把它们放在一起, 是为了用「什么状态被更新, 状态活多久, 学习信号从哪里来」这三个问题建立共同坐标.
持续学习与 RSI 会在长期自我改进处相交, 但两座库不能合并. 持续学习固定更新规则, 研究连续数据到来后怎样获得新能力并控制遗忘; RSI 继续追问更新规则、候选生成方式和评判标准是否也被系统持久修改. 一个模型用固定回放算法连续学习一百个任务, 仍然只是持续学习; 一个 Agent 改写自己的搜索器并在新任务上验证改进, 才进入 RSI 讨论的深层范围.
模型训练结束后参数就固定了, 部署环境里的数据却还在变: 新的类别出现, 图像的成像条件变化, 语料按年份更新, 用户输入一条几十万 token 的长文档. 让模型在训练结束后继续更新参数, 会遇到两类问题. 一类是新任务按顺序到来, 旧数据不能全部保留, 模型学会新的同时要保住旧的. 另一类是部署后没有标签, 模型在推理阶段用输入本身更新自己, 更新的状态可能延续到后面的样本, 也可能只在一条序列内有效. 本库前三章讨论第一类, 后两章讨论第二类.
两类问题来自不同的研究传统, 论文很少互相引用, 放在一起是因为它们面对同一个机制: 参数或状态是共享的, 写入新信息的那一步梯度, 可能改掉旧信息依赖的那部分. 顺序任务上它表现为灾难性遗忘; 持续 TestingTime 适应上它表现为误差积累和源域能力下降; 在 TTT 层里它表现为固定大小的状态被后来的 token 覆盖. 读到后面的章节时, 前面定义的指标和失败方式可以直接拿来用.
1 两类问题与全库记号
1.1 顺序任务与推理阶段的更新
第一类问题的标准设定是: 数据分成 个阶段依次到来, 训练第 阶段时只能使用一个容量受限的记忆, 一份旧模型参数, 或者若干统计量, 拿不到全部旧数据. 推理阶段是否告诉模型样本属于哪个任务, 把问题分成 Task-IL, Domain-IL, Class-IL 三种场景. 场景决定了难度. 同一个 EWC, 在 Split MNIST 的 Task-IL 下平均准确率 98.64%, 在 Class-IL 下只有 20.01%, 与不做任何处理的顺序微调 (19.90%) 几乎一样. 这类问题的方法沿三个方向保留旧知识: 约束参数或输出 (正则化), 让旧数据重新进入优化 (回放), 给不同任务分配不同参数 (参数隔离). 预训练大模型出现后, 起点从随机初始化变成了已经学过大量知识的模型, 又多出继续预训练, 参数高效适配和模型合并几种做法.
第二类问题发生在部署之后. 模型拿到的是没有标签的输入, 学习信号只能来自输入本身: 训练阶段安排好的自监督任务 (旋转预测, 掩码重建), 或者模型自己的预测熵. 更新只用于当前这批输入时, 它是一种推理阶段的增强; 更新的状态一直延续下去时, 它就成了没有标签, 没有任务边界的持续学习. TTT 层把这种更新写进了序列模型本身: 层的隐藏状态是一个小模型的权重, 读一段上下文等于在这段上下文上做一步梯度更新, 一条序列结束后状态丢弃.
1.2 共用记号
顺序任务一侧用准确率矩阵. 记 为模型学完第 个阶段后在第 个阶段测试集上的准确率. 下三角 () 反映旧任务的保持, 对角线 是刚学完时的水平, 上三角 () 反映尚未训练的任务从已学内容里得到多少. 学完全部 个阶段后的平均准确率是 , 后向迁移是 , 遗忘量 取任务 的历史最好准确率与当前准确率之差. 这几个量在 1.1 定义, 在 3.1 展开成完整的指标体系.
推理阶段一侧用参数的生命周期来区分. 记训练结束时的参数为 , 测试流为 . 每来一个输入就从 出发更新, 用完即丢, 是单样本或单批的适应; 在 上继续更新得到 , 状态跨样本延续, 是持续适应. TTT 层的状态记作 , 写入规则是一步梯度 , 状态只在一条序列内延续. 第 4 章和第 5 章都用这套记号, 区别在于 是什么, 以及状态活多久.
2 五章怎样衔接
2.1 第 1 章到第 3 章: 定义, 方法, 评测
第 1 章 先把问题定义到可以比较的程度. 三种场景之外, 一个实验还要声明每个样本看几遍, 训练时知不知道任务边界, 保留哪些状态, 参数能不能增长, 从什么模型出发. 这些维度对数字的影响不比方法本身小: DER 论文的 Seq-CIFAR-10 上, 缓冲区 500 的 ER 和 DER++ 在 Task-IL 下只差 0.27 个百分点, 在 Class-IL 下差 14.96 个百分点; 同一个 DER++ 从多 epoch 换到单 epoch, Class-IL 从 72.70% 降到 48.04%. 第 1 章还给出遗忘的一阶解释: 新任务梯度 与旧任务梯度 的内积为负时, 旧任务损失上升. 后面几乎所有方法都可以看成在处理这个内积.
第 2 章 按「旧知识存在哪里」组织方法. 正则化把旧知识存成参数重要性或旧模型的输出; 回放把它存成旧样本, logits 或生成器; 参数隔离把它存成掩码, 门控或新增模块; 大模型一侧把它存在冻结的预训练表征, 提示池和低秩适配器里. 第 3 章 再回到准确率矩阵, 规定超参数怎样选才不偷看未来任务, 要跑几个种子和任务顺序, 以及基准和框架的具体切分. 第 2 章引用的数字大多来自不同论文, 第 3 章说明它们在什么条件下可以放在一起比.
2.2 第 4 章到第 5 章: 状态的生命周期从跨样本缩到序列内
第 4 章 从 Sun 等 (2020) 的 Y 形网络开始: 共享特征提取器上同时接主任务头和旋转预测头, 推理阶段在单张测试图上用旋转损失更新共享部分. 之后的 BN 适配和 TENT 把信号换成批统计量或预测熵, 更新对象缩小到 BN 的统计量和仿射参数; MEMO 回到单张图, 在它的多个增强上最小化边缘熵. 这些方法在每个 corruption 上分开评估都有效; 把多个 corruption 连成一条不重置的长流, TENT 在 CIFAR-10-C 上的平均错误率是 20.7%, 每到新域就重置的参考设定是 18.6%. CoTTA, EATA, SAR, RoTTA, NOTE 分别从伪标签, 样本筛选, 参数恢复, 统计量更新几处补救, 而测试流里的样本会互相影响这一点, 又带来了 DIA 这类攻击.
第 5 章 处理的输入换成一条长序列. TTT 层的一步更新可以推成 delta rule, 在特定条件下等价于线性注意力; LaCT 把每次更新的块放大到上千 token 来提高硬件利用率; TTT-E2E 直接在 Transformer 后 1/4 块的 MLP 上做下一个 token 预测的梯度步, 并在训练阶段元学习初始化. 由于状态在序列结束时丢弃, 第 4 章的跨样本误差积累在这里不存在, 留下的是另一种覆盖: 128K 个 token 要挤进一个与长度无关的固定状态, 大海捞针类检索因此明显弱于全注意力.
3 各章对照
3.1 更新时机, 信号与状态
| 章 | 更新发生在 | 学习信号 | 状态延续的范围 | 主要失败方式 |
|---|---|---|---|---|
| 第 1–3 章 | 训练阶段, 按任务顺序 | 有标签的新任务数据 | 跨任务, 永久 | 灾难性遗忘, 顽固性 |
| 第 4 章 (单点或单批) | 推理阶段 | 自监督损失, 预测熵 | 一个样本或一批 | 信号与主任务不一致时适应变差 |
| 第 4 章 (持续) | 推理阶段 | 熵, 伪标签, 统计量 | 整条测试流 | 误差积累, 源域能力下降, 被恶意样本操纵 |
| 第 5 章 | 推理阶段, 序列内 | 键值重建或下一个 token 预测 | 一条序列 | 固定大小状态被覆盖, 检索弱于全注意力 |
前两行和后两行的分界在「有没有标签」. 有标签时, 遗忘可以用准确率矩阵精确度量, 方法之争集中在用多少存储和计算换多少保持. 没有标签时, 模型无法知道自己的更新方向是否正确, 第 4 章的方法大多在限制更新: 只动 BN 参数, 只用低熵样本, 按概率把权重拉回源值. 第 5 章则把更新的范围限定在一条序列内, 用每条序列都复位来换取不积累.
第三列和第四列决定了各章评测的方式. 第 1–3 章看学完全部任务后的矩阵; 第 4 章的持续设定要看整条流上的在线错误率, 还要看回到源域时的表现; 第 5 章看困惑度随上下文长度的变化, 以及检索任务上与全注意力的差距. 同一个「不忘」, 在三处的度量对象分别是旧任务, 源域和序列前部的内容.
3.2 资源是贯穿各章的约束
各章的方法都在拿资源换保持. 回放要存旧样本, 一张 CIFAR 图片 3072 字节, 而 DER 存的 10 个 logits 用 FP32 只有 40 字节; GEM 每步解一个二次规划, Permuted MNIST 上训练时间 3442 秒, 合并约束后的 A-GEM 只要 477 秒. 大模型上这个约束更紧: 70B 模型仅 BF16 权重就是 140 GB, 混合精度 Adam 全量训练每参数约 16 字节, 合计 1120 GB, 这也是参数高效适配和模型合并受关注的原因.
推理阶段的方法把成本搬到了部署时. 第 4 章的每次适应都要额外做前向和反向, CoTTA 还要对每个输入做多次增强; 第 5 章的成本出现在状态大小和训练上: 128K 上下文的 KV cache 约为矩阵状态的 2048 倍, TTT-E2E 在 128K 时每个 token 的处理时间比全注意力快 2.7 倍, 但 8K 上下文的训练慢 3.4 倍. 比较方法时, 准确率和资源要一起报, 这一要求在第 1 章提出, 在第 3 章写成报告模板.
3.3 四条路线在什么地方接上
传统持续学习关心的是多段数据依次到来以后, 一个模型怎样把新能力写进长期参数, 又不把旧能力冲掉. Test-Time Adaptation 把更新时间推迟到部署阶段: 训练集已经结束, 当前输入自己提供适应信号. 当每批数据适应完就恢复 , 它更像临时校准; 当 沿测试流一直传下去, 它已经具备持续学习的核心结构, 只是监督从标签换成了熵、自监督目标或伪标签, 风险也从普通遗忘扩展到错误自我强化.
TTT 层和 fast weights 又把状态寿命缩短到一条序列. 它们更新的 形式上像参数, 功能上更接近可写入的隐藏状态: 序列开始时初始化, token 到来时更新, 序列结束后清空. 这条路线与传统持续学习共享“有限容量怎样写入且少覆盖”的数学问题, 却不承担跨用户、跨会话保存知识的任务. 因此, TTT 在本库里是一条相邻分支, 不能拿长上下文困惑度的提升直接证明模型获得了终身学习能力.
长上下文还有一条完全不更新参数的路线: 全注意力把历史 token 保留在 KV cache, 检索时回看原始内容; RAG 把历史放进外部索引;摘要和记忆系统先压缩, 再按需取回. 它们都能让模型利用更早的信息, 但写入位置不同. 全注意力的容量随序列长度增长, TTT 和状态空间模型把历史压进固定状态, 传统持续学习则把经验压进跨任务保留的参数或记忆. “能记住长文档”“测试时会适应”“学完新任务不忘”分别对应序列记忆、部署适应和跨任务保持, 三个结论需要三套实验.
把四条路线放在同一张图上时, 最有用的两根轴是状态寿命和写入信号. 状态可以只活一个 token、一条序列、一段测试流, 也可以永久进入参数; 信号可以来自标签、自监督目标、模型预测或外部验证. 状态活得越久, 一次坏更新影响的未来样本越多; 信号越依赖模型自身, 误差闭环越难被发现. 这也是本库从 EWC 一路读到持续 TTA 和 TTT 的理由: 方法名字不断变化, 真正反复出现的是写入、覆盖、校验和清除.
4 读法
4.1 基础依赖
1.1 的场景定义和准确率矩阵是后续数字的共同前提. 2.1 正则化方法 推导 EWC 的二次惩罚, 2.2 回放与外部记忆 推导 GEM 的梯度约束, 参数隔离与大模型适配会继续引用这两组公式.
3.1 固定超参数选择范围、任务顺序以及 BWT 和遗忘量公式; 3.2 将这些口径落实为基线清单、框架状态和报告模板.
4.2 专题分支
2.4 覆盖大模型继续预训练与指令微调: 学习率重新预热、回放比例、TRACE 上的通用能力退化、L2P、O-LoRA 和模型合并. 其中 Class-IL 与遗忘量沿用 1.1 的定义, 评测字段沿用 3.1 的大模型补充指标.
4.1 按损失、可更新参数和 batch 依赖拆解部署后适应, 4.2 延伸到长流退化、重置和攻击. 长上下文分支由 5.1 建立 fast weights 推导, 5.2 扩展到 LaCT 与 TTT-E2E, 5.3 再与线性注意力和 DeltaNet 对齐.