微调后"学会了新任务但变笨了"怎么办?
谁在问:有训练经验的面试官(二三面);算法工程岗;几乎无法靠背,追问两层即见底
口语化问法
- 微调之后模型在别的任务上变差了,你遇到过吗?怎么处理的?
- 什么是灾难性遗忘?为什么会发生?
- 你怎么知道微调有没有把模型训坏?
考察意图
这道题几乎无法靠背——追问两层就能看出有没有真跑过训练。面试官在看:
- 知不知道这是默认会发生的,而不是偶发的 bug。不做任何缓解措施,它一定发生,区别只在程度。
- 有没有检测手段。这是本题最重要的一环:"看得见"是工程能力,"知道有 rehearsal 这个词"只是知识。真跑过的人会先讲怎么监控,再讲怎么缓解。
- 知不知道 LoRA 只是缓解不是免疫。答"用 LoRA 就没这个问题"是典型的想当然。
参考答案
60 分答案(及格线)
灾难性遗忘是指模型在学习新任务时,把之前学到的通用能力丢掉了。表现为微调后在目标任务上表现很好,但在其他任务上明显退化。
原因是微调时只用新任务的数据,梯度更新会把原来的权重推离原来的位置。
常见的缓解方法:
- 用 LoRA 而不是全参微调,因为基座权重是冻结的
- 在训练数据里混入一部分通用数据
- 降低学习率、减少训练轮数
- 训练前后跑一遍通用基准测试对比
该说的招式都列到了,及格。但是一张招式清单,没有优先级、没有具体数值、也没有"怎么提前发现"的完整方法,追问会散。
90 分答案(有生产经验的回答)
先摆立场:遗忘是默认会发生的,不是异常。 你不做任何措施它一定发生,区别只在程度。所以我的做法分三段:怎么提前看见 → 怎么缓解 → 上线前最后一道闸。 顺序很重要,因为看不见的话,缓解做没做、做够没做够,你都不知道。
第一段:怎么提前看见(最重要的一段)
训练过程中必须跟踪一份保留的通用基准(MMLU、HellaSwag、常识 QA 之类),而不只看任务 loss。任务 loss 一路下降、通用能力同时塌掉,是最典型的失败形态——而只看任务指标的人永远看不见它。
我们的训练日志固定画三条曲线:任务 loss、任务指标、通用基准指标。第三条是抓遗忘的唯一手段。
一句可以直接用的判据:任务上好 10%、其他上差 25%,这笔交易基本不划算。
我们踩过一次典型的:工单分类微调,准确率 82% → 94%,评测集是从训练集随机切的 10%,看着完美。上线后模型把所有输入都当工单分类——客服问它"帮我润色这段话",它回一个类别名。MMLU 掉了 11 个点。同源切的评测集永远看不到这个,所以评测集里必须另加一份任务外的通用能力集。
第二段:怎么缓解(按性价比排序)
- 优先 LoRA 而不是全参。基座权重物理冻结,遗忘的物理基础少了一大半。上面那个故障就是全参 + 3 个 epoch,最容易触发的组合。
- 混入 5–20% 的通用数据做复演(rehearsal)。低于 5% 起不到正则作用,高于 20% 会明显拖慢新任务收敛。 有一句可以直接引用的经验:不带复演的全参微调,在研究之外几乎总是错的。
- 学习率降一个量级,epoch 控制在 1–3。超过 3 个 epoch 收益递减而遗忘陡增。
- 必要时冻结低层。这一条有机制支撑,见下。
机制侧(2026 年的研究结论,可作加分点):
- 注意力头是主要受害者:连续微调中约 15–23% 的注意力头被严重扰动,且低层受害最重。
- 冻结不同部件效果差异极大:冻结注意力权重可减少约 64% 的遗忘,冻结前馈层只减少约 23%。所以"冻结哪些层"不是随便选的——要冻就优先冻低层注意力。
- 中间层表示漂移最重:微调后中间层的 CKA 相似度下降 0.32–0.47。
- 梯度冲突有结构:Q/K 投影的梯度冲突率约 67%,V 投影只有约 34%。
第三段:上线前最后一道闸
拿一批完全不属于这个任务的请求打模型,看它是不是还正常说话。上面那个故障,只要有这一步就能拦住——成本不到半小时。
追问链
你怎么在训练过程中就发现遗忘,而不是等上线才发现?
期望训练中跟踪保留的通用基准(MMLU/HellaSwag/ 常识 QA),与任务loss同图;关键是评测集里要有一份「任务外」集合 —— 同源切的评测集看不到遗忘;上线前再加一道「任务外输入抽测」信号说得出「训练中跟踪通用基准」→ 基本可判定真跑过;只答「训练完对比一下」→ 被动,往往数据已经跑完才发现机制上到底发生了什么?为什么会忘?
期望新任务的梯度方向与保持旧能力所需的方向冲突(梯度冲突),权重被推离原来的位置;注意力头受损最重、低层为甚;中间层表示发生漂移。不对称才是关键 —— 冻结注意力 64% vs 冻结前馈 23%,且Q/K的梯度冲突率显著高于V信号给出「梯度冲突」这个层面的解释 → 理解了机制;只答「新数据覆盖了旧知识」→ 比喻层面,不算错但浅用 LoRA 是不是就不会遗忘了?
期望不是,只是少得多。 基座冻结确实去掉了遗忘的主要物理基础,但适配器仍在改变模型的整体输出行为 ——r开得很大、epoch很多、数据分布极窄时,LoRA 一样能把模型训得只会做一件事。所以 LoRA 也要测信号答「LoRA 就不会遗忘」→ 想当然,本题常见的错误;能说「少得多但不是零,还是要测」→ 做过复演数据从哪来?配多少?会不会拖慢新任务?
期望来源:开源通用指令数据集、模型自己在通用任务上的输出(自蒸馏)、历史上其他任务的训练数据。比例 5–20% —— 低于 5% 无效、高于 20% 明显拖慢新任务收敛。会拖慢,这是明确的交换:用新任务的收敛速度换通用能力的保留,值不值取决于这个模型还要不要承担别的职责信号给出 5–20% 这个区间并说出两端的后果 → 真配过;主动问「上线后还需不需要处理任务外请求」→ 判断力超出题面模型已上线,客服反馈「现在只会分类,别的都不会了」,业务不能停,你有一天,怎么办?
期望止血第一,根因第二:先切回微调前版本;没有旧版就在网关加路由(分类走微调模型、其余走基座),几小时可上、不用重训 → 再定位:任务外请求确认现象、通用基准量化损失、查全参 /epoch/ 复演 / 学习率 → 慢修(一周)改配置重训:换 LoRA、混 5–20% 复演、epoch降 1–2、学习率降档,挂基准监控 → 复盘落到流程:评测集补任务外集合信号第一反应是「重新训一版」→ 一周起步,救不了当天;把根因归到评测集同源切分而不是超参 → 归因深度最高的一档
评分要点
- 知道遗忘是默认会发生的,不是偶发 bug
- 知道训练中要跟踪保留的通用基准(本题核心)
- 知道评测集里要另加一份任务外集合
- 能给出缓解手段的优先级(LoRA > 复演 > 降 LR/控 epoch > 冻层)
- 知道复演比例 5–20% 及两端后果
- 知道 LoRA 只是缓解不是免疫
- (加分)能给出梯度冲突层面的机制解释
- (加分)知道冻结注意力比冻结前馈有效得多
- (加分)压力分支里能提出网关分流这类当天可上的止血方案