基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

什么是灾难性遗忘(Catastrophic Forgetting)?在微调中如何缓解?

知识点图片

这是一个非常经典且在深度学习(尤其是大模型微调)中非常重要的问题。

什么是灾难性遗忘(Catastrophic Forgetting)?

定义:
灾难性遗忘是指神经网络在学习新任务(Task B)的过程中,突然且剧烈地忘记了之前已经学会的任务(Task A)的现象。

通俗类比:
想象一下,你本来精通中文(旧任务)。现在你去学法文(新任务),但在学会法文的同时,你突然发现自己完全不会说中文了,或者中文变得磕磕绊绊。这就是灾难性遗忘。

技术原理:
神经网络的知识存储在权重(Weights)中。

  1. 模型在预训练阶段(或旧任务上)找到了一组最优的权重配置。
  2. 在微调(Fine-tuning)阶段,为了适应新数据,模型使用反向传播更新这些权重。
  3. 如果没有约束,优化器会为了最小化新任务的Loss,大幅度修改权重,导致权重偏离了对旧任务最优的区域。结果就是模型在新任务上表现很好,但在旧任务(或通用能力)上性能崩塌。

在微调中如何缓解灾难性遗忘?

在实际工程(特别是LLM大模型微调)中,主要有以下几种主流策略来缓解这一问题:

1. 参数高效微调 (PEFT, Parameter-Efficient Fine-Tuning) —— 最推荐

这是目前大模型微调中最主流的方法。核心思想是:不要动原来的权重,只训练一小部分新加的参数。

  • LoRA (Low-Rank Adaptation):
    • 原理: 冻结预训练模型的所有主干参数,只在模型的某些层旁边添加旁路矩阵(低秩矩阵)进行训练。
    • 为什么能缓解: 因为原始模型的权重(承载通用知识的部分)被锁死了,根本没有发生变化,所以模型原本的能力(如语法、逻辑、常识)被完整保留下来,遗忘的可能性极低。
  • Adapter / Prefix Tuning / P-Tuning: 类似的逻辑,都是冻结主模型,只训练附加的小插件。

2. 数据混合 (Data Mixing / Replay)

如果你必须进行全量参数微调(Full Fine-tuning),或者即使使用了LoRA也想进一步保证通用性,可以使用数据混合。

  • 原理: 在训练新任务的数据集中,混入一部分旧任务的数据(或通用的预训练数据)。
  • 操作: 假设你要微调一个“医学问答模型”。不要只给模型看医学数据,要在训练集中混入10%-20%的通用语料(如维基百科、通用对话)。
  • 效果: 这迫使模型在学习医学知识的同时,必须保持对通用语言的理解能力,防止它变成一个只会说医学术语的“偏科生”。

3. 正则化方法 (Regularization)

通过在损失函数(Loss Function)中增加约束项,限制权重的变化幅度。

  • KL散度约束 (KL Divergence Penalty):
    • 场景: 常见于RLHF(基于人类反馈的强化学习)阶段。
    • 原理: 计算微调后的模型输出分布与原始模型输出分布之间的KL散度。如果微调后的模型偏离原始模型太远,Loss就会变大。这强迫模型在学习新策略时,不要丢掉原始模型的概率分布特征。
  • EWC (Elastic Weight Consolidation):
    • 原理: 计算每个参数对旧任务的重要性。对于重要的参数,在微调时给予很强的约束,不让它们怎么变;对于不重要的参数,允许大幅度更新。
    • 缺点: 计算成本较高,在大模型时代用得相对较少。

4. 学习率策略 (Learning Rate Scheduling)

这是一个简单但有效的辅助手段。

  • 降低学习率: 微调时的学习率通常要比预训练时小1-2个数量级。较小的步长意味着权重的变化比较温和,不容易直接跳出旧任务的最优解区域。
  • 层级学习率衰减 (Layer-wise Decay): 冻结底层(理解语言结构的层),或者给底层设置极小的学习率,只让顶层(负责具体任务输出的层)使用较大的学习率。

总结

如果你正在做大模型微调,缓解灾难性遗忘的最佳实践路径通常是:

  1. 首选: 使用 LoRAQ-LoRA(冻结主干,遗忘风险最小)。
  2. 次选: 如果必须全量微调,务必使用 数据混合(加入通用语料)。
  3. 辅助: 始终使用较小的 学习率Warmup 策略。
00:00
00:00