跳到主要内容

SFT 的目的与流程

要解决的问题

预训练语言模型擅长「续写」,却不天然遵循用户指令、对话格式或安全边界。监督微调(Supervised Fine-Tuning, SFT) 用高质量 (prompt, response) 对,把通用能力「对齐」到可部署的助手行为:听懂任务、按格式回答、减少明显违规输出。

工程上 SFT 往往是后训练链路的第一站:在 RLHF/DPO 之前先建立指令遵循与风格基线;许多开源模型(Alpaca、Vicuna 等)也仅做 SFT 即发布可用版本。

核心概念

概念含义
SFT 目标在标注回复 yy 上最小化负对数似然(因果 LM)
参考策略常保留预训练 checkpoint 作 πref\pi_{\text{ref}},供后续 KL / DPO 约束
数据形态单轮指令、多轮对话、CoT(思维链)等,统一序列化为 token

标准 SFT 损失(对单条样本,对 response 部分 token 求和):

LSFT=tRlogπθ(ytx,y<t)\mathcal{L}_{\text{SFT}} = - \sum_{t \in \mathcal{R}} \log \pi_\theta(y_t \mid x, y_{<t})

其中 R\mathcal{R} 为 assistant 回复区间;prompt 部分通常 mask 掉 loss(label = -100)。

方法 / 流程

  1. 选基座:与目标语种、上下文长度、许可协议一致。
  2. 构造数据:见 4.1.2 数据构造;质量优先于盲目扩量(4.1.3)。
  3. 模板:ChatML、Llama-3、Qwen 等官方模板;system / user / assistant 边界必须一致。
  4. 超参:学习率常为预训练的 1/101/1001/10 \sim 1/100;epoch 1–3;注意 灾难性遗忘
  5. 验收:held-out loss、MT-Bench / Arena 抽样、安全红队用例。

工程实践

维度建议
框架Hugging Face trl.SFTTrainerLLaMA-FactoryAxolotl
显存全参 SFT 7B 常需多卡;可用 LoRA
可观测train/eval loss、回复长度分布、重复率、拒答率
成本相对 RLHF 低一个数量级;主要成本在 数据标注与清洗

代表工作

  • InstructGPT(Ouyang et al., 2022):SFT + RM + PPO 经典三段式,奠定工业流程。
  • Stanford Alpaca:低成本指令数据 + SFT 示范。
  • 本仓库领读:Self-InstructEvol-Instruct

技术报告中 SFT 配方可参考 Qwen2.5 技术报告DeepSeek-R1(推理模型常在 SFT 后接 RL)。

局限与注意点

  • SFT 不能单独保证与人类偏好一致,只能模仿标注分布;有害或偏见样本会被放大。
  • 过拟合热门 benchmark 提示词会导致「评测虚高、真实对话差」。
  • 与预训练 分布偏移 过大时触发能力遗忘,需混合通用文本或降低 LR。

常见问题

问题可能原因处理
SFT 后模型变「复读机」数据重复、LR 过大去重、降 LR、加多样性采样
拒答一切安全样本过多下调拒答比例,补「正常回答」示范
eval loss 降但聊天差模板错误或 mask 错核对仅 assistant 计 loss
多轮工具调用失败训练无 tool 轨迹增补 function-call 格式数据

速查:最小可复现 SFT

  1. 基座 + 5k–20k 清洗对话 → 1 epoch,cosine LR,bf16。
  2. 固定 200 prompt 人工打分 → 与上一 checkpoint 对比。
  3. 满意后再接 DPO;不满意先改数据而非盲目加 epoch。

相关章节