应对灾难性遗忘:EWC、SI 与记忆重放
FreeGuideOnline
最新
2026-06-23
应对灾难性遗忘:EWC、SI 与记忆重放
什么是灾难性遗忘?
在神经网络中,灾难性遗忘(Catastrophic Forgetting)指模型在学习新任务时,几乎完全忘记之前学过的任务的现象。这是持续学习(Continual Learning)面临的核心挑战。
- 发生原因:神经网络的权重是所有任务共享的。当模型用新数据更新参数时,会覆盖掉支撑旧任务的那些权重配置,导致旧任务性能断崖式下跌。
- 直观例子:先训练一个模型识别猫和狗,再让它学习识别鸟和鱼。训练完毕后,它可能再也分不清猫和狗了。
- 理想目标:我们希望模型在学习新知识的同时,不要破坏旧知识,即实现稳定性-可塑性平衡。
本教程将介绍三种主流的应对策略:弹性权重巩固(EWC)、突触智能(SI) 和记忆重放。
1. 弹性权重巩固 (Elastic Weight Consolidation, EWC)
核心思想
EWC 从贝叶斯持续学习的角度出发:旧任务的后验概率可以作为新任务学习的先验。它通过给每个参数施加一个“弹性”约束,限制重要参数不要偏离旧任务的最优值太远。
- 所谓“重要性”,由**费舍尔信息矩阵(Fisher Information Matrix)**的对角线元素来度量。
- 费舍尔信息越大,说明该参数对旧任务损失函数的曲率影响越大,改变它会严重损害旧任务性能,因此“弹性”更强。
算法流程
- 任务 A 训练完成后:计算每个参数 ( \theta_i ) 的费舍尔信息值 ( F_i )(通常用梯度平方的期望近似)。
- 新任务 B 训练时:在原损失函数 ( L_B(\theta) ) 上添加正则化项: [ L(\theta) = L_B(\theta) + \frac{\lambda}{2} \sum_i F_i (\theta_i - \theta_{A,i}^)^2 ] 其中,( \theta_A^ ) 是任务 A 的最优参数,( \lambda ) 控制正则化强度。
- 直觉:对于费舍尔信息大的参数,即使稍微移动也会被严重惩罚,网络只能利用那些“不重要”的参数来学习新任务,从而保护了旧知识。
优缺点与实践
- 优点:无需存储任何旧数据,仅需保存费舍尔信息向量和旧参数,内存开销小。
- 缺点:费舍尔信息的对角近似忽略了参数间的协方差;( \lambda ) 调节依赖经验;顺序处理多任务时,惩罚项会累积,可能导致模型能力饱和。
- 改进:Online EWC 将所有旧任务的费舍尔信息加权求和,用一个滑动累加项代替分别存储,适合更长的任务序列。
2. 突触智能 (Synaptic Intelligence, SI)
核心思想
SI 同样是一种正则化方法,但对参数重要性的定义与 EWC 不同。它不依赖于二阶导数,而是通过在线估计每个参数对总损失减少的贡献来确定其重要性。
- 在每个任务的学习过程中,持续追踪参数更新轨迹和损失下降的关系。一个参数如果它的更新显著降低了当前任务的损失,那么它对当前任务就重要,后续任务中就应该保护该参数不大幅改变。
算法流程
- 为每个参数 ( \theta_i ) 初始化重要性 ( \omega_i = 0 ),并维护一个“运行卡尺” ( \text{run_sum}_i )。
- 在任务训练期间,每更新一步(一个 mini-batch)就计算:
- 参数变化量 ( \Delta\theta_i )
- 损失对参数的负梯度 ( -g_i )(代表该参数更新所带来的损失下降贡献)
- 更新累加器:( \text{run_sum}_i \mathrel{+}= \Delta\theta_i \cdot (-g_i) )
- 任务结束时,将该任务的最终重要性设为 ( \omega_i = \frac{\text{run_sum}_i}{(\Delta\theta_i^{\text{total}})^2 + \epsilon} ),其中 ( \Delta\theta_i^{\text{total}} ) 是整个任务中参数的总变化量。
- 后续任务训练时,加入正则项: [ L(\theta) = L_{\text{new}}(\theta) + c \sum_i \omega_i (\theta_i - \theta_i^{\text{old}})^2 ] ( \theta_i^{\text{old}} ) 是上一个任务结束后的参数值,( c ) 为强度系数。
与 EWC 的对比
| 特性 | EWC | SI |
|---|---|---|
| 重要性度量 | 费舍尔信息(二阶导数) | 损失下降贡献(一阶在线估计) |
| 计算开销 | 需额外计算梯度平方 / Hessian 对角 | 极低,与普通训练几乎相同 |
| 存储需求 | 存储费舍尔信息 + 旧参数 | 存储重要性 + 旧参数 |
| 理论假设 | 参数最优点附近为二次近似 | 沿真实学习轨迹衡量重要性 |
SI 的突出优势是实现特别简单,几乎不需要改动优化器,非常适合资源受限的在线学习场景。
3. 记忆重放 (Memory Replay)
核心思想
最直接缓解遗忘的方法:保留一部分旧任务的数据,在新任务训练时混合回放。模型在每一个训练批次中既看到新样本,也看到旧样本,相当于“伪联合训练”。
主要实现方式
a. 经验重放 (Experience Replay)
- 策略:为每个旧任务保存一个有代表性的样本子集(例如 100 张图片)。
- 训练:构建 mini-batch 时,一部分来自新任务,一部分从记忆缓存中随机抽取。
- 样本选择:随机采样往往不够理想,更好的方法是选择类中心(herding)、边界样本或预测不确定性高的样本,以最大化回放的信息量。
b. 生成重放 (Generative Replay)
- 策略:训练一个生成模型(VAE 或 GAN)来学习旧数据的分布。
- 训练:在新任务上训练时,用生成模型产生虚拟旧样本,与真实新样本混合。
- 优势:不直接存储原始数据,有助于缓解隐私或存储限制的问题。
- 挑战:生成模型本身可能遗忘,或生成质量不够高,需要联合训练生成器和求解器。
优缺点
- 优点:效果非常强劲,通常接近在所有数据上联合训练的上限。
- 缺点:必须维护记忆缓冲区,占用存储空间;对于敏感数据(如医疗记录)存在隐私风险;缓冲区大小固定时,需要设计淘汰策略。
方法比较与选择指南
| 方法 | 是否存储数据 | 额外计算量 | 存储量 | 性能表现 | 推荐场景 |
|---|---|---|---|---|---|
| EWC | 否 | 中等(计算费舍尔信息) | 一阶矩向量 | 中等,适合清晰任务边界 | 无法留存数据,有明确任务序列 |
| SI | 否 | 极低 | 重要性向量 | 弱于 EWC,但比无约束强 | 极度轻量,设备算力有限 |
| 记忆重放 | 是(原始或生成) | 低~中 | 样本缓存 | 最强,接近联合训练 | 允许少量数据缓存,追求高性能 |
组合使用
这三种方法不是互斥的,很多现代持续学习系统会同时采用:
- 重放 + 正则化:在回放旧样本的同时,使用 EWC/SI 约束重要参数,两重保险。
- 伪重放 + EWC:用生成模型回放,同时对 generators 自身也施加 EWC 防止遗忘如何生成旧数据。
实际应用注意事项
- 任务标识:EWC 和 SI 都需要在任务切换时明确分界。对于无明确任务边界的流式数据,需在线检测分布变化或使用变体方法(如 Online EWC)。
- 超参数调节:正则化系数 ( \lambda ) 或 ( c ) 对效果影响很大,一般通过在新任务训练期间监控旧任务的验证集(如果可访问少量旧数据)来选择。
- 记忆管理:若使用重放,缓冲区充满后需淘汰旧样本。可结合不确定性、代表性等指标进行智能淘汰。
- 评估指标:单纯看最终任务精度不够,应报告平均遗忘率、向后迁移以及整体精度。
总结
灾难性遗忘根植于神经网络参数共享的本质。三种主流应对方法分别从不同角度入手:
- EWC 利用费舍尔信息矩阵对重要权重施加强约束;
- SI 通过全程追踪参数贡献实现轻量级重要性估计;
- 记忆重放 直接保存或生成旧数据,维持多元经验分布。
选择何种方法取决于实际约束:能否存取旧数据、计算和存储预算、任务是否具有清晰边界。理解这些方法的原理和取舍,能帮助你在智能系统设计中更好地实现终身学习能力。