大模型后训练跑偏了怎么办,5 类症状对应 6 步回退

2小时前发布

后训练跑偏,先按症状定位:答非所问、拒答过度、语气跑偏、格式崩掉、旧知识遗忘,这 5 类对应不同的回退层级。多数情况回到上一个检查点,把学习率降 30% 到 50%,清掉 5% 到 10% 的脏数据,2 到 3 轮能拉回来。

我们踩过一次:加完 3000 条客服语料,模型开始把所有问题都答成客服腔,连「帮我算 17 乘以 23」都回一句「已为您记录」。查了 2 天,那批语料里 62% 是同一句式,模型学到了句式而不是内容。

一、谁能判断:3 种情形

判断跑偏需要有人同时对模型表现和训练数据有印象,落到 3 种人身上。

  1. 训练负责人。看 loss 曲线、KL 散度、奖励分值 3 条线,能判断是数据问题还是超参问题。这条线上的数值变化最早,也最难被外行看懂。
  2. 标注组组长。看得懂数据分布,能在一批样本里挑出重复句式与错误标注。他们看一眼样本就知道这批是不是同一批人写的。
  3. 业务方。只看得懂输出对不对,最能发现「答得通顺但没用」这类隐性退化。他们的评价不带技术偏见,往往比评测分数更早报警。

二、要准备什么

下表 5 项齐了再动手查,缺项时定位会变成猜。第 3 项常被忽略,没有它就无法确认是这一轮改动造成的。

材料要留什么起什么作用
训练日志每 100 步的 loss、学习率、梯度范数看扰动出现在哪一步
检查点最近 3 个 + 验证集最好的 1 个回退到哪个版本有依据
数据版本号每轮语料的 hash 与条数确认退化来自哪一批新增数据
固定评测集200 到 500 题,与训练集做过去重量化退化幅度,不靠感觉
上一版基线输出同一套题的历史回答存档逐题对比,看退化集中在哪类题

第 3 项的数据版本号要落到文件名上,比如「sft-v7-1.2 万条」,不要只写「最新」。同一天跑 2 轮实验的时候,靠文件名能分清谁是谁,靠记忆一定出错。

第 5 项要提前存。很多人只存分数不存回答,退化发生后只能看到「准确率掉了 6 个点」,看不到具体哪几题变差,定位要多花 1 倍时间。

夜间办公桌上两台显示器显示折线图

三、怎么办:6 步

前 3 步:先定性再定量

  1. 第 1 步,跑固定评测集。同一套题在新旧两版各跑 1 次,逐题对比,把变差的题按类型分桶。用时 30 分钟,产出 1 张退化清单。
  2. 第 2 步,人工看 50 条。从变差的题里随机抽 50 条读回答,判断是知识缺失、格式问题还是语气问题。这一步不能省,分桶结果常和直觉不一致,我们那次以为是知识退化,读完发现 41 条都栽在套话上。
  3. 第 3 步,审计新增数据。把这一轮加的语料按句式聚类,看有没有单一句式占比过高。经验值:单一句式超过 30% 就要掺入其他类型。

先分清语气问题与知识问题

这两类的修法完全相反。语气问题的表现是内容对、说法怪,比如每题都加一句「希望对您有帮助」,或者把「不行」说成「这个需求我们暂时无法承接」;知识问题的表现是说得顺、事实错,比如把 2023 年改成 2022 年。语气问题动数据配比,知识问题动数据内容,改错方向会越调越偏。

判断办法很简单:同 1 道题问 3 遍,答案事实一致、措辞都怪,是语气问题;3 遍答案事实各不相同、措辞都顺,是知识问题。这个测试 5 分钟能做完,比翻日志快。

3 个能立刻查的数值

不用等完整评测,训练日志里有 3 个数能提前报警:梯度范数突然放大 5 倍以上,说明这批数据太偏;KL 散度从 0.02 一路爬到 0.15 以上,说明新策略离参考模型太远;平均回答长度在 200 步内涨了 40%,说明模型在学长度换奖励。这 3 个数在训练途中就能看,比跑完评测再回头省几小时。

后 3 步:改一处再跑

  1. 第 4 步,回退或续训。退化幅度在 5 个点以内,从最好检查点续训,学习率降到原来的 1/2;超过 10 个点,直接回退到上一版重来。
  2. 第 5 步,调数据配比。把通用指令数据的比例拉回 40% 以上,新增的垂直数据压到 30% 以内,安全类样本控制在 5% 上下。
  3. 第 6 步,加约束项。强化学习阶段加 KL 惩罚,把新策略与参考模型的偏离限制在阈值内;监督微调阶段加 1 份混采的通用数据,防止灾难性遗忘。

第 4 步和第 5 步不要同时改。一次只动 1 个变量,跑完看评测分数,动了 2 处就分不清是哪一处起的作用,返工 1 次至少多花 1 天。

机房通道两侧机柜的指示灯

四、卡在哪:6 个卡点

  1. 分数掉了但说不出掉在哪。现象是只看到总准确率下降。原因是没存逐题回答。解法是补建题库存档,从这一版开始每题都留。
  2. 回退后性能也回不来。现象是旧版本现在跑分数更低。原因是评测环境变了,温度、最大长度、系统提示词不一致。解法是固定推理参数,写进评测脚本。
  3. 拒答率突然升高。现象是正常问题也被拒。原因是安全数据占比过高。解法是把安全样本降到 5% 以内,并加 1 组「该答就答」的正样本。
  4. 回答变长变套话。现象是每条都带总结段。原因是奖励模型偏好长度。解法是在奖励里减长度惩罚项,按字符数分档扣分。
  5. 格式崩掉。现象是 JSON 少括号、字段名乱写。原因是格式样本占比过低。解法是把格式样本提到 10%,并在解码时加约束。
  6. 旧知识忘了。现象是三个月前答得对的常识题现在答错。原因是微调数据与预训练分布差异过大。解法是掺 20% 到 30% 的通用语料一起训。

什么时候该放弃这一版

3 种情况建议直接弃版:一是回退两次仍拉不回基线分数,说明这版的数据集本身有问题;二是退化集中在承压类、安全类题型上,风险不可接受;三是评测方差超过 5 个点,说明训练过程不稳定,继续调只是在噪声里找规律。弃版的成本是 1 到 2 天,硬修的成本常在 1 周以上,越修越乱的情况也见过。

站在便签墙前记录的人

五、怎么核验:3 个动作

  1. 跑 3 次评测取均值。同一套题跑 3 次,方差在 2 个点以内说明结果可信;方差过大先检查采样参数。
  2. 做新旧盲测。把两版回答打乱,让 3 个人各评 30 条,只选偏好不给理由。偏好率低于 55% 视为没有改进。
  3. 看线上前 100 条真实请求。上线后头 1 小时盯真实请求的完成率与追问率,追问率突然升高说明答得不合用。

后训练出问题,九成能在数据里找到原因,剩下不到 1 成落在超参与解码参数上。改超参是事后补救,先把语料句式分布、长度分布、难度分布 3 张图打出来看一眼,往往 10 分钟就能看见那个异常的尖峰。

反过来,把选型做对能少走很多弯路:每一轮只加 1 类数据、只改 1 个超参、每次都跑同一套 300 题的评测。3 条守住,后训练就是个可以重复的工程活,不必靠运气。

本文信息核对时间:2026-11