Skip to content

持续学习

本页介绍持续学习(Continual Learning,又称 Lifelong Learning):让模型像人一样按顺序学习一系列任务、且不遗忘旧任务。它解决了深度学习最顽固的”灾难性遗忘”问题,是连接迁移学习与元学习、迈向长期可进化 AI 系统的关键技术。

前置概念速览(第一次接触 AI 的读者可先看这一段)

  • 梯度下降(Gradient Descent):神经网络”学习”的本质。模型用一个损失函数(Loss Function) L 衡量”预测有多错”,然后沿损失下降最快的方向(即梯度 ∇L 的反方向)小步调整参数 θ\theta:θ←θ−η⋅∇L\theta \leftarrow \theta - \eta \cdot \nabla L。其中 η\eta 叫学习率(Learning Rate),是步长。一次反向传播(Backpropagation)就能算出所有参数的梯度。
  • SGD(Stochastic Gradient Descent,随机梯度下降):每次只用一小批样本(mini-batch)估计梯度并更新一次,是训练深度网络的标准做法。后面所有”训练新任务”的循环,底层都是 SGD。
  • 正则化(Regularization):在损失里加额外项来约束模型复杂度或参数变化幅度,例如权重衰减(L2 正则)、Dropout。EWC 本质也是一种正则化——约束”重要参数别乱动”。

持续学习就像一边工作一边考证的人:学了新技能(Python)不会忘了旧技能(开车)。但深度网络天然做不到——这叫”灾难性遗忘”:

  • 灾难性遗忘 = 狗熊掰棒子:一个分类器学完猫狗分类后,接着学汽车飞机分类,猫狗的识别能力会迅速崩盘。因为新任务的梯度更新把为旧任务调好的权重全冲乱了。
  • 稳定性-可塑性困境(Stability-Plasticity Dilemma):模型既要 可塑(快速学新任务),又要 稳定(不破坏旧知识)——这两个目标天然冲突。太稳定学不动新东西,太可塑旧知识全忘。
  • 人脑的解法:大脑通过”巩固”(consolidation)——把学到的短期记忆重放到海马体、逐步固化到大脑皮层——既学了新东西,又不覆盖旧记忆。持续学习算法正是从这一机制汲取灵感。

直觉上理解:参数空间是有限的”书架”。新任务不断要往里放新书,若直接堆上去就会挤掉旧书——持续学习要做的是”加固重要的旧书架”,或者”另辟一块新空间”,让旧知识不被新知识挤出。

持续学习按任务边界是否清晰,分为三类设定:

  • 任务增量(Task-Incremental):任务 ID 在推理时已知,只需在对应任务头上输出——最简单。
  • 类别增量(Class-Incremental):推理时无任务 ID,模型要区分所有学过的类——中等难度。
  • 域增量(Domain-Incremental):输入分布随时间漂移(如天气、光照),输出空间不变——相对友好。

形式化地,设任务序列为 T1,T2,…,TnT_1, T_2, \ldots, T_n,对应数据分布 D1,…,DnD_1, \ldots, D_n。持续学习的目标是学到一个模型 fθf_\theta,使得在任意时刻 tt,对所有已见任务 D1∪…∪DtD_1 \cup \ldots \cup D_t 都保持低损失,而不仅仅是对当前任务 DtD_t 损失低。这与标准”一次性训练”的根本区别在于:数据是流式到达的,旧任务数据要么不可得、要么只能保留极少部分。

持续学习算法分三大流派,对应三种防止遗忘的思路。

最直接的做法——“不时翻一翻旧书”。维护一个小的旧任务样本缓冲区(memory buffer)B,训练新任务时混入旧样本一起训练。每步训练流程:

每步训练:
1. 从当前任务 D_t 采样一个 mini-batch (x_new, y_new)
2. 若缓冲区非空,从 B 采样 mini-batch (x_old, y_old)
3. 将新旧样本拼接:x = concat(x_new, x_old), y = concat(y_new, y_old)
4. 计算总损失 L = L_task(f_θ(x), y),做一次 SGD 更新

形式化地,回放的总损失为:

Ltotal=(1−α)⋅E(x,y)∼Dt[ℓ(fθ(x),y)]+α⋅E(x,y)∼B[ℓ(fθ(x),y)]L_{\text{total}} = (1-\alpha) \cdot \mathbb{E}_{(x,y) \sim D_t}\left[\ell(f_\theta(x), y)\right] + \alpha \cdot \mathbb{E}_{(x,y) \sim B}\left[\ell(f_\theta(x), y)\right]

其中 α∈[0,1]\alpha \in [0,1] 是新旧数据混合比例,ℓ\ell 是单样本损失(如交叉熵)。α\alpha 越大对旧任务保护越好,但新任务学得越慢——这正是稳定性-可塑性困境的数学体现。

代表方法:

  • ER(Experience Replay,经验回放):最朴素版本,直接混入旧样本。实现极简、效果稳健,是工业首选。
  • iCaRL(结合回放与类原型更新):每类保留一组”最具代表性”的样本(用 herding 算法挑选),分类时用样本特征均值作为类原型,按最近原型分类。
  • DER / DER++(Dark Experience Replay):除了回放旧样本本身,还回放旧模型在这些样本上的 logit 输出(“暗经验”),用一个蒸馏损失约束新模型与旧模型输出一致。DER++ 至今是强 baseline。

名词解释:logit 是分类器最后一层 softmax 之前的原始输出值,反映各类的相对置信度。知识蒸馏(Knowledge Distillation) 则是让学生模型模仿老师模型的输出分布,详见下文。

当完全不能保存旧数据时(如医疗隐私法规),用 生成式回放(Generative Replay)——训练一个生成模型(GAN 或扩散模型)生成”伪旧样本”混入训练。详见生成对抗网络与扩散模型。

“加固重要的旧书架”——为每个参数估计它对旧任务的重要性,新任务训练时对重要参数施加惩罚,禁止它们大幅改变。

代表方法 EWC(Elastic Weight Consolidation,弹性权重巩固) 的核心思想来自贝叶斯推断。学完旧任务后,参数 θ∗\theta^* 在旧任务上的后验分布为 p(θ∣Dold)p(\theta \mid D_{\text{old}})。新任务到来时,我们想找到在旧任务后验上”最可能”的参数——即最大化:

log⁡p(θ∣Dold∪Dnew)=log⁡p(Dnew∣θ)+log⁡p(θ∣Dold)+const\log p(\theta \mid D_{\text{old}} \cup D_{\text{new}}) = \log p(D_{\text{new}} \mid \theta) + \log p(\theta \mid D_{\text{old}}) + \text{const}

第二项 log p(θ | D_old) 就是旧任务给新参数加的”约束”。EWC 用正态分布近似它在最优点 θ∗\theta^* 附近的形状。根据拉普拉斯近似(Laplace Approximation),后验在对数似然二阶可导时近似为:

p(θ∣Dold)≈N(θ∗,F−1)p(\theta \mid D_{\text{old}}) \approx \mathcal{N}(\theta^*, F^{-1})

其中 F 是 Fisher 信息矩阵(Fisher Information Matrix),定义为对数似然对参数梯度的外积期望:

F=E(x,y)∼Dold[∇θlog⁡p(y∣x,θ)⋅∇θlog⁡p(y∣x,θ)⊤]F = \mathbb{E}_{(x,y) \sim D_{\text{old}}}\left[\nabla_\theta \log p(y \mid x, \theta) \cdot \nabla_\theta \log p(y \mid x, \theta)^\top\right]

直观上,Fisher 矩阵的对角元 F_ii 衡量”参数 θ_i 变动一点点,旧任务的预测会变差多少”——越大越重要。取对数后,−log p(θ|D_old) 近似为一个二次惩罚项:

Ltotal=Lnew(θ)+λ2∑iFii⋅(θi−θiold)2L_{\text{total}} = L_{\text{new}}(\theta) + \frac{\lambda}{2} \sum_i F_{ii} \cdot (\theta_i - \theta_i^{\text{old}})^2

其中 F_ii 是参数 θ_i 对旧任务的 Fisher 信息(越大越重要),θ_i_old 是旧任务训练完后的参数值,λ 是正则强度超参。损失的第二项相当于一个”软锚”——越重要的参数被拉得越紧。

名词解释:

  • Fisher 信息矩阵:统计学中衡量”参数变化对似然函数敏感度”的矩阵,对角线元素越大说明该参数越关键。EWC 只用对角元近似(忽略参数间相关性),计算量从 O(n²) 降到 O(n),是实用的工程妥协。
  • 贝叶斯推断(Bayesian Inference):把参数本身视为随机变量、用后验分布 p(θ|D) 描述其不确定性。EWC 的”重要性约束”本质上是把旧任务的后验作为新任务的先验。

LwF(Learning without Forgetting) 用知识蒸馏(Knowledge Distillation) 作为正则项。蒸馏本是 Hinton 提出的模型压缩技术:让”学生”模型模仿”老师”模型的输出分布,把老师的”暗知识”(各类间的相似度信息)传递给学生。在持续学习中,旧模型就是老师:

LKD=∑xKL ⁣(softmax(zold(x)/T)  ∥  softmax(znew(x)/T))L_{\text{KD}} = \sum_x \text{KL}\!\left(\text{softmax}(z_{\text{old}}(x)/T) \;\|\; \text{softmax}(z_{\text{new}}(x)/T)\right)

其中 z_old(x)、z_new(x) 分别是旧/新模型在输入 x 上的 logit,T 是温度(Temperature)(>1 使输出分布更平滑、暴露更多类间关系信息),KL 是 KL 散度(衡量两个分布差异)。LwF 总损失 = 新任务损失 + λ·L_KD,无需保存旧样本,只用旧模型对新数据的预测做软标签。

  • SI(Synaptic Intelligence):在训练过程中在线累积每个参数对损失下降的贡献(“path integral”),比 EWC 事后估计更准。
  • MAS(Memory Aware Synapses):用输出的 L2 范数对参数的梯度估计重要性,不依赖标签(适合无标签场景)。

正则化法无需保存旧数据,但对长任务序列(数十个任务以上)效果有限——所有旧任务的约束会逐渐”挤死”新任务的学习空间。

“专门开辟新空间”——为每个任务或每组参数分配专属子网络,旧任务用旧子网络、新任务用新子网络,互不干扰。

代表方法:

  • PackNet(基于剪枝的参数隔离):先为任务 1 训练再剪枝出专属参数,剩余参数给任务 2。剪枝(Pruning)是把不重要的权重置零来压缩模型的技术,这里被”挪用”来做参数分配。
  • HAT(Hard Attention to the Task):用注意力掩码动态分配每层参数给不同任务,掩码通过一个逐任务学习的注意力向量生成。
  • Progressive Neural Networks(PNN):每来一个新任务就新增一列网络,旧列冻结、新列通过横向连接读取旧列特征。

名词解释:注意力掩码(Attention Mask) 是一个逐元素乘到特征图上的 0/1(或 0~1 连续)矩阵,决定哪些通道/位置参与计算。HAT 用它实现”这个参数属于任务 A、那个属于任务 B”。

架构法完全不遗忘,但网络规模随任务数线性增长,扩展性受限。在 LLM 时代,参数高效微调(PEFT) 给架构法注入了新生命——用 LoRA 等只追加极少量参数的”任务适配器”,规模不再爆炸。详见下文”2025 前沿”。

import torch
import torch.nn as nn
import copy
def compute_fisher(model, data_loader, loss_fn, n_samples=None):
"""计算 Fisher 信息矩阵的对角近似。
对每个参数累积 (梯度)^2,近似该参数对旧任务的重要性。
n_samples: 若给定,只取前 n_samples 个 batch(大数据集下加速)。
"""
model.eval()
fisher = {n: torch.zeros_like(p) for n, p in model.named_parameters()}
n = 0
for x, y in data_loader:
model.zero_grad()
loss = loss_fn(model(x), y)
loss.backward()
for name, p in model.named_parameters():
if p.grad is not None:
fisher[name] += p.grad.data ** 2
n += 1
if n_samples is not None and n >= n_samples:
break
# 取平均,得到经验 Fisher
for name in fisher:
fisher[name] /= max(n, 1)
return fisher
class EWCTrainer:
"""把 EWC 约束封装成一个可复用训练器。"""
def __init__(self, model, lam=400.0):
self.model = model
self.lam = lam
self.fisher = None # 旧任务的 Fisher 信息
self.old_params = None # 旧任务结束后的参数快照
def _reg_loss(self):
"""EWC 正则项:重要参数偏离旧值越多,惩罚越大。"""
if self.fisher is None:
return 0.0
reg = 0.0
for name, p in self.model.named_parameters():
reg += (self.fisher[name] * (p - self.old_params[name]) ** 2).sum()
return 0.5 * self.lam * reg
def after_task(self, data_loader, loss_fn):
"""一个任务训练结束后调用:冻结当前参数重要性。"""
self.fisher = compute_fisher(self.model, data_loader, loss_fn)
self.old_params = {n: p.detach().clone()
for n, p in self.model.named_parameters()}
def train_step(self, x, y, loss_fn, optimizer):
"""带 EWC 约束的单步训练。"""
self.model.train()
optimizer.zero_grad()
loss = loss_fn(self.model(x), y) + self._reg_loss()
loss.backward()
optimizer.step()
return loss.item()
# ---- 使用示例 ----
# model = MyModel()
# loss_fn = nn.CrossEntropyLoss()
# optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# ewc = EWCTrainer(model, lam=400.0)
#
# # 训练任务 1(无约束)
# for x, y in task1_loader:
# ewc.train_step(x, y, loss_fn, optimizer)
# ewc.after_task(task1_loader, loss_fn) # 记录任务 1 的重要性
#
# # 训练任务 2(自动加入 EWC 约束)
# for x, y in task2_loader:
# ewc.train_step(x, y, loss_fn, optimizer)
# ewc.after_task(task2_loader, loss_fn) # 累积任务 2 的重要性
import random
import torch
class ReservoirBuffer:
"""Reservoir Sampling 缓冲区:流式插入时保证每个样本被保留的概率相等。"""
def __init__(self, capacity):
self.capacity = capacity
self.data = []
self.seen = 0 # 已观察到的样本总数
def add(self, samples):
"""samples: list of (x, y) 元组。"""
for x, y in samples:
self.seen += 1
if len(self.data) < self.capacity:
self.data.append((x, y))
else:
# 以 capacity/seen 的概率随机替换一个旧样本
idx = random.randint(0, self.seen - 1)
if idx < self.capacity:
self.data[idx] = (x, y)
def sample(self, batch_size):
"""从缓冲区均匀采样一个 mini-batch。"""
batch = random.sample(self.data, min(batch_size, len(self.data)))
xs = torch.stack([b[0] for b in batch])
ys = torch.stack([b[1] for b in batch])
return xs, ys
def __len__(self):
return len(self.data)
# ---- 训练循环 ----
# buffer = ReservoirBuffer(capacity=2000)
# alpha = 0.5 # 新旧样本各半
#
# for x_new, y_new in new_task_loader: # 流式遍历新任务
# if len(buffer) > 0:
# x_old, y_old = buffer.sample(x_new.size(0))
# x = torch.cat([x_new, x_old])
# y = torch.cat([y_new, y_old])
# else:
# x, y = x_new, y_new
# loss = loss_fn(model(x), y)
# optimizer.zero_grad(); loss.backward(); optimizer.step()
#
# # 把当前 batch 的样本(detach 后)加入缓冲区
# buffer.add(list(zip(x_new.detach().cpu(),
# y_new.detach().cpu())))
def der_plus_loss(model, old_model, x_new, y_new, x_buf, y_buf, logits_buf,
alpha=0.5, beta=0.5):
"""DER++ 总损失 = 新任务损失 + α·旧样本重放损失 + β·logit 蒸馏损失。
x_buf, y_buf: 缓冲区样本与标签
logits_buf : 这些样本被加入缓冲区时旧模型的 logit("暗经验")
alpha, beta : 两项的权重超参
"""
# 1. 新任务 + 旧样本重放的分类损失
x = torch.cat([x_new, x_buf])
y = torch.cat([y_new, y_buf])
loss_cls = nn.functional.cross_entropy(model(x), y)
# 2. logit 蒸馏:让新模型在旧样本上的输出贴近旧模型当时的输出
with torch.no_grad():
old_logits = old_model(x_buf)
mse = nn.MSELoss()
loss_kd = mse(model(x_buf), logits_buf) # logits_buf 是历史快照
return loss_cls + alpha * loss_cls + beta * loss_kd
  • 能存数据就首选回放:只要合规允许保留少量旧样本(几十到几百张/类),Experience Replay 的效果与简洁性远胜其他方法。这是工业界最常用的做法。
  • 正则化法适合短任务序列:EWC 在 2-5 个任务上效果不错,但 10+ 任务后旧约束累积过多,新任务几乎学不动。长序列务必配合回放或架构法。
  • 缓冲区采样策略:ER 的效果取决于从缓冲区采样哪些样本。Reservoir sampling 实现简单且无偏;类平衡采样(class-balanced)对类别增量场景更友好;iCaRL 的 herding 选最具类代表性的样本。
  • 评估要看所有任务:只看新任务精度没意义——持续学习的核心指标是 平均精度(所有任务平均)、遗忘量(旧任务精度最大下降幅度)、前向迁移(未来任务的初始精度)。学术界常用一个 T×T 精度矩阵 R:R[i,j] 是学完任务 j 后在任务 i 上的精度,从中可推出上述所有指标。
  • 与预训练结合是当下主流:大预训练模型(如 CLIP、ViT)本身已有强大通用表示,在此基础上做持续学习,遗忘问题大幅缓解——因为新任务只是在通用表示上”微调最后一层”,大部分共享表示本就鲁棒。详见自监督学习与迁移学习。
  • 超参选择:EWC 的 λ、回放的 α、蒸馏的温度 T 都对效果影响巨大。经验上 λ 在 100–10000 之间扫,α≈0.5,T=2 是常见起点。务必在验证集(包含旧任务样本)上调参。

大语言模型(LLM)的崛起把持续学习推向了新阶段——让千亿参数模型持续吸收新知识而不重训,成为 2024–2025 年最受关注的方向。

与传统分类模型不同,LLM 的遗忘不是”识别能力崩盘”,而是知识干扰:用新语料微调后,模型在新领域表现提升,但通用问答、数学、代码能力暗中下降——业界称为 对齐税(Alignment Tax) 或 能力退化(Capability Degradation)。这催生了大量”如何安全更新 LLM 知识”的研究。

2. 参数高效微调(PEFT)+ 持续学习

Section titled “2. 参数高效微调(PEFT)+ 持续学习”

LoRA(Low-Rank Adaptation) 是当下最火的 PEFT 方法:不更新原始权重 W,而是学一个低秩增量 ΔW = B·A(A∈ℝ^(r×d),B∈ℝ^(d×r),秩 r≪d),只用极少参数(约原模型 0.1%)就能适配新任务。把它和持续学习结合,形成了架构法的新范式:

  • O-LoRA(Orthogonal LoRA):为每个新任务分配一个独立的 LoRA 适配器,并通过正交约束让不同任务的适配器在参数空间中相互正交(即新任务的更新方向 ⊥ 旧任务的更新方向),从数学上保证不干扰旧知识。这比 PackNet 优雅得多——参数几乎不增长,却实现了任务隔离。
  • InfLoRA:进一步用子空间正交让新适配器只在”对旧任务无害”的子空间内更新。
  • LoRA 回放:每个任务一个 LoRA,推理时用路由器(router)自动选择或加权融合多个 LoRA。

名词解释:正交(Orthogonal) 指两个向量的内积为零、互相”垂直”。若两个任务的参数更新方向正交,它们在梯度下降中互不”踩踏”——这是 O-LoRA 防遗忘的数学根基。

3. 模型编辑(Model Editing)与知识更新

Section titled “3. 模型编辑(Model Editing)与知识更新”

对于”把某个事实从旧的改成新的”这类精准知识更新(如”美国总统换人了”),全量微调既贵又容易引发连锁遗忘。模型编辑(Model Editing) 方法(ROME、MEMIT、Knowledge Editor)直接定位并修改 LLM 中存储该事实的少量权重,做到”外科手术式”的知识更新。MEMIT(Mass Editing Memory in a Transformer)能一次性编辑数千个事实而不显著影响其他能力,是 2023–2025 年知识更新的代表方法。

4. RAG:一种”外挂式”持续学习

Section titled “4. RAG:一种”外挂式”持续学习”

检索增强生成(Retrieval-Augmented Generation,RAG) 把新知识存在外部向量数据库里,推理时实时检索——本质上绕过了”把知识塞进权重”的遗忘问题。2025 年的趋势是 RAG + 在线学习:模型本身通过持续学习缓慢吸收通用知识,易变的事实交给 RAG 实时更新。两者互补:RAG 解决”时效性”,持续学习解决”能力进化”。详见大语言模型。

5. 持续预训练(Continual Pretraining)

Section titled “5. 持续预训练(Continual Pretraining)”

很多企业需要把开源 LLM(Llama、Qwen)在自己的领域语料上持续预训练——这本质上是一个超大规模的持续学习问题。2025 年的工程经验包括:数据混合(Data Mixing)(新领域语料里混入 10–30% 通用语料防止能力漂移)、学习率退火(LR Annealing)(新阶段用比预训练低一个数量级的学习率)、回放在 token 级别(保留旧语料的随机子集与新语料共训)。这些技巧把”持续学习”从研究概念变成了 LLM 工程的日常操作。

2025 年 AI Agent 的兴起让持续学习有了新载体:Agent 在长期任务执行中不断积累经验(工具调用、用户偏好、失败案例),这些经验需要被”记住”并指导未来决策。结合情景记忆(Episodic Memory,存历史交互)、向量数据库(存知识) 与 持续微调(更新模型能力) 的”三层记忆架构”,正在成为 Agent 系统的标准设计。

  • 推荐系统的用户兴趣漂移:用户的兴趣随时间变化(夏天买泳衣、冬天买羽绒服),推荐模型需要持续学习新兴趣又不能遗忘长期偏好。淘宝、抖音的推荐系统大量采用回放式持续学习。
  • 自动驾驶的地理适应:感知模型在不同城市、不同季节上线后要适应当地道路与天气(雪天、沙漠),同时不能忘记已学会的场景。Tesla 的数据引擎就是一套大规模持续学习系统。
  • 医疗影像的新疾病:新冠疫情爆发时,肺片诊断模型要快速学习 Covid 特征,又不能遗忘既有肺炎、肺结核的诊断能力——持续学习让模型增量学习新疾病而不退化。
  • 工业质检的产品迭代:工厂每隔几周上新品种,质检模型要增量学习新缺陷类型。正则化法或回放法能在不停线重训的前提下扩展能力。
  • 对话机器人的长期记忆:智能客服、陪伴 AI 需要在长期交互中记住用户偏好与新知识,又不能因新交互覆盖旧记忆——LLM 时代,这通过 RAG + 持续微调 + 模型编辑的组合来解决。
  • LLM 的领域适配与知识保鲜:金融、法律、医疗等行业 LLM 需要定期吸收新法规、新案例、新药信息。持续预训练 + LoRA 适配器 + 事实编辑的组合,是 2025 年企业 LLM 运维的标准范式。
类库语言说明
AvalanchePythonPyTorch 生态最完善的持续学习库,集成主流算法、基准与评测指标
MammothPython持续学习基准实现库,覆盖 ER/EWC/iCaRL/DER 等主流方法的统一实现
ContinualAI Lab (CoLLie)Python持续学习实验框架,提供任务流与多基准数据集
SequoiaPython持续学习研究平台,支持静态与在线设定下的任务序列实验
PermutedMNIST / Split-CIFAR数据持续学习经典基准:MNIST 的排列变体或 CIFAR-10/100 拆分多任务
PEFT (HuggingFace)PythonHuggingFace 的参数高效微调库,支持 LoRA/Adapter 等,是 LLM 持续学习的工程基础
EasyEditPythonLLM 知识编辑工具包,集成 ROME/MEMIT 等模型编辑算法
术语英文解释
持续学习Continual Learning / Lifelong Learning按顺序学习一系列任务且不遗忘旧任务的学习范式
灾难性遗忘Catastrophic Forgetting学习新任务后旧任务能力急剧下降的现象
稳定性-可塑性困境Stability-Plasticity Dilemma保持旧知识稳定 vs 快速学习新知识的内在矛盾
任务增量Task-Incremental Learning推理时已知任务 ID 的最简单持续学习设定
类别增量Class-Incremental Learning推理时无任务 ID、要区分所有学过类别的设定
域增量Domain-Incremental Learning输入分布漂移、输出空间不变的持续学习设定
回放Replay / Rehearsal混入旧任务样本共同训练以防遗忘的方法
Fisher 信息矩阵Fisher Information Matrix衡量参数变动对似然敏感度的矩阵,对角元近似参数重要性,EWC 用它构造正则化项
拉普拉斯近似Laplace Approximation用高斯分布近似后验分布的方法,EWC 借它把后验约束转化为二次惩罚项
知识蒸馏Knowledge Distillation让学生模型模仿老师模型输出分布的技术,LwF/DER 用它做正则化
温度Temperature (T)蒸馏中软化 softmax 输出的超参,T>1 暴露更多类间相似度信息
经验回放Experience Replay (ER)维护样本缓冲区,训练时混入旧样本的最简回放法
logitLogit分类器 softmax 之前的原始输出值,反映各类相对置信度
剪枝Pruning将不重要的权重置零以压缩模型的技术,PackNet 借它做参数隔离
注意力掩码Attention Mask逐元素乘到特征图上的门控矩阵,HAT 用它分配参数给不同任务
前向/后向迁移Forward / Backward Transfer未来任务的初始精度提升 / 旧任务精度的变化
Reservoir SamplingReservoir Sampling流式数据下的均匀抽样算法,保证每个样本被保留的概率相等
对齐税Alignment TaxLLM 微调(如 RLHF、领域适配)后通用能力下降的现象
LoRALow-Rank Adaptation用低秩矩阵增量 ΔW=BA 近似权重更新的 PEFT 方法,参数量约原模型 0.1%
O-LoRAOrthogonal LoRA为每任务分配正交 LoRA 适配器以实现任务隔离的持续学习方法
模型编辑Model Editing精准修改 LLM 中存储特定事实的少量权重的方法(ROME、MEMIT)
检索增强生成Retrieval-Augmented Generation (RAG)推理时从外部知识库实时检索,绕过把知识塞进权重导致的遗忘
持续预训练Continual Pretraining在已有预训练模型上用新领域语料继续训练的大规模持续学习场景
情景记忆Episodic MemoryAgent 中存储历史交互与案例的记忆机制,持续学习的 Agent 载体
  • EWC 开山作:Kirkpatrick et al., “Overcoming Catastrophic Forgetting in Neural Networks”, PNAS 2017. 提出基于 Fisher 信息的弹性权重巩固(EWC),持续学习领域最有影响力的论文之一。
  • iCaRL:Rebuffi et al., “iCaRL: Incremental Classifier and Representation Learning”, CVPR 2017. 结合回放与类原型更新,类别增量学习的经典基线。
  • DER & DER++:Buzzega et al., “Dark Experience for General Continual Learning”, NeurIPS 2020. 回放旧模型的 logit 输出(暗经验),简单且效果极强,至今是强 baseline。
  • LwF:Li & Hoiem, “Learning without Forgetting”, ECCV 2016. 用知识蒸馏做正则化的代表,无需保存旧数据。
  • 持续学习综述:De Lange et al., “A Continual Learning Survey: Defying Forgetting in Classification Tasks”, TPAMI 2021. 系统梳理三大流派、评测协议与基准,入门首选。
  • 架构法:Rusu et al., “Progressive Neural Networks”, arXiv 2016. 提出每任务新增网络列、冻结旧列的架构法,完全无遗忘的代表工作。
  • O-LoRA:Wang et al., “Bridging Task and Class Struggles in Continual Learning via Orthogonal Low-Rank Adaptation”, ICLR 2024. 把 LoRA 正交化用于持续学习,LLM 时代架构法的新标杆。
  • MEMIT:Meng et al., “Mass-Editing Memory in a Transformer”, ICLR 2023. 一次编辑数千事实的模型编辑方法,LLM 知识更新代表作。
  • LLM 持续学习综述:Wang et al., “A Comprehensive Survey of Continual Learning: Theory, Method and Application”, IEEE TPAMI 2024. 含 LLM 时代的持续学习专题章节。