灾难性遗忘
灾难性遗忘 (Catastrophic Forgetting)
一句话定义
神经网络在学习新任务时,急剧丢失旧任务能力的现象——其根源是反向传播按”当前任务 loss”覆盖式更新权重,不会区分”这权重承载旧知识,请别动”。LLM 场景中表现为:SFT/微调注入新领域时,预训练学到的通用能力(推理、多语言、安全对齐)发生退化。
物理机制 — 为什么会”灾难性”
经典 MLP 的所有权重对所有任务几乎完全共享(distributed representation)。新任务的梯度下降会沿当前 loss 最陡方向走,旧任务对应的 loss “山谷”被沿途填平——这与生物大脑通过结构隔离(不同皮层/海马-皮质双系统)形成对比。
LLM 时代有所缓解但远未消失:
- 预训练 scale 大:Llama-3 训过 15T token,已有的能力深度植入
- 后训练数据 scale 小:通常 10K-1M 条 SFT 数据,覆盖面有限
- 不均衡更新:少量任务 + 全参数微调,等于让模型”过分聚焦于新数据特征”,旧能力被压制(不是删除,但表层无法激活)
主要表现 — LLM 工业实践中能看到什么
| 现象 | 出现场景 | 例子 |
|---|---|---|
| 通用能力退化 | 全量 SFT 注入垂直领域 | 医学 SFT 后,模型不会做数学题了 |
| 安全对齐崩塌 | DPO/RLHF 后再 SFT | 模型重新输出有害内容 |
| 多语言能力丢失 | 单语种数据微调 | 中文 SFT 后英文回答变机翻 |
| 格式锁死 | 单一指令模板训练 | 模型只会按 ChatML 输出,不响应 system prompt |
| 推理链断裂 | 短回答数据微调 reasoning model | o1 风格模型变成秒答 + 答案错 |
| 拒答倾向偏移 | 大量 helpful 数据 | 安全边界被推高,拒答率下降 |
工业界的缓解技术谱系
1. 架构层 — 部分参数冻结
- LoRA / PEFT:只训 adapter,主体权重冻结 → 遗忘风险最小
- Adapter-based:插入小 MLP 模块;模块化、可拔插
- 代价:表达力上限低于全参微调
2. 数据层 — Replay / Rehearsal
- Generative Replay:把预训练数据 / 旧任务数据按比例(10%-30%)混入新任务数据
- DPO 反例混入:训新任务时混入”应保留旧能力”的偏好对
- Rejection Sampling Fine-tuning:用旧 model 生成响应,作为蒸馏锚点
- Llama-3 / Qwen 后训练标配:每轮 SFT 都混入历史阶段的通用数据
3. 优化层 — Regularization
- EWC (Elastic Weight Consolidation):用 Fisher 信息矩阵估算”哪些权重对旧任务重要”,给这些权重加正则项防止变化
- L2-SP:限制权重与初始点的 L2 距离
- MAS (Memory Aware Synapses):在线估算权重重要性
- 学术热闹工业用得少:实现复杂、收益边际、对 LLM 大规模训练不够 scalable
4. 训练策略层 — Curriculum
- 小学习率:5e-6 vs 全量预训练的 1e-4,慢动以减少漂移
- 少 epoch:1-3 epoch 而非 10+
- 逐步解冻:先训 LoRA,再小幅放开高层,再放开全部
- 任务调度:每个 mini-batch 混不同任务而非按 batch 切
5. 评测层 — Holdout 监控
建立回归测试集覆盖旧能力(MMLU / GSM8K / HumanEval / 安全测试),每个 checkpoint 都跑,看到回归立即回滚或降权重 step。
SFT vs RAG vs Prompt — 决策矩阵
| 路径 | 改变权重 | 遗忘风险 | 知识更新成本 | 适用场景 |
|---|---|---|---|---|
| Prompt / Few-shot | ❌ | 无 | 即时 | 探索、零成本验证 |
| RAG | ❌ | 无 | 索引重建 | 静态领域知识、合规可溯源 |
| LoRA / PEFT | 部分 | 低 | 小时级 | 风格、轻度行为调整 |
| 全量 SFT | 全部 | 高 | 天级 | 行为模式根本性改变 |
| Continual Pre-training | 全部 | 极高 | 周级 | 大规模注入新语料(如代码、新语言) |
铁律:知识 → RAG / 长上下文;能力 → SFT;人格 / 风格 → DPO / Constitutional。混用最糟。
Continual Learning 学术研究的边界
学术界把”在不忘旧任务的前提下持续学新任务”称为 Continual Learning (CL),是 ML 长青难题。主要范式:
- Replay-based:核心实用方向
- Architecture-based(Progressive Networks / PackNet):每个任务加专属子网络;扩展性差
- Regularization-based(EWC 类):理论优雅、工业落地有限
- Meta-learning-based(MAML 类):学”如何学”
工业现实:LLM 后训练的”持续学习”基本退化为”replay + 小学习率 + holdout 监控”——三件套足够覆盖 80% 场景。EWC 等精细方法在生产线上很少跑。
一些反直觉的发现
- LoRA 不是完全免疫:LoRA rank 高 + 学习率猛 + 全 task 数据,照样遗忘——只是程度比全量低
- 更大模型遗忘更少:参数冗余度高,新任务可以走”少数权重”路径,旧能力压力小(这部分支持 LoRA 在大模型上效果好)
- 多任务联合训练 > 顺序训练:能避开遗忘,但需要预收齐数据;现实中数据是流式来的
- 遗忘可能”伪装”:模型不是真的”忘了”,是被压制——重新给少量 hint 就能恢复(rapid recovery)。这意味着遗忘的衡量需要谨慎设计 probe
与 Rick 关切的连接点
- 产品决策:客户问”能不能用我们数据训一个专属模型”——优先 RAG,让客户理解”训不是免费的,会损失通用能力”
- Agent 设计:长程任务里的 in-context learning 不会引发遗忘,但 context 满了之后”压缩 / 总结”环节会引入类似效果(Context Engineering 痛点)
- 多模型路由:用专门微调的小模型处理领域任务(不动主模型),是规避遗忘的工程策略——见 多模型分层
- 评估体系:永远保留一份”通用能力 holdout”作为微调后回归测试,是产品质量底线
相关章节与节点
- c04 SFT 与 PEFT
- c09 RAG vs 微调
- c15 后训练数据策略
- SFT / LoRA / RLHF / RAG
- 多模型分层 — 用架构隔离规避遗忘