SFT(Supervised Fine-Tuning,监督微调)用标注的输入—输出对继续优化因果语言模型的下一 token 预测。指令微调(instruction tuning)是 SFT 在「多轮对话 / system+user+assistant」形态下的实践,二者在目标函数上同源,差异主要在数据形态与模板。
段末注释:Teacher forcing 指训练时用标准答案 token 作为下一步输入,而非模型自身生成;SFT 默认采用此方式计算 loss。
系列索引:微调技术路线导读 | 工具实操:03 SFTTrainer
一、SFT 在后训练中的角色
1 | [CPT 可选] → SFT → [对齐 可选] → 评估 |
- 不做 SFT 直接 DPO:基座常不会稳定遵循 chat 格式,对齐难收敛。
- SFT 足够的情况:窄分类、固定 JSON、单轮 QA(见 05-01 选型速查)。
二、优化目标
对 token 序列 (x=(x_1,\ldots,x_T)),Causal LM 最大化:
$$
\mathcal{L}{\mathrm{SFT}} = -\sum{t \in \mathcal{M}} \log p_\theta(x_t \mid x_{<t})
$$
其中 (\mathcal{M}) 为参与 loss 的 token 位置集合(掩码决定)。
| 数据形态 | (\mathcal{M}) |
|---|---|
纯 text / CPT |
全序列(除 padding) |
| prompt-completion | 仅 completion / assistant |
| messages + assistant_only | 仅 assistant 轮 |
详见 01-01、03 §五 loss 掩码。
三、指令微调 vs 任务微调
| 指令微调 | 任务微调(窄) | |
|---|---|---|
| 数据 | 多任务混合、对话多样 | 单一任务、固定 system |
| 目标 | 泛化指令跟随 | 单一指标最优 |
| system | 常统一或按任务变 | 常固定一句 |
| 评估 | 抽检 + 多指标 | F1/EM/pass@k 为主 |
同一套 SFTTrainer;差别在数据集构造与评估(04 系列)。
四、与 CPT、对齐的边界
| 阶段 | 学什么 | 数据 |
|---|---|---|
| CPT | 领域共现、术语 | 无标注 text |
| SFT | 输入→输出映射、格式 | 标注对 |
| DPO/GRPO | 偏好、可验证行为 | chosen/rejected 或 reward |
05-02 CPT → 本篇 SFT → 05-01 对齐。
五、工程 checklist
| # | 项 | 文档 |
|---|---|---|
| 1 | prompt-completion 格式 | 01-01 |
| 2 | 数据清洗 | 01-02 |
| 3 | LoRA / QLoRA | 02-01 / 02-02 |
| 4 | SFTTrainer 参数 | 03 |
| 5 | 微调前基线 | 08-01 |
| 6 | 任务指标 | 04 系列 |
六、常见踩坑
| 现象 | 原因 | 对策 |
|---|---|---|
| 背 user 输入 | 未开 completion_only_loss | SFTConfig(completion_only_loss=True) |
| 过拟合小集 | epoch 过多 | 1–3 epoch;早停看 eval_loss |
| 通用能力下降 | lr 过大 / 全参猛训 | LoRA;降 lr;混通用数据 |
| loss↓ F1 不涨 | 评估未用 generate | 统一推理脚本 |
七、本篇 vs 03 工具篇
| 本篇(05-03) | 03 SFTTrainer |
|---|---|
| 概念、目标、阶段边界 | API、SFTConfig、代码示例 |
| 何时 SFT、与 CPT/对齐关系 | packing、Unsloth、踩坑表 |
八、小结
SFT = 标注序列上的 CE;指令微调 = 对话模板 + assistant 段掩码。默认路径:清洗数据 → LoRA → SFTTrainer → 基线对比 → 任务指标验收。
下一步:05-04 全参 vs PEFT 或 AMD 实战。