一句话定义
指令微调(Supervised Fine-Tuning,SFT)用人工撰写或精选的「指令-回答」数据对基座模型做监督训练,教会它以助手的方式理解指令、组织回答与使用对话格式。
为什么重要
SFT 是行为格式化的第一步,投入产出比极高:数千到数万条高质量数据即可让基座产生对话能力(FLAN 与 InstructGPT 的经典结论)。它是理解后训练的起点,也是开源社区「自己调一个对话模型」最常动手的环节——本知识点讲机制与数据观,实操细节(LoRA、超参、数据制作)见微调专题站。
前置知识
- kp-016(后训练三阶段总览)
核心概念
- 指令数据:包含指令(任务描述)、可选输入、回答的三元组,覆盖问答、写作、代码、推理、多轮对话等任务类型。
- 对话模板(Chat Template):用特殊词元标记系统/用户/助手角色与轮次边界的格式约定(见 kp-003 的特殊词元)。
- 数据质量 > 数据数量:LIMA 等工作表明千级精标数据即可涌现良好指令遵循。
- 任务多样化:FLAN 表明把多任务统一成指令格式可显著提升零样本泛化。
- 损失掩码:训练时只对回答部分计损失,指令部分仅作条件。
原理与机制
SFT 与预训练共用同一个下一词预测损失(见 kp-005),改变的只是数据分布:从互联网文本换成「指令-回答」分布。模型由此学会两件事:一是格式行为(角色轮替、拒答方式、列表结构),二是任务映射(把自然语言描述映射到隐式掌握的能力)。质量机制上,噪声数据会把「编造、口癖、冗长」固化成行为;数据多样性决定泛化边界——未见过的任务类型表现明显更弱。多轮对话数据还需保证轮间一致性,否则模型学会「自相矛盾」。
公式或模型
SFT 损失(带回答掩码):
L_SFT = − Σ_{t ∈ 回答区间} log P(y_t | 指令, y_<t)
图示
<系统> 你是乐于助人的助手 </系统>
<用户> 用一句话解释彩虹 </用户>
<助手> 彩虹是阳光经雨滴折射与反射色散而成的光学现象。 </助手>
↑ 只对 <助手> 区间计算损失(指令部分被掩码)
直观类比
像教一位「什么书都读过」的人写工作邮件:不需要再给他知识(预训练已给),只需要几十封「范文 + 场景说明」(SFT 数据),他就掌握了语气、结构与场合的映射。范文质量差,他学到的坏习惯也根深蒂固。
实例或案例
FLAN(2022)将 1800+ 任务统一为指令格式做微调,零样本性能显著超越同基座;InstructGPT 的 SFT 阶段用约 1.3 万条标注(量级参考)即完成行为格式化;LIMA(2023)以约 1000 条精选数据复现「少而精」路线。开源社区由此掀起「小数据 SFT 涌现对话能力」的复现浪潮。
常见误区
- 「SFT 数据越多越好」:质量与多样性优先;数量堆到一定程度后边际收益被噪声抵消。
- 「SFT 后模型能力提升」:是「能力被调用」而非「能力增加」——知识仍来自预训练。
- 「模板无关紧要」:训练与推理模板不一致会直接导致输出异常,是最常见的部署事故之一。
与其他知识点的关系
自测题
- SFT 的损失函数与预训练有何异同?答案要点:同为下一词预测交叉熵;SFT 增加指令掩码(只算回答区间)且数据分布换成指令-回答对。
- 「SFT 数据质量优先」的两条证据或机制解释?答案要点:LIMA 千级精标即有效;噪声数据会把幻觉与口癖固化成行为。
- 训练与推理模板不一致会发生什么?答案要点:模型未在训练分布内见到该格式,行为退化(胡乱续写、角色混乱)。
延伸阅读
- Finetuned Language Models are Zero-Shot Learners(Wei 等,2022):FLAN
- Training language models to follow instructions with human feedback(Ouyang 等,2022)