2025年5月4日

SFT 基础

SFT(Supervised Fine-Tuning)是用少量高质量「指令-回复」对在预训练模型上进行监督微调,将其从文本续写器改造为指令遵循助手的过程。

知识库大模型训练与对齐llmmodelsftalignment

先说结论

SFT(Supervised Fine-Tuning)是用少量高质量「指令-回复」对在预训练模型上进行监督微调,将其从文本续写器改造为指令遵循助手的过程。

为什么我会单独记这一篇

预训练模型见过海量文本,但几乎没见过「以助手身份回答用户问题」这种分布。SFT 解决的核心问题是分布对齐:用 10k-100k 条高质量示范数据将模型行为引导到目标分布上。

关键直觉:SFT 不是在教模型新知识,而是在教模型以何种格式、何种风格、何种角色来调用已有知识。

先把核心脉络捋清楚

SFT 的数学表达

给定预训练模型 pθp_\theta,在人工标注的「指令-回复」对 (x,y)(x, y) 上以自回归交叉熵损失更新:

LSFT(θ)=E(x,y)D[t=1ylogpθ(ytx,y<t)]\mathcal{L}_{\text{SFT}}(\theta) = -\mathbb{E}_{(x,y)\sim\mathcal{D}} \left[ \sum_{t=1}^{|y|} \log p_\theta(y_t \mid x, y_{<t}) \right]

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 的核心挑战是避免灾难性遗忘和模式坍塌,需要控制学习率和训练轮次。"

最后记几条

  1. SFT 是行为克隆,不是知识注入
  2. Completion-Only Loss 只对 assistant 回复计算损失
  3. LIMA 证明 1k 高质量 > 52k 低质量
  4. 常见失败:灾难性遗忘、模式坍塌、过拟合、谄媚
  5. SFT 是所有后训练的起点,RLHF/DPO 在 SFT 模型上继续

延伸阅读

延伸阅读

参考资料

  • InstructGPT (Ouyang et al., 2022) — SFT → RM → PPO 三阶段
  • LIMA (Zhou et al., 2023) — 少量数据对齐
  • HuggingFace TRL SFTTrainer 文档