持续学习(Continual Learning):截至 2026 年的技术总体认知
持续学习(Continual Learning)截至 2026 年的技术总体认知:为什么零遗忘不等于好的持续学习系统,评估需同时考虑新知识吸收、旧能力保持、前后向迁移与训练存储成本。
版本日期:2026-08-21
持续学习不是单纯“防止遗忘”,而是在受限资源下进行顺序优化。
顺序指的是数据/任务经验按照时间顺序到来,模型随着时间不端更新,优化梯度的问题。
受限资源意味着不能每次都从来开始训练,这样虽然最不容易遗忘,但是资源利用效率太低。
一个完全冻结、什么都学不到的模型可以做到零遗忘,但它显然不是好的持续学习系统。评价必须同时考虑新知识吸收、旧能力保持、前后向迁移、训练与存储成本。
不先声明场景,讨论某个 CL 方法“更好”几乎没有意义。 Task-IL、Domain-IL、Class-IL、Online CL、Task-free CL 的困难来源不同;是否提供 task ID、是否允许保存旧样本、缓冲区按样本数还是字节数计算,也都会彻底改变结论。
在允许保存少量历史数据时,回放仍然是最可靠、最难击败的通用机制之一。 但这里应说“强默认基线”,而不是“任何场景下的唯一最优解”。隐私、数据治理、存储和额外训练计算会限制它。
强预训练模型改变了问题的主导变量。 过去研究的核心是“怎样保护从零学到的表征”;今天很多视觉 CIL 问题的核心变成“怎样正确利用已经很强的冻结表征,并避免分类器偏置、路由错误和下游分布差异”。因此任何新方法都应与“冻结 backbone + prototype / linear head”比较。
LLM 的遗忘不是一个单一现象。 性能下降可能来自参数知识被覆盖、表征改变、读取头或路由失配、指令格式偏移、生成策略改变、安全/对齐目标改变。2025 年关于 spurious forgetting 的工作进一步表明,一部分表面遗忘是“知识仍在,但访问方式失配”。
实际可部署的 CL 系统通常是混合系统。 常见组合不是“只用 EWC”或“只用 Prompt”,而是:冻结主干、PEFT 模块、受限回放、蒸馏、外部检索记忆、周期性巩固、回归测试、版本化与回滚。
真正开放式、长期、有界资源的终身学习仍未解决。 目前方法在短任务序列、预先切分的数据集或有限域更新上已经很有用;但在未知任务边界、长时间尺度、知识会过期、需要安全更新且资源不能持续增长的真实环境中,还没有统一解法。
第一部分:问题到底是什么
1. 持续学习的技术定义
设数据按顺序到达:
[
D_1, D_2, \ldots, D_T, \qquad D_t \sim P_t(X,Y)
]
其中分布 (P_t) 可以发生变化。变化可能表现为:
- 新类别出现;
- 输入风格或传感器变化;
- 新领域语料到达;
- 标签含义、奖励函数或用户偏好变化;
- 任务边界明确、模糊,甚至根本不存在。
模型在第 (t) 个阶段不只有参数 (\theta_t),更完整的状态应该写成:
[
S_t = \big(\theta_t,; o_t,; M_t,; A_t,; E_t\big)
]
其中:
- (\theta_t):主模型参数;
- (o_t):优化器状态,例如 Adam 的一阶、二阶动量;
- (M_t):回放缓冲或样本统计;
- (A_t):Prompt、Adapter、LoRA、mask、专家模块等可插拔参数;
- (E_t):RAG 数据库、Agent episodic memory 等外部记忆。
持续学习算法执行更新:
[
S_t = \mathcal{A}(S_{t-1},D_t;B)
]
这里的 (B) 是资源约束,例如:
[
B=(\text{memory bytes},\text{train FLOPs},\text{latency},\text{privacy},\text{model growth})
]
因此,一个更完整的定义是:
持续学习是模型在非平稳、按序到达的数据或经验上持续更新,在无法反复依赖全部历史数据与无限计算的条件下,兼顾新知识吸收、旧能力保持、知识迁移和资源有界增长。
这个定义比“不断学习新知识而不忘旧知识”更精确,因为它明确了:
- 数据分布不一定按清晰任务切分;
- 旧数据不是绝对不可访问,而通常是访问受限;
- 资源约束属于问题本身;
- 旧知识不一定都应永久保存;过期、错误或不安全的知识有时应被主动修改或遗忘。
1.1 一个多目标优化视角
可以把 CL 写成多目标问题:
[
\min_{S_t};
\underbrace{R_t(S_t)}{\text{当前适应}}
+\lambda{\text{old}}\underbrace{R_{1:t-1}(S_t)}{\text{历史保持}}
-\lambda{\text{transfer}}\underbrace{T(S_t)}{\text{迁移收益}}
+\lambda{\text{resource}}\underbrace{C(S_t)}_{\text{资源代价}}
]
这不是某一篇论文的统一训练式,而是理解领域的工程抽象:
- 只压低当前风险,得到 naïve sequential fine-tuning,容易遗忘;
- 只保护旧任务,模型会僵化,无法学习新任务;
- 不惩罚资源,最简单的办法是每个任务复制一整套模型;
- 不考虑迁移,系统只是保存一堆孤立任务,并没有形成可复用知识。
2. CL 与相邻概念的边界
| 概念 | 主要目标 | 是否通常更新参数 | 是否强调保留旧能力 | 与 CL 的关系 |
|---|---|---|---|---|
| Joint / offline training | 在全部数据上统一训练 | 是 | 隐式保留 | 常作为近似上界,但违反“历史数据受限”条件 |
| Online learning | 数据流上逐步优化 | 是 | 不一定 | CL 是更强调长期保持与迁移的一类在线学习问题 |
| Transfer learning | 从源任务迁移到目标任务 | 是 | 通常不要求 | 多为单向适应,不一定有长序列 |
| Domain adaptation | 适应目标域 | 是或否 | 不一定 | Domain-IL 可视为其顺序、多阶段版本 |
| Test-time adaptation | 部署时适应当前测试分布 | 通常是 | 常被忽略 | 若要求长期稳定,就与 Online CL 汇合 |
| Model editing | 局部修改事实或行为 | 是或外挂参数 | 强调局部性 | 连续多次编辑会演化成 lifelong editing 问题 |
| RAG | 更新外部知识库并检索 | 通常不改主参数 | 主参数天然不忘 | 是实用“外部记忆更新”,但不等于参数持续学习 |
| Model merging | 合并多个任务模型或任务向量 | 合并参数 | 取决于冲突 | 是知识累积的互补路线,不自动解决顺序更新 |
| Agent memory | 保存对话、轨迹、反思或工具结果 | 通常外部存储 | 依赖检索 | 可成为 CL 系统的 episodic memory,但“记住”不等于“学会” |
2.1 为什么“零遗忘”不是充分条件
假设模型参数完全冻结:
[
\theta_t=\theta_0,\quad \forall t
]
它不会因为新训练而忘记旧任务,但也无法吸收参数知识。于是:
[
\text{Forgetting}=0 \not\Rightarrow \text{Continual Learning is good}
]
同样,如果允许每个任务复制一个无限大的模型,并在测试时提供完美 task ID,也可以接近零遗忘;但其参数量随任务线性增长:
[
|\theta_{1:T}|=O(TP)
]
这说明 CL 的真正难点来自共同参数、未知路由和有界资源同时存在。
第二部分:为什么神经网络会忘
3. 最小解释:共享参数上的梯度干扰
模型学完旧任务后位于 (\theta)。新任务的一步更新为:
[
\theta' = \theta - \eta g_{\text{new}}
]
对旧任务损失做一阶展开:
[
L_{\text{old}}(\theta')
\approx
L_{\text{old}}(\theta)
-\eta g_{\text{old}}^\top g_{\text{new}}
]
若:
[
g_{\text{old}}^\top g_{\text{new}}<0
]
那么沿新任务梯度更新会使旧任务损失上升。这就是 GEM/A-GEM 等梯度约束方法的直接出发点。
但不能把灾难性遗忘简单等同于“梯度点积为负”。一阶局部近似没有覆盖:
- 非线性网络经过多步更新后的路径效应;
- 表征层改变导致分类头失效;
- BatchNorm 统计或优化器动量改变;
- 类别先验和 logit 尺度漂移;
- Prompt/专家路由选错;
- LLM 的答案格式、指令遵循或安全策略改变。
4. 遗忘至少有六个技术层次
flowchart TD
A[新数据或新任务到达] --> B[参数更新]
B --> C1[参数干扰]
B --> C2[表征漂移]
B --> C3[分类器/校准偏置]
B --> C4[优化器与统计状态漂移]
B --> C5[路由或任务识别错误]
B --> C6[LLM 输出策略/对齐改变]
C1 --> D[旧任务指标下降]
C2 --> D
C3 --> D
C4 --> D
C5 --> D
C6 --> D
4.1 参数干扰
同一组权重同时承担多个任务。新任务优化修改了旧任务依赖的方向。
4.2 表征漂移(representation drift)
旧样本的特征由:
[
z_{\text{old}}=\phi_{\theta_{t-1}}(x)
]
变成:
[
z_{\text{new}}=\phi_{\theta_t}(x)
]
即使分类器没有变,旧类别在特征空间的位置也可能移动。反过来,即便 backbone 基本保留,分类头偏置也可能造成性能下降。
4.3 类别不平衡与 logit 偏置
Class-IL 中,当前阶段包含大量新类样本,却只有少量甚至没有旧类样本。交叉熵会把决策边界推向旧类,产生“新类偏置”。因此很多 CIL 方法中的 classifier alignment、balanced fine-tuning、prototype classifier,并不是直接保护参数,而是在修正输出空间。
4.4 优化器与归一化统计漂移
Adam 的动量、学习率调度、BatchNorm running mean/variance 都是模型状态。只保存权重、不保存这些状态,或者在新域上重新估计统计量,都可能改变旧任务表现。
4.5 路由失败
参数隔离、Prompt Pool、MoE 或 Adapter Pool 依赖“给当前输入选择正确模块”。此时旧知识可能完整保存在某个模块里,但输入被路由到了错误模块。表面指标仍会下降,但问题不是参数被擦除,而是知识不可达。
4.6 LLM 的访问与对齐失败
LLM 可能仍然能在线性 probe、特定 prompt 或少量校准后输出旧知识,但在原任务格式下失败。ICLR 2025 的 Spurious Forgetting in Continual Learning of Language Models 将一类现象解释为 task alignment 下降,而非知识本体完全消失。因此 LLM-CL 评测必须区分:
[
\text{knowledge storage}
\neq
\text{knowledge accessibility}
\neq
\text{generation policy}
]
第三部分:先把实验场景说清楚
5. 三种经典增量场景
van de Ven 等人的标准化工作把经典监督 CL 分为三类。
| 场景 | 测试时 task ID | 输出空间 | 核心难点 | 常见误区 |
|---|---|---|---|---|
| Task-Incremental Learning | 给定 | 通常每任务独立 head 或 mask | 保护旧任务参数 | task ID 是强 oracle,掩盖了任务识别问题 |
| Domain-Incremental Learning | 不给定 | 标签语义保持不变,共享 head | 同一任务在不同上下文/域中稳定 | “无需推断 task ID”不是说域变化不存在,而是无需选择任务专属输出头 |
| Class-Incremental Learning | 不给定 | 类别集合持续扩大,共享 head | 同时识别所有已见类;新类偏置 | 最终精度混合了表征、分类器和平衡问题 |
形式化地:
Task-IL
[
f(x,t)\rightarrow y
]
测试时提供任务上下文 (t)。
Domain-IL
[
f(x)\rightarrow y, \qquad \mathcal{Y}_t=\mathcal{Y}
]
标签空间保持一致,但 (P_t(X)) 或 (P_t(X,Y)) 变化。
Class-IL
[
\mathcal{Y}1\subset \mathcal{Y}{1:2}\subset\cdots\subset\mathcal{Y}_{1:T}
]
模型必须在所有已见类别上做一次统一预测。
6. 现实设定还需要另外四个轴
只写“Class-IL”仍然不够。实验至少还要声明:
6.1 数据访问
- Full replay:可访问全部历史数据,接近 joint retraining;
- Bounded raw replay:保存固定数量或固定字节的原始样本;
- Feature replay:保存中间特征;
- Logit replay:保存旧模型输出;
- Generative replay:保存生成器并合成旧样本;
- Replay-free / exemplar-free:不保留历史样本。
6.2 数据遍历次数
- 多 epoch task-wise CL;
- 单遍 online CL;
- 小批次流式更新;
- 完全 one-example-at-a-time。
6.3 任务边界
- 已知清晰边界;
- 训练时已知、测试时未知;
- 模糊边界;
- 无边界 task-free / general CL。
6.4 资源增长
必须分别报告:
[
\text{raw memory},\quad
\text{feature/logit memory},\quad
\text{trainable params},\quad
\text{total params},\quad
\text{FLOPs},\quad
\text{latency}
]
“每类保存 20 个样本”与“总共保存 2,000 个样本”不是同一个约束;“每任务增加一个 LoRA”也不能称为严格常数内存。
第四部分:怎样正确评测 CL
7. 性能矩阵
设 (R_{i,j}) 表示模型学完第 (i) 个任务后,在第 (j) 个任务测试集上的性能。
[
R=
\begin{bmatrix}
R_{1,1} & R_{1,2} & \cdots & R_{1,T}\
R_{2,1} & R_{2,2} & \cdots & R_{2,T}\
\vdots & \vdots & \ddots & \vdots\
R_{T,1} & R_{T,2} & \cdots & R_{T,T}
\end{bmatrix}
]
矩阵的对角线衡量每个任务刚学完时的能力;最后一行衡量整个序列结束后的保留情况;下三角反映学习后续任务对前面任务的影响。
8. 核心指标
8.1 最终平均精度(ACC)
[
\mathrm{ACC}=\frac{1}{T}\sum_{j=1}^{T}R_{T,j}
]
它是最直观的最终综合表现,但不能告诉你模型是“学不会新任务”还是“学会后又忘了”。
8.2 反向迁移(BWT)
常用定义为:
[
\mathrm{BWT}=\frac{1}{T-1}\sum_{j=1}^{T-1}\left(R_{T,j}-R_{j,j}\right)
]
- BWT < 0:后续学习伤害旧任务;
- BWT = 0:旧任务最终表现与刚学完时相同;
- BWT > 0:后续学习反而提升旧任务。
8.3 正向迁移(FWT)
一种常见定义是:
[
\mathrm{FWT}=\frac{1}{T-1}\sum_{j=2}^{T}\left(R_{j-1,j}-b_j\right)
]
其中 (b_j) 是未学习该任务时的基线。FWT 高意味着过去经验让模型在正式训练新任务前已经更有准备。
注意:不同论文对 BWT/FWT 的下标和基线约定可能不同,比较数字前必须核对公式。
8.4 平均遗忘(Average Forgetting)
任务 (j) 的遗忘可写为:
[
F_j=\max_{l\in{j,\ldots,T-1}}R_{l,j}-R_{T,j}
]
然后:
[
\overline F=\frac{1}{T-1}\sum_{j=1}^{T-1}F_j
]
它比较旧任务历史最佳值与最终值。若模型后续获得正向修正,(F_j) 也可能为负或接近零。
9. 只报告 ACC/Forgetting 仍然不够
现实系统还应报告:
- Anytime performance:训练过程中任意时间点的平均能力,而不仅是最终一步;
- Adaptation speed:新任务达到某阈值需要多少样本或更新步;
- Calibration:置信度、ECE、旧类/新类 logit 偏置;
- Memory in bytes:不要只报“样本数”;图像、token、feature、logit 的体积不同;
- 训练 FLOPs 和 wall-clock:回放会让每步训练量上升;
- 推理延迟与路由代价:模块池、ensemble、KNN、RAG 都可能增加推理成本;
- 参数增长率:每任务新增参数是否是 (O(1))、(O(T)) 或更高;
- 隐私风险:原始样本回放可能记住个人数据;生成式回放也不天然隐私安全;
- 安全与通用能力回归:对 LLM 尤其重要。
10. 一个可信 CL 实验必须包含的基线
至少应有:
- Naïve sequential fine-tuning:遗忘下界/基本对照;
- Joint training:在全部数据可用时的近似上界,而不是同等约束下的竞争者;
- ER + reservoir sampling:允许回放时的强简单基线;
- DER++:回放 + 历史 logit 的强基线;
- EWC 或 LwF:无原始回放的经典基线;
- Frozen pretrained backbone + prototype/linear head:Foundation Model 时代不可缺少;
- 一个 PEFT 基线:例如 Prompt、Adapter 或 LoRA。
还应控制:
- 相同 backbone 和预训练权重;
- 相同旧数据字节预算;
- 相同超参数搜索预算;
- 多个任务顺序与随机种子;
- 不使用测试 task ID 泄漏;
- 明确预训练集与评测集是否重叠;
- 不在最终测试序列上选择超参数。
第五部分:经典技术路线
11. 正则化:限制哪些参数或函数可以改变
正则化方法的统一思想是:
[
L_t(\theta)=L_{\text{new}}(\theta)+\lambda,\Omega(\theta,\theta^*_{\text{old}})
]
根据保护对象,可分为:
- 参数正则化:EWC、SI、MAS 等,保护“重要参数”;
- 函数正则化:LwF、logit distillation 等,保护旧模型的输入—输出行为。
11.1 EWC:用局部后验曲率保护重要参数
EWC 的经典目标为:
[
L(\theta)=L_{\text{new}}(\theta)
+\frac{\lambda}{2}\sum_i F_i(\theta_i-\theta_i^*)^2
]
其中:
- (\theta_i^*):旧任务训练结束时的参数;
- (F_i):Fisher 信息矩阵的对角近似,作为参数重要性;
- (\lambda):稳定性与可塑性的权衡。
直观解释:
- 若 (F_i) 大,移动参数 (\theta_i) 的代价高;
- 若 (F_i) 小,该参数可更多用于新任务;
- 这不是把重要参数绝对冻结,而是施加“弹性锚定”。
开源代码摘录:Online EWC 的惩罚项
出处:Mammoth,models/ewc_on.py,MIT License。
实现身份:权威 CL 框架复现;不是 EWC 原作者仓库。
原始行:源码 L30–L35
|
逐项对应:
self.net.get_params() - self.checkpoint对应 (\theta-\theta^*);** 2是二次距离;self.fish * ...让 Fisher 大的参数受到更强约束;.sum()对全部参数累加;e_lambda控制保护强度。
Online EWC 还会递归衰减和累积 Fisher:
[
F_t \leftarrow \gamma F_{t-1}+\widehat F_t
]
这样不必为每个历史任务保存一整套 Fisher 和锚点,但压缩历史曲率也会丢失任务细节。
EWC 的假设与局限
- 使用对角 Fisher,忽略参数间相关性;
- 在旧最优点附近做局部二次近似,长距离更新时近似会变差;
- 长任务序列中越来越多参数被判定为重要,模型可能逐渐失去可塑性;
- 它保护参数位置,不保证旧函数在所有输入区域都保持;
- Class-IL 中的分类器偏置并不会因为 Fisher 惩罚自动解决。
11.2 LwF:保护函数输出,而不是参数位置
LwF 保存旧模型 (f_{\theta^-}),在新数据 (x\sim D_t) 上要求新模型输出接近旧模型:
[
L=L_{\text{new-label}}
+\lambda T^2,
\mathrm{KL}\left(
\sigma(z^- /T);|;\sigma(z/T)
\right)
]
优点是无需原始旧数据;局限是蒸馏只发生在新数据覆盖的输入区域。若新旧任务输入支持集几乎不重叠,旧模型在新数据上的输出不足以约束旧域函数。
11.3 SI 与 MAS 的位置
- SI 沿优化轨迹累计每个参数对损失下降的贡献;
- MAS 用模型输出对参数扰动的敏感度衡量重要性,可在无标签数据上估计;
- 二者与 EWC 的区别主要是“如何估计重要性”,而不是保护目标的根本改变。
11.4 什么时候正则化值得优先考虑
适合:
- 不能保存原始数据;
- 任务序列不太长;
- 参数和计算预算严格;
- 新旧任务有较强共享结构;
- 作为 replay/PEFT 系统中的辅助项。
不适合单独承担:
- 很长、差异很大的任务序列;
- 强 Class-IL 新类偏置;
- 需要精确保留大量细粒度旧样本;
- 旧数据分布与新数据几乎不重叠。
12. 回放:把旧训练信号重新放回优化过程
经验回放的基本目标是:
[
L =
\mathbb E_{(x,y)\sim D_t}\ell(f_\theta(x),y)
+\lambda
\mathbb E_{(x,y)\sim M_t}\ell(f_\theta(x),y)
]
它直接修复顺序训练的核心缺陷:优化器不再只看到最新分布。
12.1 Reservoir Sampling:固定缓冲如何代表整个历史流
当已见样本数为 (n),缓冲容量为 (m) 时,reservoir sampling 使每个历史样本最终进入缓冲的概率为:
[
P(x_i\in M_n)=\frac{m}{n}
]
它不需要预先知道数据流总长度。
开源代码摘录:Mammoth Buffer
出处:Mammoth,utils/buffer.py,MIT License。
实现身份:框架公共 Buffer 实现。
原始行:源码 L104–L122
|
逐步解释:
- 缓冲未满时,当前样本直接进入下一个空位;
- 缓冲满后,在 ([0,n]) 中均匀抽一个整数;
- 只有抽到前 (m) 个位置时才替换缓冲中的某项;
- 否则返回
-1,丢弃当前样本。
Reservoir 的优势是简单、无偏和 task-free;不足是它不关心类别平衡、困难度、梯度多样性或隐私价值。数据流严重不平衡时,“全历史均匀”不一定等于“对最终任务最有用”。
12.2 缓冲里究竟存什么
| 存储对象 | 优点 | 风险/代价 |
|---|---|---|
| 原始样本 + 标签 | 训练信号最完整 | 隐私、版权、存储大 |
| 压缩样本 | 减少空间 | 压缩伪影、实现复杂 |
| 中间特征 | 更小、可能更隐私 | backbone 漂移后旧特征失配 |
| 历史 logits | 保存“暗知识”与类关系 | 依赖旧输出维度和校准 |
| 梯度/低秩子空间 | 直接约束更新方向 | 计算和存储可能随模型规模上升 |
| 生成器 | 不直接存真实数据 | 生成器也会遗忘;合成分布可能偏移 |
12.3 DER++:样本标签与历史 logit 同时回放
DER++ 的典型目标可写成:
[
L_{ ext{DER++}}
=L_{\text{CE,new}}
+\alpha|f_\theta(x_m)-z_m|2^2
+\beta,L{\text{CE}}(f_\theta(x_m),y_m)
]
其中缓冲保存 ((x_m,y_m,z_m)),(z_m) 是样本进入缓冲时的历史 logits。
开源代码摘录:DER++
出处:Mammoth,models/derpp.py,MIT License。
实现身份:Mammoth 是 DER/DER++ 论文团队的官方代码库。
原始行:源码 L36–L52
|
|
第一项让当前模型复现历史函数输出;第二项用真实标签防止旧 logits 中的错误永久固化。
为什么 logits 有用?硬标签只告诉模型正确类,而历史 logits 还保留:
- 类别间相似性;
- 决策边界附近的相对置信度;
- 当时模型的函数状态。
但 DER++ 仍受缓冲代表性、logit 校准漂移和输出空间扩展影响。
12.4 GEM / A-GEM:不是直接混合损失,而是约束梯度
GEM 希望新任务更新不能增加每个旧任务记忆集的损失:
[
\langle g,g_k\rangle \ge 0,\qquad \forall k<t
]
若违反约束,就把新梯度投影到可行区域。A-GEM 用一个参考记忆梯度 (g_{\text{ref}}) 代替多个旧任务约束:
[
\tilde g=
\begin{cases}
g,&g^\top g_{\text{ref}}\ge 0\
g-\frac{g^\top g_{\text{ref}}}{g_{\text{ref}}^\top g_{\text{ref}}}g_{\text{ref}},&g^\top g_{\text{ref}}<0
\end{cases}
]
开源代码摘录:A-GEM 投影
出处:Mammoth,models/agem.py,MIT License。
实现身份:框架复现。
原始行:源码 L13–L15
|
gxy:当前批次梯度;ger:回放参考梯度;corr * ger:当前梯度在冲突参考方向上的分量;- 相减后得到位于边界上的投影梯度。
限制包括:
- 大模型上提取、拼接并投影全参数梯度很昂贵;
- 一个随机参考批次未必代表全部旧知识;
- “不提高当前记忆批次损失”不等于不伤害整个旧分布;
- 强约束会抑制有必要的表示重构。
12.5 回放研究真正的三个子问题
- 存什么:reservoir、类别平衡、coreset、梯度多样性;
- 取什么:随机检索、MIR 的最大干扰样本、难例优先;
- 怎样训练:标签 CE、logit 蒸馏、对比学习、梯度约束、校准。
这比“回放 = 把几张旧图混进来”更完整。
13. 参数隔离与架构扩展:让任务少共享或不共享参数
核心形式可以抽象为:
[
f(x)=f_{\theta_{\text{shared}},A_{r(x)}}(x)
]
其中 (A_k) 是任务模块、mask、Prompt、Adapter、LoRA 或专家,(r(x)) 是路由器。
13.1 主要形态
| 形态 | 代表思路 | 如何防遗忘 | 主要代价 |
|---|---|---|---|
| 整列扩展 | Progressive Networks | 旧列冻结,新任务加新列 | 参数近线性增长 |
| 动态神经元/层 | DEN、Block Expansion | 新知识进入新容量 | 模型和推理成本增长 |
| 剪枝后占位 | PackNet | 旧任务权重冻结,新任务使用剩余权重 | 容量逐渐耗尽;需 task ID |
| 二值 mask | Piggyback、HAT、SupSup | 每任务使用不同子网络 | mask/路由管理;共享容量冲突 |
| Prompt/Adapter/LoRA 池 | L2P、EASE、O-LoRA 等 | 冻结 backbone,隔离增量参数 | 模块增长、检索错误 |
13.2 参数隔离并没有消除所有问题
它把问题从“参数是否被覆盖”转移为:
- 如何发现新任务;
- 如何选择正确模块;
- 模块是否可复用;
- 总容量怎样保持有界;
- 多模块输出如何校准;
- 跨任务共享是否被过度削弱。
若测试时直接提供 task ID,许多参数隔离方法的难度会显著下降。因此 Task-IL 的高分不能自动推导出真实 task-agnostic 场景的可靠性。
14. 三大方法家族不是互斥的
现代方法往往同时使用:
[
\boxed{\text{frozen backbone}}
+\boxed{\text{PEFT module}}
+\boxed{\text{small replay}}
+\boxed{\text{distillation}}
+\boxed{\text{classifier calibration}}
]
例如:
- replay 提供旧输入覆盖;
- distillation 保持历史函数;
- LoRA/Adapter 减少主干改动;
- 正交约束减少模块间干扰;
- prototype 或 balanced head 修复新类偏置。
所以把一个方法只归为“正则化”或“架构法”,更多是历史上的主机制分类,而不是当代系统的完整描述。
第六部分:预训练模型如何重构 CL
15. 从“保护表征”转向“利用表征”
传统 CL 默认从随机初始化开始:
[
\phi_{\theta_0}\text{ 很弱}
]
因此每个任务都必须修改 backbone,而遗忘主要发生在表征层。
Foundation Model 时代,预训练表示可能已经具有很强的可迁移性:
[
\phi_{\text{PTM}}(x)\text{ 已经线性可分或近似可分}
]
如果冻结 (\phi),只更新类别统计或轻量分类器,就不存在 backbone 参数遗忘。此时问题转化为:
- 预训练表征是否覆盖下游分布;
- 类原型是否稳定;
- 新旧类别的统计是否可比;
- 分类器如何处理类数量扩张;
- 需不需要轻量适配来缩小分布差距。
16. Prototype / NCM:为什么简单方法会很强
对类别 (c),累积归一化特征均值:
[
\mu_c=rac{1}{N_c}\sum_{i:y_i=c}
\frac{\phi(x_i)}{|\phi(x_i)|_2}
]
预测:
[
\hat y=\arg\max_c
\frac{\phi(x)^\top\mu_c}
{|\phi(x)|_2|\mu_c|_2}
]
如果 backbone 冻结,旧样本的特征坐标系不会漂移,类原型可在线累计。因此 SimpleCIL 一类方法可以在不训练下游 backbone 的条件下形成很强的 CIL 基线。RanPAC 进一步加入固定随机投影和非线性扩维,以提高线性可分性,再累计原型/统计。
16.1 这不等于 CL 已经解决
冻结表征绕开了参数干扰,却仍可能失败于:
- 新领域超出预训练分布;
- 细粒度类别需要专门特征;
- 类内分布随时间漂移,单均值原型不足;
- 预训练数据与 benchmark 重叠,结果被高估;
- 新任务需要的是生成、推理或控制技能,而不是静态分类。
因此 Foundation Model 时代的新方法必须回答:
相对“冻结 PTM + 极简统计分类器”,你的复杂模块究竟增加了什么?增加的精度是否值得训练、存储、路由与调参成本?
17. L2P:把持续学习状态放进可检索 Prompt Pool

图片出处:Google Research google-research/l2p 官方仓库,Apache-2.0 License。
17.1 按图逐步解读
- 输入先经过预训练 embedding / query function,得到查询向量;
- Prompt Pool 中每个 Prompt 与一个 key 关联;
- 查询向量和 key 做相似度匹配;
- 选出的 top-k Prompt 被前置到输入 token embedding;
- 预训练 Transformer 主干保持冻结或基本冻结;
- Prompt 和分类器承担下游顺序学习。
这相当于把“长期可学习状态”从巨大的 backbone 转移到一个小型、可检索的键值模块中。
17.2 开源代码摘录:top-k Prompt 检索
出处:Google Research L2P,models/prompt.py,Apache-2.0 License。
实现身份:论文作者官方 JAX 实现。
原始行:源码 L191–L225
|
选定索引后,从 Prompt Pool 取出对应参数:
|
将 Prompt 加到输入序列前方的官方实现为:
原始行:源码 L35–L45
|
17.3 关键技术含义
top_k不是 task ID;它是由输入特征动态决定的路由;- Prompt Pool 是参数记忆,不是原始样本回放;
- backbone 冻结降低了表征遗忘,但 Prompt 之间仍会竞争;
- 如果 query 与 key 匹配错误,知识虽然存在,也会不可达;
- 固定 pool 会容量不足,动态扩展又会造成长期内存增长。
18. DualPrompt:共享知识与任务特异知识分开

图片出处:Google Research google-research/l2p 官方仓库,Apache-2.0 License。
18.1 图中的两类 Prompt
- G-Prompt(General Prompt):跨任务共享,学习通用知识;
- E-Prompt(Expert Prompt):与特定任务/输入簇相关,通过 key 匹配选择。
图右侧展示 Prompt 如何注入多头自注意力(MSA):Prompt 可以被拆分并附着到 key/value 路径,而不是只在最外层拼接 token。
18.2 它在解决什么
L2P 把所有知识放进一个池,容易出现共享不足或 prompt collision。DualPrompt 显式分解:
[
P(x)=P_G+P_{E,r(x)}
]
- (P_G) 负责跨任务共享;
- (P_E) 负责隔离任务特异变化;
- 路由器 (r(x)) 负责选择专家 Prompt。
这是一种参数级的“稳定—可塑”分工,但它仍依赖路由可靠性、Prompt 容量和预训练 backbone 的可迁移性。
19. Adapter / LoRA / 子空间隔离
LoRA 将权重更新写为低秩增量:
[
W'=W+\Delta W,\qquad \Delta W=BA,
]
其中秩 (r\ll d)。冻结 (W) 后,只训练 (A,B),可以显著减少可训练参数。
持续学习中的关键不是“用了 LoRA 就不会忘”,而是:
- 多任务是否共用同一 LoRA;
- 每任务是否新建 LoRA;
- 如何路由和合并;
- 不同 LoRA 子空间是否干扰;
- 模块数量是否有界。
InfLoRA、O-LoRA 等方法试图让新任务增量位于与旧任务重要梯度/子空间正交的方向:
[
\Delta W_t\perp \mathcal{G}_{1:t-1}
]
但严格正交会随任务增多消耗可用子空间;近似梯度空间的质量也决定了真实保护程度。
第七部分:LLM 的持续学习
20. 为什么 LLM-CL 不能直接照搬 Split CIFAR
LLM 的“任务”通常不是清晰的十分类:
- 领域语料持续到达;
- 新事实与旧事实发生时间冲突;
- 新工具、新语言、新格式和新技能加入;
- SFT、偏好优化和安全对齐目标反复改变;
- 同一个 prompt 同时依赖知识、推理、指令遵循与输出策略。
因此当前 LLM-CL 通常按模型生命周期分成三个阶段:
| 阶段 | 主要数据 | 典型损失 | 主要遗忘对象 | 常见机制 |
|---|---|---|---|---|
| Continual Pre-Training(CPT) | 新领域/新时间段无标注 token | next-token loss | 通用语言能力、旧领域知识 | 旧数据混合、学习率重预热、扩层、正则化 |
| Continual Fine/Instruction Tuning(CFT/CIT) | 指令—回答、任务数据 | SFT CE | 旧技能、格式、通用能力 | replay、distillation、LoRA/Adapter Pool、正交子空间 |
| Continual Alignment | 偏好、安全、奖励数据 | DPO/RLHF/策略目标 | helpfulness、安全边界、知识可达性 | 数据混合、参考模型约束、在线合并、回归测试 |
2026 年的 LLM-CL 综述也普遍采用“持续预训练—持续微调—持续对齐”的阶段化结构。
21. 持续预训练:真正的变量不只有数据
CPT 的更新可写为:
[
L_{\text{CPT}}=
\mathbb E_{x\sim \alpha P_{\text{new}}+(1-\alpha)P_{\text{replay}}}
[-\log p_\theta(x)]
]
其中 (\alpha) 是新旧数据混合比例。工程上至少要同时设计:
- 数据混合比例:新领域太高会覆盖旧能力,太低则适应慢;
- 学习率重预热:旧模型已经处于衰减学习率末端,直接继续训练可能缺乏可塑性;
- 优化器状态:保留还是重置 Adam moments 会改变更新轨迹;
- token 顺序与去重:持续语料可能与旧数据重复或时间冲突;
- tokenizer/embedding 扩展:新语言、新符号可能需要新 token;
- 评测矩阵:不能只看新领域 perplexity,还要看通用、推理、安全和旧域。
实践中,“重预热 + 少量旧数据混合”是必须认真比较的简单基线。复杂 CL 方法若没有超过这一基线,往往没有足够工程价值。
22. 持续指令微调:技能与任务对齐同时变化
CIT 训练的是:
[
p_\theta(y\mid x,\text{instruction})
]
性能下降可能来自:
- 旧技能参数被覆盖;
- 指令模板变化;
- 当前数据过度强化某一种回答风格;
- 旧任务输出标签/格式不再被生成策略优先选择;
- LoRA 合并或路由错误。
因此只测一个 exact-match 分数,很难判断“知识没了”还是“输出方式变了”。
23. Spurious Forgetting:先判断知识是否真的消失
一个更可靠的诊断流程是:
- 原始任务评测:旧任务指标是否下降;
- 固定表征 probe:旧知识是否还能被线性读取;
- head/calibration reset:重新校准小型输出层后能否恢复;
- prompt rescue:更明确的任务描述或 few-shot 示例能否恢复;
- logit/representation analysis:旧答案是否仍有较高但未胜出的概率;
- 再训练成本:只用极少旧样本是否快速恢复。
若知识很容易被重新读取,问题更接近访问或对齐;若连内部 probe 都显著失效,才更像参数知识被覆盖。
这一区分会改变治疗方式:
- 真正参数遗忘 → replay、正则、隔离、扩容;
- 读取/校准失败 → head alignment、routing、prompt、decoding 修正;
- 安全/策略漂移 → alignment 数据与目标重新平衡。
24. LLaMA Pro:用 Block Expansion 增加新容量
LLaMA Pro 的思路是把原 Transformer 层保留并冻结,在层间插入新块。残差块可写为:
[
h_{l+1}=h_l+F_l(h_l)
]
如果新增块初始化为:
[
F_{\text{new}}(h)\approx 0,
]
那么插入时近似恒等映射:
[
h_{l+1}\approx h_l
]
之后只训练新增块,使新领域知识主要进入新容量,继承参数尽量不动。
flowchart LR
I[输入] --> O1[冻结旧 Block 1]
O1 --> N1[新增可训练 Block A<br/>初始近似恒等]
N1 --> O2[冻结旧 Block 2]
O2 --> N2[新增可训练 Block B<br/>初始近似恒等]
N2 --> O3[冻结旧 Block 3]
O3 --> Y[输出]
官方开源实现:TencentARC LLaMA-Pro,scripts/block_expansion.py,Apache-2.0 License。
这种方法的优势是结构性保护继承参数;代价是:
- 参数和推理 FLOPs 增长;
- 新旧知识仍要经过整个网络共同组合;
- 连续多轮扩展是否保持有界尚未解决;
- “旧参数不动”不等于输出行为绝对不变,因为新增块会改变后续激活。
25. RAG、模型编辑、模型融合与 LLM-CL 的关系
25.1 RAG
RAG 更新:
[
E_t \leftarrow E_{t-1}\cup \Delta E_t
]
而主参数 (\theta) 可以不变。它特别适合:
- 频繁变化的事实;
- 需要来源和可删除性的知识;
- 用户或组织私有数据;
- 低延迟更新。
但它不会自动让模型学会新的推理程序、语言模式或工具策略。检索失败、索引过期和上下文容量仍是瓶颈。
25.2 模型编辑
编辑适合局部事实或行为修正,但大量顺序编辑可能产生:
- 局部性下降;
- 编辑间干扰;
- 目标事实与关联事实不一致;
- 参数补丁持续增长。
因此 lifelong model editing 是 CL 的邻近子问题,而不是已经替代 CL 的万能方案。
25.3 模型融合
任务向量可写为:
[
\tau_t=\theta_t-\theta_0
]
融合尝试:
[
\theta_{\text{merge}}=\theta_0+\sum_t\alpha_t\tau_t
]
它可以免原始数据合并多个专长模型,但参数方向冲突、尺度差异和路由问题仍然存在。它更像离线知识整合,与在线顺序学习互补。
第八部分:Agent 与实际系统中的记忆层级
26. “保存经历”与“改变能力”必须分开
一个 Agent 可以把每次轨迹存进数据库,但这只说明它有外部记忆:
[
\text{remembered episode}\not\Rightarrow\text{internalized skill}
]
更完整的记忆层级是:
| 层级 | 载体 | 时间尺度 | 优势 | 局限 |
|---|---|---|---|---|
| Working memory | 当前 context | 秒—分钟 | 即时、无需训练 | 上下文有限,结束即消失 |
| Episodic memory | 对话/轨迹/样本 Buffer | 天—长期 | 可追溯、可回放 | 检索成本和隐私风险 |
| Semantic external memory | RAG/知识图谱 | 长期 | 易更新、可删除、可引用 | 不改变参数能力 |
| Procedural/module memory | Prompt/LoRA/Adapter/技能模块 | 中长期 | 轻量适配、可路由 | 模块增长与冲突 |
| Parametric memory | 主模型权重 | 长期 | 低延迟泛化、隐式整合 | 更新昂贵、难删除、会干扰 |
27. 一个较现实的持续学习系统架构
flowchart TD
A[持续到达的数据/轨迹] --> B[质量、隐私与安全过滤]
B --> C[短期 episodic buffer]
B --> D[可检索语义记忆 RAG]
C --> E[样本选择与回放调度]
D --> F[训练数据构造/自蒸馏]
E --> G[冻结主干 + PEFT/可扩展模块]
F --> G
G --> H[旧能力/新能力/安全回归测试]
H -->|通过| I[版本化部署]
H -->|失败| J[回滚、调混合比、扩大回放]
I --> K[线上反馈与漂移监测]
K --> A
C --> L[周期性 consolidation]
D --> L
L --> G
关键工程原则:
- 即时事实优先进入外部记忆,不必每次改参数;
- 重复、高价值、可泛化的经验才进入参数巩固;
- 训练前做数据治理和去重;
- 更新后必须通过旧能力、新能力、安全和延迟门控;
- 每次更新都可回滚;
- 模块、Buffer 和索引都有淘汰/压缩策略;
- 长期资源必须可计量,而不是隐式无限增长。
28. CL 对 AGI / RSI 的真实意义
持续学习是长期自主智能的必要组成,但不是充分条件。RSI 或开放式 Agent 还需要:
- 自动发现能力缺口;
- 选择有信息价值的经验;
- 构造课程与实验;
- 判断新更新是否真的改善;
- 识别奖励欺骗、数据污染和安全回归;
- 把具体经历抽象为可迁移技能;
- 决定何时外部记忆、何时参数巩固、何时删除。
因此更完整的闭环是:
[
\text{experience}
\rightarrow\text{evaluation}
\rightarrow\text{selection}
\rightarrow\text{update}
\rightarrow\text{regression testing}
\rightarrow\text{deployment}
]
而不仅是“继续梯度下降”。
第九部分:开源代码与复现实验
29. 本文代码来源清单
| 机制 | 仓库 | 文件 | 实现身份 | 许可证 | 本文用途 |
|---|---|---|---|---|---|
| Online EWC | aimagelab/mammoth |
models/ewc_on.py |
CL 框架复现 | MIT | 解释 Fisher 加权二次惩罚 |
| Reservoir Sampling | aimagelab/mammoth |
utils/buffer.py |
框架公共实现 | MIT | 解释固定容量流式采样 |
| DER++ | aimagelab/mammoth |
models/derpp.py |
论文团队官方代码库 | MIT | 解释 logit + label 双回放 |
| A-GEM | aimagelab/mammoth |
models/agem.py |
CL 框架复现 | MIT | 解释冲突梯度投影 |
| L2P / DualPrompt | google-research/l2p |
models/prompt.py |
论文作者官方 JAX 实现 | Apache-2.0 | 解释 Prompt 检索和前置 |
| LLaMA Pro | TencentARC/LLaMA-Pro |
scripts/block_expansion.py |
论文作者官方实现 | Apache-2.0 | 说明 Transformer Block Expansion |
重要区分:
- “开源”只表示代码公开并有相应许可证;
- “论文作者官方实现”与“权威框架复现”不是同一概念;
- EWC 和 A-GEM 在本文使用的是 Mammoth 复现,不冒充原作者源码;
- 本文没有为“无官方代码”的方法自行补写实现。
30. 用 Mammoth 跑一个 DER++ 基线
下面命令逐字来自 Mammoth 官方 README:
|
官方 README 同时提醒,这组超参数只是运行示例;更规范的比较应使用仓库提供的配置和复现记录:
|
30.1 不要只“跑通”,要记录完整实验契约
建议每个实验保存:
- git commit;
- 数据集版本与切分;
- 任务顺序;
- 预训练 checkpoint;
- Buffer 的样本数与实际字节;
- 所有超参数;
- 随机种子;
- 每阶段性能矩阵 (R);
- FLOPs、显存、训练时间;
- 最终模型与优化器状态;
- 是否使用 task ID;
- 是否在测试集上选择超参数。
31. 工具选择
Mammoth
适合:快速比较大量经典和现代方法。其官方 README 在 2026 年列出 70+ 方法和 20 个数据集,并提供模型配置与复现记录。
Avalanche
适合:从 benchmark stream、训练策略、评测指标到日志的端到端实验;其模块化 API 很适合学习 CL 协议或构造自定义数据流。
PyCIL
适合:以 Class-Incremental Learning 为主的复现,尤其是传统 CIL 与预训练模型 CIL。仓库在 2026 年仍有新工具和方法更新记录。
PILOT
适合:预训练模型驱动的 CIL 方法,便于比较 Prompt、Adapter、prototype 等路线。
Google Research L2P
适合:理解 L2P/DualPrompt 的原始 JAX 设计。它是方法官方实现,不应把其中 TPU/JAX 环境假设直接等同于通用 PyTorch 工程模板。
第十部分:怎样设计一项可信研究
32. 第一步:写清“问题合同”
在写模型前先回答:
- 数据是 task-wise 还是无边界流?
- 测试时是否提供 task ID?
- 允许重访多少旧数据,按样本还是字节?
- 是否允许存特征、logit、生成器?
- 模型参数能否随任务增长?
- 新旧知识冲突时,哪个版本应被视为正确?
- 需要保留哪些通用能力和安全属性?
- 训练与推理预算是多少?
没有这些条件,“解决 catastrophic forgetting”是不可证伪的宽泛表述。
33. 第二步:建立最小但强的基线矩阵
| 类别 | 最小基线 | 要回答的问题 |
|---|---|---|
| 无保护 | Naïve FT | 原始遗忘有多严重? |
| 上界 | Joint | 如果历史数据完全可用,最高能到哪里? |
| 回放 | ER-reservoir | 复杂方法能否超过最简单回放? |
| 回放+蒸馏 | DER++ | 历史函数信息是否有额外价值? |
| 正则 | EWC/LwF | 不存旧样本时能保留多少? |
| Foundation baseline | Frozen PTM + prototype | 提升是否主要来自预训练? |
| PEFT | Prompt/LoRA/Adapter | 轻量参数是否足以适应? |
34. 第三步:做能解释机制的消融
至少应测试:
- 去掉 replay;
- 去掉 distillation;
- 固定与更新 backbone;
- 不同 Buffer 字节预算;
- 随机采样 vs 类别平衡/困难样本;
- task ID 有/无;
- 正常路由 vs oracle 路由;
- 只评 classifier vs 重训练一个 probe;
- 不同任务顺序;
- 预训练数据重叠排查。
一个方法若只在单一顺序、单一 seed、单一 buffer size 上胜出,不能说明其总体机制可靠。
35. 第四步:把结果分解为四种失败
当旧任务分数下降时,依次问:
- 没学会新任务? 看当前任务学习曲线;
- 学会后参数遗忘? 看旧表征 probe 和旧样本损失;
- 分类器/校准偏置? 看 feature separability、balanced head、NCM;
- 路由/对齐失败? 用 oracle module、prompt rescue、head reset 测试。
这比只报告“遗忘率下降 2%”更能产生可迁移知识。
第十一部分:目前哪些问题已经较成熟,哪些仍未解决
36. 相对成熟的部分
在以下条件下,CL 已经有可用的工程解:
- 任务序列较短;
- 任务边界或类别增量协议明确;
- 允许固定小 Buffer;
- 评测是监督分类;
- backbone 和数据规模适中;
- 可以接受少量模块增长。
此时 ER、DER++、prototype、PEFT 和简单校准往往能构成强系统。
37. 仍然开放的核心问题
37.1 长时间尺度与有界资源
很多方法的隐藏状态随任务增长:
[
|M_T|,|A_T|,|\text{statistics}_T|=O(T)
]
真正终身学习需要长期压缩、合并、淘汰和重构,而不是无限增加 Prompt、LoRA 或样本。
37.2 未知任务边界
现实分布可能缓慢漂移,也可能突然改变。系统必须决定:
- 何时创建新模块;
- 何时复用旧模块;
- 何时只是噪声;
- 何时旧概念已失效。
37.3 知识冲突与有益遗忘
“旧知识”不总是正确:法律、价格、医学指南、用户偏好和安全政策会更新。系统需要时间和来源建模,而不是无条件把新旧信息平均。
37.4 知识存储与访问的可诊断性
需要更好地区分:
- 参数中是否还存在知识;
- 哪个层级保存了知识;
- 路由能否访问;
- 生成策略为何不输出;
- 恢复需要多少数据和计算。
37.5 Foundation Model 基准污染
预训练模型可能见过 ImageNet 派生数据、任务文本或公开评测。复杂 CL 方法的提升必须与数据重叠和 backbone 能力解耦。
37.6 LLM/Agent 的安全持续学习
在线吸收经验会扩大:
- 数据投毒;
- prompt injection 被巩固;
- 隐私记忆;
- reward hacking;
- 安全边界回退;
- 用户个性化与全局模型污染。
因此实际系统不能让线上反馈直接无门控地更新主模型。
第十二部分:方法选择的工程决策表
| 现实需求 | 优先路线 | 原因 | 需要警惕 |
|---|---|---|---|
| 只需更新频繁变化事实 | RAG / 外部知识库 | 快、可引用、可删除 | 检索失败,不会自动内化技能 |
| 允许保存少量旧样本 | ER / DER++ | 强、简单、通用 | 隐私与额外训练成本 |
| 禁止保存原始数据 | 蒸馏、EWC/SI/MAS、feature/logit replay | 不依赖原始旧样本 | 新数据支持集不足、近似误差 |
| 强预训练视觉分类 | Frozen PTM + prototype,之后再考虑 PEFT | 简单基线可能已很强 | 分布外细粒度任务 |
| 多个可识别任务 | Adapter/LoRA/Prompt Pool | 模块化隔离 | task 路由、参数增长 |
| 新领域 LLM 语料 | CPT + 数据混合 + LR 重预热 + 回归评测 | 直接更新语言模型分布 | 通用能力与对齐回退 |
| 新指令/技能 | CIT + PEFT + 少量 replay/distill | 成本较低、便于版本化 | 格式偏移、LoRA 冲突 |
| 长期 Agent | 外部 episodic/semantic memory + 周期巩固 | 兼顾快速记忆和慢速内化 | 检索污染、无界增长、安全 |
结论:当前 CL 的最准确技术图景
持续学习的核心不应被概括为一句“让模型不断学习且不遗忘”。更准确的图景是:
[
\boxed{
\text{在非平稳数据流上,管理参数、模块、样本与外部记忆的长期状态更新}
}
]
经典正则化、回放和参数隔离分别回答:
- 哪些方向不能随便改;
- 哪些旧训练信号必须重现;
- 哪些知识应放入独立容量。
预训练模型时代又增加了两个问题:
- 何时根本不应修改强 backbone;
- 如何在 Prompt/LoRA/Adapter/原型之间组织和路由知识。
LLM 与 Agent 时代进一步要求系统区分:
[
\text{参数知识}
+\text{外部语义记忆}
+\text{情景经历}
+\text{程序性技能}
+\text{生成与安全策略}
]
因此,目前最有前景的方向不是寻找一个单一“永不遗忘损失函数”,而是设计一个有界、可诊断、可回滚、分层记忆、能够周期巩固的学习系统。
真正的终身学习是否实现,应由以下问题决定:
- 它能否持续学到新能力,而不只是存储新文本?
- 它能否知道哪些旧知识应保留、修改或删除?
- 它能否在没有 task ID 的情况下访问正确知识?
- 它的内存、参数和计算是否长期有界?
- 它能否证明更新没有破坏通用能力和安全性?
- 它能否从具体经历形成可迁移的抽象,而不是无限堆积样本?
在这些问题被同时解决之前,CL 仍然是从静态模型走向真正长期智能的核心开放领域。
主要参考资料与开源资源
总体与评测
- Lopez-Paz & Ranzato, Gradient Episodic Memory for Continual Learning, NeurIPS 2017: https://arxiv.org/abs/1706.08840
- van de Ven et al., Three Types of Incremental Learning, Nature Machine Intelligence 2022: https://www.nature.com/articles/s42256-022-00568-3
- van de Ven, Soures & Kudithipudi, Continual Learning and Catastrophic Forgetting: https://arxiv.org/abs/2403.05175
- Wang et al., A Comprehensive Survey of Continual Learning: Theory, Method and Application, TPAMI 2024: https://arxiv.org/abs/2302.00487
经典方法
- Kirkpatrick et al., Overcoming Catastrophic Forgetting in Neural Networks(EWC): https://arxiv.org/abs/1612.00796
- Li & Hoiem, Learning without Forgetting: https://arxiv.org/abs/1606.09282
- Buzzega et al., Dark Experience for General Continual Learning: https://arxiv.org/abs/2004.07211
- Chaudhry et al., Efficient Lifelong Learning with A-GEM: https://arxiv.org/abs/1812.00420
预训练模型
- Wang et al., Learning to Prompt for Continual Learning: https://arxiv.org/abs/2112.08654
- Wang et al., DualPrompt: https://arxiv.org/abs/2204.04799
- Zhou et al., Revisiting Class-Incremental Learning with Pre-Trained Models: https://arxiv.org/abs/2303.07338
- McDonnell et al., RanPAC: https://arxiv.org/abs/2307.02251
- Liang & Li, InfLoRA: https://arxiv.org/abs/2404.00228
LLM 持续学习
- Shi et al., Continual Learning of Large Language Models: A Comprehensive Survey: https://arxiv.org/abs/2404.16789
- Wu et al., Continual Learning for Large Language Models: A Survey: https://arxiv.org/abs/2402.01364
- Chen et al., Continual Learning in Large Language Models: Methods, Challenges, and Opportunities(2026): https://arxiv.org/abs/2603.12658
- Zheng et al., Spurious Forgetting in Continual Learning of Language Models, ICLR 2025: https://openreview.net/forum?id=ScI7IlKGdI
- Wu et al., LLaMA Pro: Progressive LLaMA with Block Expansion: https://arxiv.org/abs/2401.02415
开源仓库
- Mammoth(MIT): https://github.com/aimagelab/mammoth
- Avalanche(MIT): https://github.com/ContinualAI/avalanche
- PyCIL: https://github.com/LAMDA-CL/PyCIL
- PILOT: https://github.com/LAMDA-CL/LAMDA-PILOT
- Google Research L2P / DualPrompt(Apache-2.0): https://github.com/google-research/l2p
- TencentARC LLaMA Pro(Apache-2.0): https://github.com/TencentARC/LLaMA-Pro
- LLM-CL Survey 动态论文列表: https://github.com/Wang-ML-Lab/llm-continual-learning-survey
图片与代码归属说明
assets/l2p_illustration.png与assets/dualprompt_illustration.png来自 Google Research L2P 官方开源仓库,随仓库 Apache-2.0 License 发布。- 代码摘录版权归相应仓库贡献者所有;本文仅摘录理解算法所需的最短连续源码,并保留来源与许可证信息。
- Mermaid 流程图为本文用于解释的原创结构图,不是任何论文原图。