核心要点

  • 灾难性遗忘 = 学新任务时覆盖了通用/旧能力对应的权重

  • PEFT/LoRA 只更新少量参数,天然削弱遗忘

  • 混入通用或原能力数据做回放(replay)是最直接有效的手段

  • 学习率、降步数、冻结底层、正则到原权重、多任务联合训练都可缓解

标准回答

什么是灾难性遗忘
神经网络在学习新任务时,会用梯度更新去覆盖原有权重。如果新任务数据分布很窄,模型为了拟合它会大幅改写通用能力对应的参数,导致微调后「新任务变强、但通用对话/旧能力明显退化」,这就是灾难性遗忘。在 LLM 微调里典型表现是:教了它一个垂直领域后,它的常识、指令遵循、其他语言能力都变差了。

实用缓解策略

  1. PEFT / LoRA:冻结原始权重,只训练注入的低秩矩阵(LoRA)或少量适配参数。原始知识被「保护」在冻结的主干里,天然就遗忘得少,是当前最常用的第一选择。

  2. 数据回放(Replay):在微调数据里按一定比例混入通用指令数据或模型原本擅长任务的样本,让模型在学新任务的同时「复习」旧能力。比例常取新任务数据的 10%~50%,是性价比最高的手段之一。

  3. 降低学习率与训练步数:更小的学习率和更少的 epoch(通常 1~3)意味着对原权重的扰动更小,遗忘也更轻。过拟合和遗忘往往同时被「训练过头」放大。

  4. 冻结底层、只调高层:底层网络偏向通用语义表征,高层偏任务相关。冻结底层、只微调高层或顶部若干层,可在适应新任务的同时保留通用表征。

  5. 正则约束到原权重:用 L2 或 EWC(弹性权重巩固) 之类的正则项,惩罚参数偏离原始值,对越重要的参数约束越强,从而把旧知识「锚住」。

  6. 多任务联合训练而非串行:与其先学 A 再学 B(串行最容易遗忘 A),不如把多个任务的数据混在一起联合训练,让模型在同一优化过程中兼顾所有任务。

实践中通常是组合拳:LoRA + 数据回放 + 合理的学习率/步数,就能在多数场景下把遗忘控制到可接受范围。

常见误区

⚠️ 常见踩坑

以为只要任务相关数据足够多、训练得足够充分,模型就一定更好。恰恰相反,在窄分布数据上训练越久越狠,越容易把通用能力洗掉。判断是否遗忘不能只看新任务指标,必须同时用通用能力评测集回归检验。

追问

追问 1为什么 LoRA 比全参数微调更不容易遗忘?

因为 LoRA 冻结了原始预训练权重,只在旁路训练低秩增量矩阵,参数更新量很小且不直接覆盖主干。原有知识被保留在被冻结的权重里,推理时是「原能力 + 小增量」,所以对通用能力的破坏远小于会改写全部权重的全参数微调。此外需要时还能直接卸载 LoRA 恢复原模型。

追问 2数据回放的比例怎么定?混太多通用数据会怎样?

没有固定值,常见从新任务数据量的 10%~50% 起调。回放太少压不住遗忘,回放太多会稀释新任务信号,导致新任务学不充分、收敛变慢。实践上从一个中间比例起步,根据「新任务指标」和「通用能力回归指标」两条曲线来回调整,找到两者都可接受的平衡点。

追问 3EWC 的核心思想是什么?和简单 L2 正则有何区别?

EWC(弹性权重巩固)的思想是:旧任务里越重要的参数,越不该被改动。它用 Fisher 信息矩阵估计每个参数对旧任务的重要性,并据此施加强弱不同的二次惩罚,把重要参数「锚」在原值附近,不重要的则放开。普通 L2 对所有参数一视同仁地拉向原值,而 EWC 是带重要性权重的有选择约束,对旧能力的保护更精准。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习