微调后"学会了新任务但变笨了"怎么办?

Q4-11微调副作用常见灾难性遗忘复演rehearsalLoRA通用基准训练监控

谁在问:有训练经验的面试官(二三面);算法工程岗;几乎无法靠背,追问两层即见底

口语化问法

  • 微调之后模型在别的任务上变差了,你遇到过吗?怎么处理的?
  • 什么是灾难性遗忘?为什么会发生?
  • 你怎么知道微调有没有把模型训坏?

考察意图

这道题几乎无法靠背——追问两层就能看出有没有真跑过训练。面试官在看:

  1. 知不知道这是默认会发生的,而不是偶发的 bug。不做任何缓解措施,它一定发生,区别只在程度。
  2. 有没有检测手段。这是本题最重要的一环:"看得见"是工程能力,"知道有 rehearsal 这个词"只是知识。真跑过的人会先讲怎么监控,再讲怎么缓解。
  3. 知不知道 LoRA 只是缓解不是免疫。答"用 LoRA 就没这个问题"是典型的想当然。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

灾难性遗忘是指模型在学习新任务时,把之前学到的通用能力丢掉了。表现为微调后在目标任务上表现很好,但在其他任务上明显退化。

原因是微调时只用新任务的数据,梯度更新会把原来的权重推离原来的位置。

常见的缓解方法:

  • 用 LoRA 而不是全参微调,因为基座权重是冻结的
  • 在训练数据里混入一部分通用数据
  • 降低学习率、减少训练轮数
  • 训练前后跑一遍通用基准测试对比

该说的招式都列到了,及格。但是一张招式清单,没有优先级、没有具体数值、也没有"怎么提前发现"的完整方法,追问会散。

90

90 分答案(有生产经验的回答)

先摆立场:遗忘是默认会发生的,不是异常。 你不做任何措施它一定发生,区别只在程度。所以我的做法分三段:怎么提前看见 → 怎么缓解 → 上线前最后一道闸。 顺序很重要,因为看不见的话,缓解做没做、做够没做够,你都不知道。

第一段:怎么提前看见(最重要的一段)

训练过程中必须跟踪一份保留的通用基准(MMLU、HellaSwag、常识 QA 之类),而不只看任务 loss。任务 loss 一路下降、通用能力同时塌掉,是最典型的失败形态——而只看任务指标的人永远看不见它。

我们的训练日志固定画三条曲线:任务 loss、任务指标、通用基准指标。第三条是抓遗忘的唯一手段。

一句可以直接用的判据:任务上好 10%、其他上差 25%,这笔交易基本不划算。

我们踩过一次典型的:工单分类微调,准确率 82% → 94%,评测集是从训练集随机切的 10%,看着完美。上线后模型把所有输入都当工单分类——客服问它"帮我润色这段话",它回一个类别名。MMLU 掉了 11 个点。同源切的评测集永远看不到这个,所以评测集里必须另加一份任务外的通用能力集。

第二段:怎么缓解(按性价比排序)

  1. 优先 LoRA 而不是全参。基座权重物理冻结,遗忘的物理基础少了一大半。上面那个故障就是全参 + 3 个 epoch,最容易触发的组合。
  2. 混入 5–20% 的通用数据做复演(rehearsal)。低于 5% 起不到正则作用,高于 20% 会明显拖慢新任务收敛。 有一句可以直接引用的经验:不带复演的全参微调,在研究之外几乎总是错的。
  3. 学习率降一个量级,epoch 控制在 1–3。超过 3 个 epoch 收益递减而遗忘陡增。
  4. 必要时冻结低层。这一条有机制支撑,见下。

机制侧(2026 年的研究结论,可作加分点):

  • 注意力头是主要受害者:连续微调中约 15–23% 的注意力头被严重扰动,且低层受害最重
  • 冻结不同部件效果差异极大:冻结注意力权重可减少约 64% 的遗忘,冻结前馈层只减少约 23%。所以"冻结哪些层"不是随便选的——要冻就优先冻低层注意力
  • 中间层表示漂移最重:微调后中间层的 CKA 相似度下降 0.32–0.47。
  • 梯度冲突有结构:Q/K 投影的梯度冲突率约 67%,V 投影只有约 34%。

第三段:上线前最后一道闸

拿一批完全不属于这个任务的请求打模型,看它是不是还正常说话。上面那个故障,只要有这一步就能拦住——成本不到半小时。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
从「怎么发现」问起,一路问到「已经上线了,你有一天」

  1. 你怎么在训练过程中就发现遗忘,而不是等上线才发现?

    期望训练中跟踪保留的通用基准(MMLU / HellaSwag / 常识 QA),与任务 loss 同图;关键是评测集里要有一份「任务外」集合 —— 同源切的评测集看不到遗忘;上线前再加一道「任务外输入抽测」
    信号说得出「训练中跟踪通用基准」→ 基本可判定真跑过;只答「训练完对比一下」→ 被动,往往数据已经跑完才发现
  2. 机制上到底发生了什么?为什么会忘?

    期望新任务的梯度方向与保持旧能力所需的方向冲突(梯度冲突),权重被推离原来的位置;注意力头受损最重、低层为甚;中间层表示发生漂移。不对称才是关键 —— 冻结注意力 64% vs 冻结前馈 23%,且 Q/K 的梯度冲突率显著高于 V
    信号给出「梯度冲突」这个层面的解释 → 理解了机制;只答「新数据覆盖了旧知识」→ 比喻层面,不算错但浅
  3. 用 LoRA 是不是就不会遗忘了?

    期望不是,只是少得多。 基座冻结确实去掉了遗忘的主要物理基础,但适配器仍在改变模型的整体输出行为 —— r 开得很大、epoch 很多、数据分布极窄时,LoRA 一样能把模型训得只会做一件事。所以 LoRA 也要测
    信号答「LoRA 就不会遗忘」→ 想当然,本题常见的错误;能说「少得多但不是零,还是要测」→ 做过
  4. 复演数据从哪来?配多少?会不会拖慢新任务?

    期望来源:开源通用指令数据集、模型自己在通用任务上的输出(自蒸馏)、历史上其他任务的训练数据。比例 5–20% —— 低于 5% 无效、高于 20% 明显拖慢新任务收敛。会拖慢,这是明确的交换:用新任务的收敛速度换通用能力的保留,值不值取决于这个模型还要不要承担别的职责
    信号给出 5–20% 这个区间并说出两端的后果 → 真配过;主动问「上线后还需不需要处理任务外请求」→ 判断力超出题面
  5. 模型已上线,客服反馈「现在只会分类,别的都不会了」,业务不能停,你有一天,怎么办?

    期望止血第一,根因第二:先切回微调前版本;没有旧版就在网关加路由(分类走微调模型、其余走基座),几小时可上、不用重训 → 再定位:任务外请求确认现象、通用基准量化损失、查全参 / epoch / 复演 / 学习率 → 慢修(一周)改配置重训:换 LoRA、混 5–20% 复演、epoch 降 1–2、学习率降档,挂基准监控 → 复盘落到流程:评测集补任务外集合
    信号第一反应是「重新训一版」→ 一周起步,救不了当天;把根因归到评测集同源切分而不是超参 → 归因深度最高的一档
这题的加压不在后段,第 1 层就把人分完:问的不是「什么是遗忘」,是「你怎么在训练里看见它」;第 5 层再验一次 —— 先止血还是先重训。

评分要点

  1. 知道遗忘是默认会发生的,不是偶发 bug
  2. 知道训练中要跟踪保留的通用基准(本题核心)
  3. 知道评测集里要另加一份任务外集合
  4. 能给出缓解手段的优先级(LoRA > 复演 > 降 LR/控 epoch > 冻层)
  5. 知道复演比例 5–20% 及两端后果
  6. 知道 LoRA 只是缓解不是免疫
  7. (加分)能给出梯度冲突层面的机制解释
  8. (加分)知道冻结注意力比冻结前馈有效得多
  9. (加分)压力分支里能提出网关分流这类当天可上的止血方案

常见错误

"用 LoRA 就不会有这个问题"想当然。LoRA 缓解不免疫,仍要测。
"训练完跑个 benchmark 对比一下就行"被动检测,往往在算力已经烧完之后才发现。应该训练中跟踪。
"混一点通用数据进去"知道方向不知道量。追问"混多少"即含糊。含糊回答的典型形态:给方向不给量。
"少训几轮就好了"只是其中一招,且没说清"几轮"和为什么。
"灾难性遗忘就是学新的忘旧的"同义反复。追问机制即见底。
提不出任何检测方法本题最主要的判负点——不可观测就不可控。
线上事故只讲重训不讲止血缺乏事故处理的时间意识。
把根因全归到超参深度不够。评测集切分缺陷通常才是让它漏到线上的原因。

关联学习