这篇学完你能回答什么
- 微调数据从哪来?怎么保证质量?多少条够?评测集怎么切才不会自欺欺人?
- 什么是蒸馏?用大模型造数据训小模型,技术上和合规上各要注意什么?
- 微调后"学会了新任务但变笨了"是怎么回事?怎么提前发现、怎么缓解?
从一个真实故障讲起
一个客服平台的团队要做工单自动分类,14 个类别。他们判断得没错——这是典型的"能力/格式"问题,类别定义里有大量说不清的行业默契,属于该微调的场景。
数据也不算少:4200 条历史工单,人工复核过类别标签。他们拿一个 7B 开源模型做了全参微调,3 个 epoch。评测集是从这 4200 条里随机切的 10%。
结果非常漂亮:分类准确率从 few-shot 基线的 82% 提到 94%。上线。
三天后,客服主管找过来:"这个模型是不是坏了?"
现场是这样的——客服在同一个对话框里问模型"这个工单该怎么处理",模型回了两个字:"计费类"。问它"帮我把这段话润色一下",回:"账号类"。
它把所有输入都当成了待分类的工单。
团队跑了一遍通用基准,MMLU 掉了 11 个点。
这是一次教科书级的灾难性遗忘(catastrophic forgetting):模型确实学会了新任务,代价是把"除了这件事之外的所有事"忘掉了一大半。而它之所以没在上线前被发现,是因为评测集是从训练集里随机切的——同源同分布,只能证明"它在这类输入上分得准",证明不了"它在别的输入上还正常"。
这一篇讲的就是这两件事:数据怎么造才不自欺欺人,以及副作用怎么提前看见。
14 个类别的工单分类
4200 条历史工单,人工复核过类别标签
7B 全参微调 3 epoch
最容易触发遗忘的组合
评测集随机切 10%断点
就从这 4200 条里切,同源同分布
82% → 94%,上线
few-shot 基线 82%,分数非常漂亮
问它「润色一下」
它回:「账号类」
核心概念:先打比方,再给定义
关于数据:微调像给一个人做专项集训。集训的效果几乎完全取决于教材,而不取决于教练多努力、场地多先进。微调的成败八成在数据,算力只占很小一块——7B 的 LoRA 微调几小时几百块钱,而标注 1500 条高质量样本可能要两个人两周。面试里很多人把成本重心讲在 GPU 上,这本身就是没做过的信号。
关于蒸馏:知识蒸馏(knowledge distillation)就是让一个强模型当老师,把它的做法教给一个小模型。最常见的形态是"大模型造数据,小模型学"。要记住两条:学生学不过老师(教师的错误会被原样继承),以及老师的话不能白抄(这是合规问题,后面单说)。
关于遗忘:把一个能力全面的人关进一个房间,三个月只让他做一件事,他会把这件事做得极好,同时忘掉很多别的。灾难性遗忘说的就是这件事。它不是异常,是默认会发生的——你不做任何缓解措施,它一定发生,区别只在程度。
不取决于教练多努力、场地多先进
很多人却把成本重心算在场地上 —— 这本身就是没做过的信号
八成成败在数据,算力只占很小一块
7B 的 LoRA 微调几小时几百块钱;标注 1500 条高质量样本可能要两个人两周
只让他做一件事,他会做得极好
同时忘掉很多别的 —— 这不是意外,是默认
不做任何缓解措施,它一定发生
学会了新任务,代价是把「除了这件事之外的所有事」忘掉一大半;区别只在程度
原理拆解
| 连续微调里发生了什么 | 数字 | 读法 |
|---|---|---|
| 注意力头被严重扰动 | 约 15–23% | 低层受害最重 |
| 冻结注意力 vs 冻结前馈 | 减少约 64% vs 约 23% | 这解释了「冻结哪些层」不是随便选的 |
| 中间层表示漂移 | CKA 相似度下降 0.32–0.47 | 微调后漂得最重的是中间层 |
| 梯度冲突有结构 | Q/K 投影约 67%,V 约 34% | 冲突集中在 Q/K,不在 V |
检测比缓解更重要,也最常被跳过:训练日志里同时画三条曲线 —— 任务 loss、任务指标、一份保留的通用基准(MMLU、HellaSwag、常识 QA)。任务 loss 一路下降、通用能力同时塌掉,是最典型的失败形态,只看任务指标的人永远看不见它。
缓解按性价比排:① 优先 LoRA 而不是全参,基座权重物理冻结;② 混 5–20% 通用数据做复演,低于 5% 起不到正则作用、高于 20% 明显拖慢新任务收敛;③ 学习率降一个量级、epoch 控在 1–3;④ 必要时冻结低层注意力。
数据构造的四步
① 来源 ──► ② 判准 ──► ③ 体检与去重 ──► ④ 切分 │ │ │ │ 线上真实 先定规则 长度/格式分布 评测集必须 分布优先 再开标注 近重复剔除 与训练集异源
① 来源:优先级从高到低是——线上真实 query + 人工修正 > 历史业务数据 > 大模型合成 > 公开数据集。核心判据是分布是否贴近线上。用公开数据集训出来的模型在你的线上分布上通常水土不服。
② 判准先于标注。这是最容易跳过、代价最大的一步。判准没定清楚,标注员会退化到用表面特征做判断——长度、有没有小标题、语气客气不客气。前一篇提到的那个 DPO 故障(chosen 比 rejected 平均短 40%)就是判准缺位的直接后果。判准写完,先让两个人各标 50 条,算一致率;一致率上不去,说明判准本身有问题,这时候改判准比加标注量有用得多。
③ 体检与去重。至少做三件事:
- 近重复剔除:用 embedding 或 MinHash 找相似样本。重复样本会让模型在那个模式上过拟合,同时让评测虚高。
- 分布体检:把关键属性(长度、类别占比、来源渠道、时间跨度)的分布打出来。任何和你预期不符的系统性倾向,都会被原样学进权重。
- 边界样例覆盖检查:每个主类别至少 20–30 条,且必须包含"差点就是另一类"的边界样例。模型学不会边界,是因为你没给边界。
④ 切分:评测集必须与训练集异源。 这是开头故障的直接教训。从同一批数据里随机切 10% 当评测集,切出来的是同一批标注员、同一时间段、同一采样口径的数据,它只能证明模型拟合了这批数据的分布。正确做法是三条至少满足两条:
- 时间上晚于训练集(防止信息泄漏,也检验对新分布的适应)
- 由不同的人标注(检验判准的可复现性,而不是某个标注员的个人习惯)
- 另加一份"任务外"的通用能力评测集(这一条专门用来抓遗忘,见后文)
蒸馏:技术侧与合规侧
技术侧。 蒸馏分两种形态:
- 白盒蒸馏:能拿到教师的完整概率分布(logits),用 KL 散度让学生的分布逼近教师的分布。信息量最大,但要求教师权重在手——只有开源权重模型能这么做。
- 黑盒蒸馏:只能拿到教师输出的文本,用它当 SFT 的标准答案。调 API 的场景只能这么做,这也是绝大多数团队的实际形态。
黑盒蒸馏有两个必须做的动作:
- 拒绝采样过滤(rejection sampling):教师对同一个输入采样 N 次,用判分器/规则/多数投票筛掉错的,只把通过验证的留下来当训练数据。不做过滤直接拿教师输出训,等于把教师的错误率原样烧进学生的权重。
- 明确学生的能力上限就是教师。想让学生超过教师,得走可验证奖励那一档,靠蒸馏做不到。
合规侧(截至 2026-08,条款易变,正式项目务必现场核对原文)。
| 厂商 | 明确允许 | 明确禁止 |
|---|---|---|
| OpenAI | Output 的所有权归用户(条款里把权利让渡给用户) | 用 Output 开发与 OpenAI 竞争的模型;程序化批量抽取 Output;反向工程 |
| Anthropic | 用输出训练不与 Anthropic 竞争的模型。官方举例:情感分析、内容分类、摘要、信息抽取、语义检索、异常检测 | 训练通用聊天机器人、开放式文本生成模型;把 Output 当训练目标去复刻;反向工程训练方法 |
一句话判断口径:
风险不在"用没用大模型造数据",在"造出来的东西是不是同类通用模型"。 训一个客服意图分类的小模型 → 基本安全;训"我们自己的通用助手" → 踩线。
还有一个最容易答错的点:所有权和用途是两件事。 OpenAI 的条款明确说输出归你,但同一份条款也明确禁止拿它训竞品。面试里如果候选人用"输出的版权是我的"来论证"我可以拿去训模型",这是一个可以直接判定的知识缺口。
补充两条背景:法律上的追责路径主要是服务条款违约 + 商业秘密,而不是著作权(模型输出的版权地位本身还不清晰);开源权重模型另算——Apache 2.0 系(如 Qwen)基本没有这类限制,Llama 系有自己的社群许可条款需要单独看。
灾难性遗忘:机制与缓解
机制侧(2026 年的研究结论,可作进阶加分点):
- 注意力头是主要受害者:连续微调中约 15–23% 的注意力头被严重扰动,且低层受害最重。
- 冻结不同部件的效果差异极大:冻结注意力权重可减少约 64% 的遗忘,冻结前馈层只减少约 23%。这解释了为什么"冻结哪些层"不是随便选的。
- 中间层表示漂移最重:微调后中间层的 CKA 相似度下降 0.32–0.47。
- 梯度冲突有结构:Q/K 投影矩阵的梯度冲突率约 67%,V 投影只有约 34%。
工程侧缓解(教程主线,按性价比排序):
- 优先用 LoRA 而不是全参。基座权重物理冻结,遗忘的物理基础就少了一大半。开头那个团队用全参跑 3 个 epoch,是最容易触发遗忘的组合。
- 混入 5–20% 的通用数据做复演(rehearsal)。低于 5% 起不到正则作用,高于 20% 会明显拖慢新任务收敛。一句可以直接引用的经验:不带复演的全参微调,在研究之外几乎总是错的。
- 学习率降一个量级,epoch 控制在 1–3。超过 3 个 epoch 收益递减而遗忘陡增。
- 必要时冻结低层。结合上面的机制,冻结低层注意力的性价比高于冻结前馈层。
检测(这一条最重要,也最常被跳过):
训练过程中必须跟踪一份保留的通用基准(MMLU、HellaSwag、常识 QA 之类),而不是只看任务 loss。 任务 loss 一路下降、通用能力同时塌掉,是最典型的失败形态,而只看任务指标的人永远看不见它。
一句可以直接背进面试的判据:
任务上好 10%、其他上差 25%,这笔交易基本不划算。
工程实践(截至 2026-08)
数据量经验区间
| 任务类型 | 建议条数 | 备注 |
|---|---|---|
| 分类 / 路由 | 每类 100–300 | 有实测案例:8B 模型 5 个类别共 150 条 LoRA 到 92% |
| 结构化抽取 | 200–500 | schema 越复杂取上限 |
| 内容生成(文案 / 摘要) | 500–2000 | 风格类任务在这一档 |
| 复杂领域适配(医疗 / 法律 / 技术支持) | 1000–5000 | 通常还要配复演数据 |
| 厂商侧下限参考 | OpenAI SFT 最低 10 条、建议 50 条起看效果;RFT 建议先几十到几百条验证再投入 | —— |
共识是质量压倒数量:200 条精挑通常打得过 2000 条粗收。 数据不够时,正确动作是提高每条的质量和覆盖度,不是去合成一批凑数。
避坑清单
- 评测集绝不从训练集里随机切。 时间靠后、标注员不同、另加一份通用能力集,三条至少占两条。
- 训练前先跑一次数据体检:长度分布、类别占比、近重复率、边界样例数。做成脚本,每批数据都跑。
- 判准先写,再开标注;先小规模双标算一致率,一致率不行就改判准而不是加人。
- 蒸馏必须配拒绝采样,别拿教师的原始输出直接训。
- 合规看的是"训出来的是不是同类通用模型",不是"用没用它的输出"。所有权不等于使用权。
- 训练日志里同时画三条曲线:任务 loss、任务指标、通用基准指标。第三条是抓遗忘的唯一手段。
- 上线前做一次"任务外输入"抽测:拿一批完全不属于这个任务的请求打模型,看它是不是还正常说话。开头那个故障,只要有这一步就能拦住。
| 厂商 / 许可 | 明确允许 | 明确禁止 / 注意 |
|---|---|---|
| OpenAI | Output 的所有权归用户(条款里把权利让渡给用户) | 用 Output 开发与 OpenAI 竞争的模型;程序化批量抽取 Output;反向工程 |
| Anthropic | 用输出训练不与 Anthropic 竞争的模型。官方举例:情感分析、内容分类、摘要、信息抽取、语义检索、异常检测 | 训练通用聊天机器人、开放式文本生成模型;把 Output 当训练目标去复刻;反向工程训练方法 |
| Apache 2.0 系(如 Qwen)限制最少 | 开源权重:教师权重在手,可做白盒蒸馏(用 KL 散度让学生分布逼近教师 logits) | 基本没有这类限制 |
| Llama 系 | 同为开源权重 | 有自己的社群许可条款,需要单独看 |
- 一句话判据
- 风险不在「用没用大模型造数据」,在「造出来的东西是不是同类通用模型」
- 所有权 ≠ 使用权
- 条款把 Output 所有权给你,同一份条款禁止拿它训竞品;追责走服务条款违约 + 商业秘密,不是著作权
- 黑盒蒸馏必配
- 拒绝采样:教师采样 N 次,用判分器 / 规则 / 多数投票筛掉错的。不过滤 = 把教师错误率烧进学生权重
- 数据量分档
- 分类每类 100–300、抽取 200–500、生成 500–2000、复杂领域 1000–5000
- 厂商侧下限
- OpenAI SFT 最低 10 条、建议 50 条起看效果;RFT 建议先几十到几百条验证再投入
- 训练前先体检
- 长度分布、类别占比、近重复率、边界样例数 —— 做成脚本,每批数据都跑
面试视角
- 数据题按四步流水线答来源 → 判准 → 体检去重 → 切分
- 主动把切分讲出来「评测集必须和训练集异源」—— 绝大多数候选人漏掉这一步
- 遗忘题按三段答默认会发生 → 怎么提前看见 → 怎么缓解
- 顺序别反:先检测后缓解「看得见」是工程能力,知道有 rehearsal 这个词只是知识
- 合规先说训的是哪类模型分类 / 抽取这种非竞争用途允许,训通用助手就踩线
- 「数据当然是越多越好」—— 共识恰恰相反:质量压倒数量
- 「我们切了 10% 做验证集」—— 同源同分布,只证明它拟合了这批数据
- 「微调的成本主要是 GPU」—— 成本重心讲在算力上,就是没做过的信号
- 「灾难性遗忘就是学新的忘旧的」—— 只有定义,没有检测手段和剂量
- 「模型输出的版权是我们的,所以随便用」—— 可以直接判定的知识缺口
- 200 条精挑通常打得过 2000 条粗收;不够时提质量,不是合成凑数
- 评测集与训练集异源:时间靠后、标注员不同,另加一份通用能力集
- 「7B 的 LoRA 几小时几百块,真正贵的是标注和判准共识」
- 训练时同时跟踪通用基准;混 5–20% 复演,低于 5% 没用、高于 20% 拖慢收敛
- 先说清训的是哪类模型,再补一句蒸馏要配拒绝采样
面试官怎么问
Q4-09(数据从哪来、多少条够)是二面高频,看起来是常识题,实际筛的是"有没有真的攒过数据集";Q4-10(蒸馏与合规)在 toB 和有法务约束的团队里问得多;Q4-11(灾难性遗忘)是有训练经验的面试官爱问的,它几乎无法靠背——追问两层就能看出有没有真跑过。
答题结构建议
数据题按四步流水线答(来源 → 判准 → 体检去重 → 切分),并且主动把"评测集怎么切"讲出来——这一步是绝大多数候选人漏掉的,讲出来立刻区分开。
遗忘题按**"默认会发生 → 怎么提前看见 → 怎么缓解"**三段答。注意顺序:先讲检测再讲缓解,因为"看得见"才是工程能力,"知道有 rehearsal 这个词"只是知识。
分水岭信号
| 只读过 | 真做过 |
|---|---|
| "数据当然是越多越好" | "200 条精挑打得过 2000 条粗收;数据不够时该提质量不是去合成凑数" |
| "我们切了 10% 做验证集" | "评测集必须和训练集异源——时间靠后、标注员不同,另加一份通用能力集抓遗忘" |
| "微调的成本主要是 GPU" | "7B 的 LoRA 几小时几百块,真正贵的是标注和判准共识" |
| "灾难性遗忘就是学新的忘旧的" | "训练时要同时跟踪通用基准,任务 loss 降而 MMLU 塌是最典型的形态;混 5–20% 通用数据做复演,低于 5% 没用高于 20% 拖慢收敛" |
| "用 LoRA 就不会遗忘" | "LoRA 冻结基座所以遗忘少得多,但不是零——还是要测" |
| "我们用 GPT 造了数据训自己的模型" | "先说清训的是哪类模型:分类/抽取这种非竞争用途是允许的,训通用助手就踩线了;而且蒸馏要配拒绝采样,不然教师的错误会被原样学走" |
| "模型输出的版权是我们的,所以随便用" | "所有权和用途是两件事——条款把输出所有权给你了,但同一份条款禁止拿它训竞品" |
倒数第二行和最后一行是本篇最有区分度的两处:大多数候选人在合规这块只有一个模糊的"好像不太行",能说清"允许什么、禁止什么、判据是什么"的人极少。
小结与延伸
- 微调八成的成败在数据,不在算力。 数据四步:来源(贴近线上分布)→ 判准(先于标注)→ 体检去重(长度/占比/近重复/边界)→ 切分。
- 评测集必须与训练集异源:时间靠后、标注员不同、外加一份通用能力集。同源随机切是自欺欺人,也是开头故障没被拦住的直接原因。
- 数据量按任务分档:分类每类 100–300、抽取 200–500、生成 500–2000、复杂领域 1000–5000;质量压倒数量。
- 蒸馏:黑盒形态必须配拒绝采样过滤教师错误;学生上限就是教师。合规判据是**"造出来的是不是同类通用模型",且所有权 ≠ 使用权**。
- 灾难性遗忘默认会发生。缓解按性价比:优先 LoRA → 混 5–20% 复演数据 → 降学习率、控 epoch 在 1–3 → 必要时冻结低层注意力。检测比缓解更重要:训练中必须跟踪通用基准。
- 一句可背判据:任务上好 10%、其他上差 25%,这笔交易基本不划算。
延伸:本模块到此结束。微调做完之后"怎么证明它真的有用",是第 5 章评测与可观测要展开的;"你那次微调效果怎么量化的、和 few-shot 基线比过吗"这道简历深挖题(Q4-12)把本模块四篇的判断力全都串了一遍,是本章的收口。
继续深入
本篇归属第 4 章「微调与对齐」,去做这一章的题。