先说结论
SFT(Supervised Fine-Tuning)是用少量高质量「指令-回复」对在预训练模型上进行监督微调,将其从文本续写器改造为指令遵循助手的过程。
为什么我会单独记这一篇
预训练模型见过海量文本,但几乎没见过「以助手身份回答用户问题」这种分布。SFT 解决的核心问题是分布对齐:用 10k-100k 条高质量示范数据将模型行为引导到目标分布上。
关键直觉:SFT 不是在教模型新知识,而是在教模型以何种格式、何种风格、何种角色来调用已有知识。
先把核心脉络捋清楚
SFT 的数学表达
给定预训练模型 ,在人工标注的「指令-回复」对 上以自回归交叉熵损失更新:
Completion-Only Loss
标准训练对每个 token 都计算损失,但 SFT 中序列由 prompt + response 组成:
[System Prompt] [User Instruction] <|assistant|] [Model Response]
Completion-Only Loss:对 prompt 部分设 label 为 -100,仅对 assistant 回复计算损失。
labels = input_ids.clone()
labels[:, :prompt_length] = -100 # mask 掉 prompt
loss = model(input_ids=input_ids, labels=labels).loss
为什么要 mask prompt:
- 避免浪费模型容量学习预测用户输入
- 防止梯度信号被无关文本稀释
- 防止模型学会「复读」用户指令
原理拆开看
SFT 的本质是行为克隆(Behavior Cloning):让模型模仿人类示范者的输出分布。它是模仿学习(Imitation Learning)的一种形式。
- 预训练:学会语言规律和世界知识
- SFT:学会以助手角色调用这些知识
放到工程里怎么落
| 实践 | 推荐 |
|---|---|
| 数据量 | 10k–100k 高质量示范 |
| 学习率 | 1e-5 至 5e-6 |
| 训练轮次 | 2–3 epochs |
| Loss 类型 | Completion-Only |
| 微调方式 | LoRA(研究)/ 全参数(工业) |
| 数据质量 | 质量远比数量重要 |
关键发现(LIMA 论文):1000 条高质量数据可以超越 52k 条低质量数据。
与相邻概念的区别
| 维度 | SFT | 继续预训练 | RLHF |
|---|---|---|---|
| 目标 | 学会指令遵循 | 注入领域知识 | 优化人类偏好 |
| 数据 | 指令-回复对 | 无标注文本 | 偏好排序 |
| 成本 | 低 | 中 | 高 |
| 稳定性 | 高 | 高 | 低 |
| wikilink | 本页 | 后训练新趋势 | 人类反馈强化学习RLHF |
设计时真正要权衡什么
- 数据量 vs 质量:LIMA 证明 1k 高质量 > 52k 低质量
- 全参 vs LoRA:全参效果上限更高但成本大
- 多轮 vs 单轮:多轮数据训练更实用但需要更长上下文
容易踩的坑
灾难性遗忘(Catastrophic Forgetting)
- 表现:微调后通用能力(常识、代码、数学)显著退化
- 原因:学习率过高或训练轮次过多
- 缓解:低学习率、LoRA、混合预训练数据、限制 epoch
模式坍塌(Mode Collapse)
- 表现:所有回复风格单一、缺乏多样性
- 缓解:确保数据多样性、KL 散度惩罚
过拟合(Overfitting)
- 表现:训练 loss 下降但验证 loss 上升
- 缓解:早停、数据增强、Weight decay
谄媚(Sycophancy)
- 表现:模型倾向附和用户,即使观点错误
- 原因:SFT 数据中的系统性偏差
工程落地时我会怎么做
SFT 是所有后训练方法中最成熟、最稳定、最易落地的方案。几乎所有生产级 LLM 都经过 SFT 阶段。它是必需项而非可选项。
什么情况下 SFT 就够了,不需要 RLHF:
- 任务有明确格式要求(如 JSON 输出)
- 数据量有限但有高质量示范
- 不需要精细的价值对齐
- 快速迭代验证阶段
如果要对外讲,可以怎么概括
"SFT 的本质是行为克隆。预训练模型已经具备了丰富的知识和能力,但不知道如何以助手的方式调用它们。SFT 用少量高质量示范数据(通常 10k-100k 条),通过 completion-only loss,教模型理解指令并给出符合格式的回复。它是所有后训练流程的起点——先 SFT 赋予基本指令遵循能力,再考虑 RLHF/DPO 做偏好优化。SFT 的核心挑战是避免灾难性遗忘和模式坍塌,需要控制学习率和训练轮次。"
最后记几条
- SFT 是行为克隆,不是知识注入
- Completion-Only Loss 只对 assistant 回复计算损失
- LIMA 证明 1k 高质量 > 52k 低质量
- 常见失败:灾难性遗忘、模式坍塌、过拟合、谄媚
- SFT 是所有后训练的起点,RLHF/DPO 在 SFT 模型上继续
延伸阅读
- 大模型总索引
- ML 基础视角的 Fine-tuning 概览 — 从 Pretraining 到 RLHF 的端到端解读
延伸阅读
- 人类反馈强化学习RLHF — SFT 之后的下一步
- 指令微调 — 指令调优的具体方法
- PEFT总览 — 高效微调方法
- 预训练 — 数据量的影响
参考资料
- InstructGPT (Ouyang et al., 2022) — SFT → RM → PPO 三阶段
- LIMA (Zhou et al., 2023) — 少量数据对齐
- HuggingFace TRL SFTTrainer 文档