在神经网络依次学习多个任务的场景下,模型参数在拟合新数据时会剧烈偏移,导致此前已掌握的任务精度断崖式下跌,这就是典型的灾难性遗忘。为了让人造系统具备像生物那样持续积累经验的能力,研究者提出了多种正则化与记忆回放机制。本文从原理、实现与对比三个层面,系统剖析弹性权重巩固、学习而不遗忘以及梯度记忆这三种主流持续学习方法。

弹性权重巩固(EWC)的贝叶斯视角与实现
EWC的核心思想来源于贝叶斯推断。当我们顺序训练任务时,旧任务的后验分布可以作为新任务先验的约束。具体而言,EWC在损失函数中加入一个二次惩罚项,对那些在旧任务上梯度变化敏感、费雪信息量大的权重施加更强保护,迫使它们在后续训练中尽量不被大幅修改。这种做法等价于在参数空间里为旧任务的重要维度筑起弹性围墙。
费雪信息矩阵(FIM)的对角线元素反映了对数似然对参数的曲率,值越大说明该参数对旧任务输出越关键。实际计算时,我们通常在旧任务数据上累积梯度的平方来近似FIM对角线。下面给出PyTorch风格的简化实现,展示如何在新任务损失上叠加EWC项:
import torch
def ewc_loss(model, fisher_dict, opt_param_dict, lambda_ewc=1000):
loss = 0
for name, param in model.named_parameters():
if name in fisher_dict:
# 用旧参数中心和费雪值构造L2惩罚
diff = param - opt_param_dict[name]
loss += (fisher_dict[name] * diff.pow(2)).sum()
return lambda_ewc * loss
# 假设fisher与old_params已通过旧任务计算并保存
# total_loss = task_loss + ewc_loss(net, fisher, old_params)
从优点看,EWC不需要存储原始样本,仅保留参数统计量,隐私性好且内存占用低。但它对任务数量增多时的参数重要性叠加估计不够精确,当任务序列很长时,不同任务的重要性冲突会让围墙互相挤压,最终限制新任务学习能力。此外,FIM的对角线近似忽略了参数间相关性,在复杂模型中可能高估或低估真实约束。
学习而不遗忘(LwF)的知识蒸馏机制
LwF采取另一种思路:把旧模型当作教师,新模型在学生角色中同时适配新任务,并在旧任务输入上模仿教师输出。它不需要任何旧数据回放,而是在新任务训练时,将旧样本(或新任务中带有旧任务特征的混合输入)前向传播给冻结的旧模型,得到软标签,再让学生模型用蒸馏损失逼近该分布。这样新知识写入的同时,旧任务的决策边界被隐式保留。
蒸馏温度与权重平衡是LwF的两个关键超参。温度过高会让概率分布过于平滑,丢失判别细节;过低则接近硬标签,遗忘抑制变弱。下面代码展示如何在多任务头上组织LwF损失:
import torch.nn.functional as F
def lwf_loss(new_out, old_out, task_out, target, alpha=1.0, beta=1.0, T=2.0):
# old_out为旧模型在同样输入下的输出,new_out包含新旧任务头
distill = F.kl_div(
F.log_softmax(new_out[:, :old_out.size(1)] / T, dim=1),
F.softmax(old_out / T, dim=1),
reduction='batchmean') * (T * T)
classify = F.cross_entropy(new_out[:, old_out.size(1):], target)
return alpha * distill + beta * classify
# 训练时同时计算两部分的加权和为最终损失
LwF的突出优势是实现轻量,不依赖外部记忆库,适合边缘设备。然而它高度依赖新旧任务输入分布的重叠程度,如果新任务数据与旧任务域差异极大,教师提供的软标签参考价值下降,遗忘仍会发生。另外,旧模型一旦固定,其自身偏差也被原样传承,无法在持续学习中自我纠错。
梯度记忆(GEM)的约束优化与权衡
GEM从梯度空间入手解决遗忘。它维护一个小规模的历史样本集,在每个训练步计算旧任务梯度作为参考方向。当新任务梯度可能损害旧任务性能时,GEM将新梯度投影到与所有旧梯度均成锐角的解空间,确保参数更新不会增加任何旧任务的损失。这种显式约束比隐式正则更直接可控。
投影操作需要求解带线性约束的二次规划,实践中常用近似算法降低开销。以下示例说明如何借助历史梯度修正当前梯度:
import torch
def gem_grad_correction(current_grad, old_grads, margin=0.5):
# current_grad为当前任务梯度向量,old_grads为旧任务梯度列表
for og in old_grads:
if torch.dot(current_grad, og) < 0:
# 简单投影:减去违背旧梯度的分量
proj = og * (torch.dot(current_grad, og) / (og.norm() ** 2))
current_grad = current_grad - proj
return current_grad
# 在优化器step前替换param.grad为修正后的值
GEM在多个基准上遗忘控制表现最强,尤其任务差异大时仍稳健。代价是必须保存部分历史样本,带来存储与隐私顾虑;同时投影计算拖慢训练,任务数上升后约束冲突也会增多。与EWC、LwF相比,GEM更像硬性护栏,而前两者是软性引导,工程选型应结合数据可留存性与实时性要求综合判断。
三种方法的适用场景与组合思路
在资源受限且严禁留存数据的物联网场景,EWC与LwF更合适,其中LwF对输入域连续的问题更稳。若服务端拥有合法缓存的旧任务样本,GEM能显著压低遗忘率。近年研究也尝试将EWC的正则项与GEM的梯度投影串联,用正则做粗粒度保护、用投影做细粒度纠偏,在长任务序列里取得更好平衡。
需要强调的是,持续学习没有银弹。任务相似度、标注成本、设备算力都会改变方法排名。建议用户在自身数据集上以遗忘率与平均精度为指标做消融,再决定单一或混合方案,避免直接套用论文设定导致落地偏差。
Continual_Learningcatastrophic_forgettingEWC修改时间:2026-08-16 23:02:33