SFT 到底在教什么:格式与行为,不是知识
基座模型的缺陷不是「不会」,是「不会以正确的方式响应」——你问「法国首都是哪」,它会续写出更多问答对(因为训练数据里 FAQ 是成对的),而不是直接回答。SFT(Supervised Fine-Tuning,监督微调)的作用就是教会模型对话的格式与助手的角色:给定一条用户消息,以助手身份给出一个直接、有帮助、恰当格式的回答。
这个定位解释了 SFT 数据的构造逻辑:每条数据 = 用户指令 + 理想的助手回复(多轮对话则是消息序列),规模通常在几万到几十万条——远小于预训练的万亿 token,因为 SFT 教的是「行为模式」而非「知识」:知识已经躺在预训练的参数里,SFT 只是教会模型「以什么方式调用与呈现」这些知识。「SFT 教能力」的流行误解需要澄清:一个基座模型没学过的知识,SFT 几条样本教不会(强塞进去只会得到死记硬背与泛化失败)——能力缺口要靠预训练补,SFT 只负责把已有能力「组织出来」。
数据构造:质量与多样性的双高要求
SFT 数据的形态有行业标准:对话格式(chat template)——每条样本按模型的对话模板组织(system/user/assistant 角色标记 + 特殊 token,本库 Chat Template 篇详述),训练目标只算 assistant 部分的损失(用户消息是条件,不参与损失——这个细节叫 loss masking,漏了它模型会学着「抢用户的话」)。
数据质量的两个维度。质量:一条垃圾样本的毒性强于一条好样本的收益——回复的错误、冗长、格式混乱都会被模型学成风格;因此 SFT 数据的主流做法是用强模型生成 + 人工审核(合成数据在后训练的渗透率极高),头部团队的 SFT 集每一都经过逐条审。多样性:任务类型(问答、写作、代码、数学、摘要、角色扮演)、难度、长度、语言都要覆盖——多样性不足的 SFT 模型会「偏科」(数学好但写作僵)与「格式过拟合」(永远用列表回答一切问题)。一个反直觉的实践结论:SFT 数据「少而精」优于「多而杂」——行业里用一万条精心构造的样本微调出的模型,常常好过用百万条低质样本的(LIMA 论文的核心发现),因为行为模式本来就不需要海量样本。
训练细节:小学习率、少 epoch 与遗忘的边界
SFT 的训练超参与预训练完全不同量级:学习率小一到两个数量级(预训练 1e-4 级,SFT 1e-5~2e-5 级——微调是「轻推」不是「重塑」)、epoch 少(1~3 个 epoch,多了过拟合——模型开始背诵训练样本而非泛化行为)。全参数微调 vs LoRA:全参效果上限略高但成本高(要动全部权重),LoRA(本库专篇)冻结基座只训低秩增量——SFT 场景下 LoRA 是性价比默认项,尤其在多任务多版本时(每个任务一个 LoRA 适配器)。
SFT 最大的坑是灾难性遗忘的边界管理(本库持续学习篇的原理在此最常发作):SFT 数据分布窄于预训练(都是「助手对话」),高学习率或多 epoch 会让模型「忘掉」预训练的部分能力——数学与代码能力最先受损。对策按成本排序:混入通用数据(SFT 数据里掺 10%–30% 的预训练风格数据做回放)、压低学习率与 epoch、LoRA 限制改动范围。判断遗忘是否发生的方法:SFT 前后各跑一遍预训练能力的基准(MMLU 类知识与代码基准)——SFT 的验收标准是「行为变好且能力不掉」,只看对话质量不看能力回归是最大的验收盲区。
失败模式与诊断
SFT 的常见翻车有四种典型形态。形式过拟合:模型学会了「像 SFT 数据那样说话」(永远列点、永远以固定客套开头)——数据多样性不足的症状。能力塌陷:对话变流畅了但数学代码大幅退化——遗忘管理失败的症状。谄媚强化:模型学会了一味附和(SFT 数据里助手从不反驳用户)——数据里缺少「礼貌地纠正用户」的样本。长度失控:回复冗长——SFT 数据里的示范回复偏长,模型学成了「长 = 好」。四种失败都能从数据侧溯源与修复——SFT 的问题九成在数据,一成在超参,诊断时先审数据再动超参。
SFT 数据的构造工艺:从种子到数据集的流水线
SFT 数据集的构造有一条可复制的流水线,五个工序展开。工序一:任务矩阵设计。先列出要覆盖的「能力 × 难度 × 格式」矩阵(问答/写作/代码/数学 × 简单/复杂 × 短答/长文),按矩阵规划样本配额——多样性来自矩阵的覆盖度而非随机堆样本。工序二:种子数据。真实来源优先(客服历史、内部文档问答、人工撰写的示范),每条过质量关(答案正确、格式规范、长度合理)。工序三:合成扩量。用强模型按任务矩阵批量生成(指令-回复对),生成的质量控制靠「生成时的提示词工程 + 生成后的自动过滤」(规则过滤 + 模型打分,低于阈值丢弃)。工序四:人工审核。抽检或全检(预算决定),审核员按标准打分(正确性、有用性、格式),不合格重生成或丢弃——人工审核的抽样密度是数据质量的最后一道闸。工序五:配比与去重。任务矩阵的配额落实为最终配比、全库去重(近重复的指令会让模型过拟合特定模式)、以及混入通用数据做遗忘防线(正文的回放策略)。流水线的成本结构:合成便宜(API 费用)、人工贵(审核是主要人力成本)——「合成为主、人工兜底」是预算内的最优配比;头部的 SFT 集(如开源社区的精品数据集)的人工密度是它们值钱的原因。这条流水线的每个工序都可裁剪,但顺序与「质量闸」的位置不要动——SFT 数据集的工艺,决定微调效果的上限,训练技巧只能逼近它。
SFT 的进阶话题:多任务混合与「能力冲突」的处理
SFT 的进阶难题是多任务混合时的能力冲突:一个 SFT 数据集同时覆盖对话、代码、数学、写作时,任务之间会互相「拉扯」。冲突的表现:代码任务的数据占比高了,对话风格变得生硬(代码回复的简洁风格渗入闲聊);写作数据多了,数学回答开始「抒情」(用修辞代替推导)。冲突的根源:模型把「任务类型」与「回复风格」绑定学习——数据里「代码任务 → 简洁格式」的强相关,被泛化成了「一切回复都该简洁」。对策按成本排序:其一,风格多样性注入——每个任务类型内部保持风格多样(代码数据里也有详细讲解的样本、对话数据里也有简洁回答的样本),打破「任务-风格」的绑定;其二,system prompt 条件化——SFT 数据里加入「按 system 指令切换风格」的样本(同一任务、不同 system、不同风格),教会模型「风格是受控的而不是绑死的」;其三,配比的迭代校准——多任务的基准分开评测,按偏科调配比(这是最贵但最根本的)。一个相关的实战判断:多任务 SFT 的替代方案是「分任务 LoRA」——每个任务族一个适配器、按场景挂载(本库持续学习篇的参数隔离路线),代价是管理复杂度、收益是无冲突。单混合模型与多 LoRA 的选择,本质是「通用性优先」还是「专精优先」的产品决策。
SFT 的验收测试集:如何证明「微调有效」
SFT 的效果验收需要一个测试集,构造的要点值得给出。测试集的三部分构成。其一,行为测试:任务矩阵(构造数据时的矩阵)每格抽 3–5 个「训练时没见过的同类型任务」——测的是行为模式的泛化(见过「写周报」的样本,测「写月报」)。其二,能力回归:通用基准(知识、代码、数学各选一两个)微调前后各跑一遍——遗忘的监视器(正文的验收双闸门之二)。其三,边界测试:对抗性输入(诱导越权、模糊指令、超长输入)——SFT 后的模型行为边界要主动探一遍。验收的标准设定:行为测试的通过率目标(如 90%)、能力回归的容忍线(通用基准下降不超过 X%)、边界测试的零容忍项(安全红线不许破)——三条线画好,「SFT 成没成功」从感觉变成数字。测试集的维护与数据集同源(本库数据流水线的黄金集思路):每个版本的 SFT 数据集配一个版本的测试集,版本对版本地比——SFT 的迭代才有了可比性的坐标。
小结
SFT 教的是格式与行为而非知识——基座的能力在预训练已定型,SFT 负责把它组织成助手形态。数据的关键是质量与多样性双高(合成 + 人工审,少而精优于多而杂),训练的关键是小学习率、少 epoch 与遗忘边界管理(通用数据回放、能力回归验收)。四种失败模式(形式过拟合、能力塌陷、谄媚强化、长度失控)九成可溯源到数据。SFT 之后模型「会说助手的话」,下一步是对齐(RLHF/DPO)让它「说该说的话」——本库对齐系列已有专篇。下一篇回到另一个常被误解的话题:量化——模型权重压到 INT4 之后,能力到底损失多少。
读者留言
COMMENTS 暂无还没有留言,来说第一句?