后训练跑偏,先按症状定位:答非所问、拒答过度、语气跑偏、格式崩掉、旧知识遗忘,这 5 类对应不同的回退层级。多数情况回到上一个检查点,把学习率降 30% 到 50%,清掉 5% 到 10% 的脏数据,2 到 3 轮能拉回来。
我们踩过一次:加完 3000 条客服语料,模型开始把所有问题都答成客服腔,连「帮我算 17 乘以 23」都回一句「已为您记录」。查了 2 天,那批语料里 62% 是同一句式,模型学到了句式而不是内容。
判断跑偏需要有人同时对模型表现和训练数据有印象,落到 3 种人身上。
下表 5 项齐了再动手查,缺项时定位会变成猜。第 3 项常被忽略,没有它就无法确认是这一轮改动造成的。
| 材料 | 要留什么 | 起什么作用 |
|---|---|---|
| 训练日志 | 每 100 步的 loss、学习率、梯度范数 | 看扰动出现在哪一步 |
| 检查点 | 最近 3 个 + 验证集最好的 1 个 | 回退到哪个版本有依据 |
| 数据版本号 | 每轮语料的 hash 与条数 | 确认退化来自哪一批新增数据 |
| 固定评测集 | 200 到 500 题,与训练集做过去重 | 量化退化幅度,不靠感觉 |
| 上一版基线输出 | 同一套题的历史回答存档 | 逐题对比,看退化集中在哪类题 |
第 3 项的数据版本号要落到文件名上,比如「sft-v7-1.2 万条」,不要只写「最新」。同一天跑 2 轮实验的时候,靠文件名能分清谁是谁,靠记忆一定出错。
第 5 项要提前存。很多人只存分数不存回答,退化发生后只能看到「准确率掉了 6 个点」,看不到具体哪几题变差,定位要多花 1 倍时间。
这两类的修法完全相反。语气问题的表现是内容对、说法怪,比如每题都加一句「希望对您有帮助」,或者把「不行」说成「这个需求我们暂时无法承接」;知识问题的表现是说得顺、事实错,比如把 2023 年改成 2022 年。语气问题动数据配比,知识问题动数据内容,改错方向会越调越偏。
判断办法很简单:同 1 道题问 3 遍,答案事实一致、措辞都怪,是语气问题;3 遍答案事实各不相同、措辞都顺,是知识问题。这个测试 5 分钟能做完,比翻日志快。
不用等完整评测,训练日志里有 3 个数能提前报警:梯度范数突然放大 5 倍以上,说明这批数据太偏;KL 散度从 0.02 一路爬到 0.15 以上,说明新策略离参考模型太远;平均回答长度在 200 步内涨了 40%,说明模型在学长度换奖励。这 3 个数在训练途中就能看,比跑完评测再回头省几小时。
第 4 步和第 5 步不要同时改。一次只动 1 个变量,跑完看评测分数,动了 2 处就分不清是哪一处起的作用,返工 1 次至少多花 1 天。
3 种情况建议直接弃版:一是回退两次仍拉不回基线分数,说明这版的数据集本身有问题;二是退化集中在承压类、安全类题型上,风险不可接受;三是评测方差超过 5 个点,说明训练过程不稳定,继续调只是在噪声里找规律。弃版的成本是 1 到 2 天,硬修的成本常在 1 周以上,越修越乱的情况也见过。
后训练出问题,九成能在数据里找到原因,剩下不到 1 成落在超参与解码参数上。改超参是事后补救,先把语料句式分布、长度分布、难度分布 3 张图打出来看一眼,往往 10 分钟就能看见那个异常的尖峰。
反过来,把选型做对能少走很多弯路:每一轮只加 1 类数据、只改 1 个超参、每次都跑同一套 300 题的评测。3 条守住,后训练就是个可以重复的工程活,不必靠运气。
本文信息核对时间:2026-11