什么是灾难性遗忘?大模型微调时如何缓解?
简化版
灾难性遗忘是模型学习新任务后,原有通用知识或能力明显退化的现象。可通过更小更新、混合通用或保留数据、PEFT、早停和多维回归评测缓解,但 PEFT 也不能保证完全不遗忘。
详细版
常见诱因包括目标数据过窄、重复模板过多、学习率过高、训练过久以及数据分布与基座差异过大。
缓解措施:
- 在训练前建立通用能力和安全基线;
- 混入经过授权的通用或回放数据;
- 降低学习率、步数和更新范围;
- 使用 LoRA 等 PEFT 限制参数变化;
- 保证目标数据多样,避免单一表达模式;
- 同时监控目标任务与原能力,按回归早停;
- 重要领域保留旧 Adapter 或基座,支持快速回滚。
目标任务变好而通用能力变差是一种权衡,不能只看微调数据上的 loss。
完整版教学
记忆钩子:遗忘要用“两张成绩单”判断——新领域涨分与原能力保留必须同时过线。
一、为什么会遗忘
神经网络的知识分布在共享参数中。新数据上的梯度会改变这些参数,当新目标与旧能力使用了重叠表示时,优化新任务可能破坏原来的解法。
微调数据量虽小,若分布狭窄或更新过强,也可能产生明显行为偏移。
二、如何测量
训练前保存基座在通用问答、推理、代码、安全和目标任务上的结果。训练中定期在同一套集合评估,并按任务切片比较,而不是只看平均分。
还要检查拒答率、回答长度和语言风格,因为遗忘可能先表现为行为变化。
三、数据混合
将一部分代表旧能力的数据与新任务数据混合,可给优化器提供保留信号。混合比例需要实验,过多会稀释新任务,过少又不足以约束退化。
回放数据同样要满足许可、隐私和质量要求。
四、PEFT 的作用与边界
冻结基座能减少直接修改,但 Adapter 输出仍会改变整网行为,因此 LoRA 可能缓解遗忘,却不能消除。rank、目标模块和缩放越激进,行为偏移仍可能很大。
例如同样是 LoRA,rank=4 可能只够学习少量格式偏好,rank=64 则可能更强地改写中间表示;如果目标数据又高度单一,Adapter 虽然没有改基座权重,最终输出仍会明显向新任务分布偏移。面试里要强调:PEFT 是“降低破坏面”,不是“免疫遗忘”。更稳的做法是把 PEFT 与回归评测、早停、旧能力样本混合一起使用。
五、其他控制方法
较小学习率、较少训练步数、正则化、参数约束和知识蒸馏都可用于保持旧能力。实际系统中,最可靠的手段仍是明确回归门槛、灰度上线和可回滚版本。
这些方法本质上都在约束“新任务梯度对旧能力表示的破坏”。学习率和步数控制更新幅度,正则化限制参数漂移,知识蒸馏让新模型继续模仿旧模型在通用样本上的行为。工程上还要把“退化多少必须停止”写成硬门槛,比如通用问答低于基座 2 个百分点、安全拒答误判升高 5% 就暂停发布,而不是训练完再凭感觉决定。
六、用双评测集识别遗忘
假设基座模型在通用集上得 72 分、领域集上得 48 分;微调后领域集升到 76 分,通用集却降到 55 分。只汇报“领域提升 28 分”会掩盖 17 分的能力回退。若混入 20% 通用回放数据后得到领域 73、通用 68,则形成了更可用的折中。
| 版本 | 领域集 | 通用集 | 判断 |
|---|---|---|---|
| 基座 | 48 | 72 | 领域能力不足 |
| 纯领域 SFT | 76 | 55 | 遗忘明显 |
| 领域 + 20% 回放 | 73 | 68 | 较均衡 |
领域增益 = 76 - 48 = +28
通用回退 = 55 - 72 = -17
遗忘可能来自数据分布过窄、学习率过大或训练轮数过多。缓解手段包括混入通用数据、降低更新强度、早停、PEFT 以及对关键能力加正则;最终要以领域收益与通用非劣门槛共同选 checkpoint。
七、常见误区与追问
- 误区:领域指标上涨就说明微调成功。 若通用能力、安全性或其他领域显著下降,模型可能只是用遗忘换取局部收益。
- 追问:为什么混入通用数据能缓解遗忘? 它在更新时持续提供原能力的梯度约束,防止参数只向窄领域分布移动。
- 追问:PEFT 是否不会遗忘? 仍会;低秩增量也能改变输出分布,只是更新受限,风险通常较易控制。
- 误区:降低学习率是唯一办法。 还可减少 epoch、早停、回放数据、正则约束或缩小目标模块,需针对根因组合。
- 追问:如何设置发布门槛? 目标领域达到最低收益,同时通用与安全集下降不得超过预先定义的非劣界限。
八、加强记忆
灾难性遗忘是“新课学会了,旧课退步了”;必须用领域集与通用集两张成绩单共同判断。缓解时一边用通用回放或正则保留旧能力,一边通过学习率、训练轮数和更新范围控制新任务改动。最终 checkpoint 既要达到领域收益,也要满足通用、安全能力的非劣门槛。