如何区分微调中的灾难性遗忘、领域过拟合与行为漂移?
简化版
三者看不同参照:灾难性遗忘是微调后旧能力相对基座下降;领域过拟合是训练集继续变好、领域留出集却变差;行为漂移则是正确率未必下降,但格式、拒答、长度或工具选择发生不期望变化。诊断时必须同时保留基座、领域训练/留出、通用回归与行为指标,不能只看一条验证 Loss。
详细版
用二维对照最容易定位:比较训练前后,也比较训练分布与未见分布。
| 现象 | 领域训练集 | 领域留出集 | 旧能力集 | 首要判断 |
|---|---|---|---|---|
| 都提高,旧能力稳定 | ↑ | ↑ | ≈ | 有效适配 |
| 训练升、领域留出降 | ↑ | ↓ | 不确定 | 领域过拟合 |
| 领域留出升、旧能力降 | ↑ | ↑ | ↓ | 灾难性遗忘 |
| 准确率稳定、拒答/格式突变 | ≈ | ≈ | ≈ | 行为漂移 |
例如基座在领域留出集为 52、通用集为 78;微调后分别变成 74 和 60,说明领域泛化有效但旧能力回退 18 分。若训练集从 70 升到 96、领域留出却从 52 降到 47,则主要问题是过拟合。两种故障可以同时发生,因此要按 Checkpoint 画联合曲线并检查数据泄漏。
诊断口诀:过拟合看“训练对留出”,遗忘看“微调后对基座”,行为漂移看“分数之外的系统行为”。
完整版教学
诊断口诀:过拟合看“训练对留出”,遗忘看“微调后对基座”,行为漂移看“分数之外的系统行为”。
一、三个概念为什么容易混淆
它们都可能表现为“微调后某些回答变差”,但参照系不同。过拟合讨论新任务内部的泛化差距,遗忘讨论旧任务相对基座的退化,行为漂移讨论产品契约是否改变。
如果不先固定参照,团队很容易把通用能力下降误称为领域过拟合,或把格式变化漏出准确率报表。正确归因决定后续该改数据切分、更新强度,还是 Chat Template 与解码配置。
二、用四组数据建立最小诊断矩阵
至少准备领域训练集、同分布领域留出集、未见实体/时间/模板的领域外推集,以及基座通用回归集。训练集只说明拟合程度,同分布留出测普通泛化,外推集检查是否记模板,通用集测旧能力。
base model -> domain-valid + domain-OOD + general + safety/tool
tuned model -> domain-valid + domain-OOD + general + safety/tool
差值按同一样本配对计算
所有集合都要与训练数据做模板簇级去重。若留出题只是换了几个实体,虚高分数会把记忆误判为领域泛化。
三、如何从曲线识别领域过拟合
领域过拟合常表现为训练 Loss 持续下降,但领域留出 Loss 触底后回升,或训练准确率继续上涨而留出准确率下降。应按 Token 或优化步对齐 Checkpoint,避免只比较训练结束的两个点。
假设第 1、2、3 个 Epoch 的训练准确率为 80%、91%、97%,领域留出为 72%、78%、73%。第二个 Epoch 更可能是合适 Checkpoint;第三个 Epoch 的训练收益伴随 5 个百分点留出回退,是典型过拟合信号。
四、如何证明是灾难性遗忘
遗忘必须相对微调前基座测量,并使用相同 Prompt、模板、解码配置和评分器。否则差异可能来自推理协议,不是参数更新。
retention(task) = score_tuned(task) / score_base(task)
regression_pp = score_tuned(task) - score_base(task)
基座数学 80、微调后 76,回退是 4 个百分点,保留率为 95%;该变化是否可接受取决于置信区间和预设非劣界限。安全与越权能力不能和普通知识题共享一个平均容忍度。
五、行为漂移为何不能只看准确率
模型可能仍答对,却变得异常冗长、全用领域术语、频繁拒答或更积极调用工具。这些变化会影响延迟、成本、安全与用户体验,但 Exact Match 可能完全看不出来。
| 行为指标 | 漂移示例 | 风险 |
|---|---|---|
| 输出长度 | P95 翻倍 | 成本与延迟上升 |
| 格式合法率 | JSON 99%→92% | 下游解析失败 |
| 过拒率 | 4%→15% | 正常用户受损 |
| 工具调用率 | 10%→28% | 副作用面扩大 |
因此回归集还要保存结构断言、工具 Trace、拒答标签和长度分布,而不只是答案分数。
六、怎样排除数据与评测伪影
先核对数据泄漏、标签错误、Tokenizer/Chat Template、最大长度和评分器版本。模板变化可能让答案被 Mask 掉,截断变化可能使长题突然失败,Judge 更新也会制造假回归。
再用同一 Checkpoint 复跑旧推理栈,并对失败样本人工配对复核。若旧栈正常、新栈失败,优先查服务兼容;若参数更新后的多个 Checkpoint 都在同一旧能力切片下降,才更支持遗忘判断。
七、常见误区与追问
- 误区:训练 Loss 降低就说明微调成功。 它只说明训练目标拟合更好,不能证明领域泛化或旧能力保留。
- 误区:领域留出集上涨就不存在遗忘。 新任务可泛化,同时数学、多语言或安全能力仍可能下降。
- 误区:所有退化都叫灾难性遗忘。 模板、截断、评分器和服务配置也会制造行为回归。
- 误区:总分稳定就没有行为漂移。 不同切片可互相抵消,格式、拒答和工具行为也可能恶化。
- 误区:固定 Seed 就能排除评测噪声。 服务版本、算子和 Judge 仍会变化,应做配对统计与人工复核。
- 追问:两种故障能同时出现吗? 能;窄数据训练过久可同时造成领域留出下降与旧能力回退。
- 追问:最小诊断证据是什么? 同协议下的基座/微调配对结果、领域训练/留出曲线、通用与行为切片。
八、加强记忆
用“三个参照”定位:训练对留出判断领域过拟合,微调模型对基座判断灾难性遗忘,正确率之外的格式、拒答、长度与工具 Trace 判断行为漂移。四组数据守住证据链:领域训练、领域留出、领域外推、旧能力回归;再排除模板、截断、评分器和服务版本伪影。只有归因清楚,才能选择早停、数据去重、Replay、降低更新强度或修复部署协议。