什么是 监督微调(SFT)?
更新于
监督微调(SFT)是一种微调方法,它在带标签的输入与目标样本上继续训练预训练模型,通过最大化指定目标 Token 的似然来调整模型行为。
快速了解
| 规范文档 | 官方规范 |
|---|
工作原理
检查真正进入 Loss 的 Label
使用固定 Tokenizer 与 Chat Template 渲染样本,对 Next-token Prediction 执行一次 Label Shift,再检查 Padding 和 Loss Mask 后保留的位置。全序列、Completion-only 与 Assistant-only 策略优化不同目标。当前 [TRL SFTTrainer 文档](https://huggingface.co/docs/trl/main/en/sft_trainer)支持多种数据格式与 Loss Policy,也可能通过节省内存的 Chunked 实现计算相同 NLL;应固定 Library Revision,不能把框架默认值当成 SFT 定义。
围绕生产失败切片构建数据
先定义期望输出与拒答行为,再围绕 Intent、语言、长度、难度和边界情况策划样本。记录 Provenance、License、Consent、Label Policy、Reviewer 分歧、去重、污染检查与 Synthetic Teacher,保持三个数据 Split 身份独立。AWS 的 [SFT 数据指南](https://aws.amazon.com/blogs/machine-learning/preparing-data-for-supervised-fine-tuning-part-1-formatting-and-quality/)强调格式、质量、多样性与一致性;产品 Schema 与样本量建议不能当作通用阈值。
使用与服务一致的模板和制品测试
训练与推理必须统一 Role Marker、Special Token、System Content、Tool Schema 和终止行为。[Transformers Chat Template 指南](https://huggingface.co/docs/transformers/main/en/chat_templating)指出,即使来自同一基座,不同模型也可能要求不同控制 Token,重复 Special Token 还会损害行为。应导出或组合实际服务制品,重跑任务、回归、安全与延迟门禁,对照基座和 Prompt-only Baseline,并保留经过测试的回滚版本。
主要特点
- 使用 Token 级或任务专属监督 Loss 优化带标签目标,而不是成对偏好或标量奖励
- 将监督目标与参数更新策略分离,后者可以是全参数、选择性更新或 PEFT
- 显式记录全序列、Completion-only 或 Assistant-only Loss Mask,并与 Attention Mask 区分
- 把 Tokenizer/Processor、Chat Template、Special Token、截断、Packing 和标签构造纳入训练身份
- 要求记录数据许可、去重、不可变 Split、标签来源、污染检查与任务混合比例
- 评测留出行为、能力回归、安全、服务一致性、资源消耗和回滚准备度
常见用途
- 训练模型遵守稳定的抽取、分类、转换或结构化输出契约
- 从经过审查的示范中学习指令遵循、对话、工具使用或多模态行为
- 适配回答风格与领域工作流,同时单独评估事实知识
- 先建立监督 Baseline,再判断偏好优化是否带来可测量增益
- 修正经过可维护 Prompt 或 RAG Baseline 后仍反复出现的不可靠行为
示例
Loading code...常见问题
SFT、Fine-tuning 和 Instruction Tuning 有什么区别?
Fine-tuning 是从预训练 Checkpoint 继续优化的上位过程;SFT 明确使用监督式输入、目标标签和目标函数;Instruction Tuning 则是用指令与期望回答表达任务、通常追求跨任务指令遵循的 SFT 形式。SFT 还可覆盖不以广泛指令遵循为目标的带标签续写、分类、抽取、工具使用或多模态映射。
SFT 是否总应只对 Assistant 回答计算 Loss?
不是。全序列、Completion-only 和 Assistant-only 是不同策略。当前 TRL 的默认行为取决于数据格式,Assistant-only Loss 还要求对话模板能生成兼容的 Generation Mask。应根据目标行为选择 Mask,检查实际 Labels 和非 Mask Token 数量,固定策略版本,并用留出结果比较,不能把单一设置当作普遍规则。
SFT 需要多少训练数据?
不存在可移植的固定样本数。需求取决于任务多样性、标签质量与分歧、目标行为、基座模型、Tokenizer、序列长度分布、合成数据相关错误和可接受错误率。应使用不可变 Split 绘制学习曲线,检查各切片失败与近重复,再根据可靠的留出集增益决定是否增加数据。
SFT Loss 降低是否说明模型可以上线?
不能。Loss 只衡量 Mask 选中标签的拟合程度,即使模型过拟合、记住污染样本、损害通用能力或在服务 Chat Template 下失败,它仍可能下降。发布门禁应让候选模型与基座及 Prompt-only Baseline 比较,并覆盖留出任务、格式、语言、领域、安全、拒答、能力回归、延迟和真实服务制品。
什么时候应选择 SFT,而不是 Prompt、RAG 或偏好优化?
先建立可测量的 Prompt 与 RAG Baseline。当经过审查的示范需要把稳定任务行为或输出模式写入模型权重时,再使用 SFT;需要当前且可归因的知识时优先用 RAG;多个合理答案之间的相对偏好才适合偏好方法。这些方法可以组合,但 SFT 本身不能保证知识新鲜、符合人类偏好、安全或工具权限正确。