ArcLibrary

SFT (有监督微调)

用少量高质量「输入-期望输出」对教模型做特定任务的最直接方式。

TrainingFine-tuningSFT
核心 · Key Idea

一句话:SFT = Supervised Fine-Tuning,准备一批 {用户输入, 期望回答} 数据,用同样的「next-token prediction」让模型学会照这种格式回答。是把 base model 调成「会按你想要的方式说话」的最直接方式。

是什么#

数据是这样的:

{"messages":[{"role":"user","content":"什么是 LLM?"},
             {"role":"assistant","content":"LLM 是大语言模型..."}]}
{"messages":[{"role":"user","content":"帮我退款"},
             {"role":"assistant","content":"好的,请提供订单号..."}]}

模型在这些对话上继续训练几个 epoch,loss 只算 assistant 回答那部分。几千条高质量对话就能把 base 模型调成「客服风格」「医学风格」「品牌人设」。

打个比方#

打个比方 · Analogy

预训练 = 读完图书馆,会语言。
SFT = 拿一摞「优秀范文」给他临摹 —— 他学的是「这种问题要这种答」的模式。
不是让他知道更多,是让他会按你的样子答

关键概念#

Instruction Tuning指令微调
SFT 的早期叫法 —— 用「指令-回答」对让模型听话。
Quality > Quantity质量优于数量
1k 条精挑细选 ≫ 100k 条凑数。LIMA 论文证明。
Loss Mask损失屏蔽
只在 assistant 输出 token 上算 loss,忽略 user 部分。
Catastrophic Forgetting灾难性遗忘
微调过头会丢失通用能力。要么数据混合 / 要么少 epoch。

怎么工作#

技术上和预训练一模一样(也是 next-token prediction),区别只在数据规模 + loss mask

实操要点#

  • 数据质量是 90% 的事:花一周打磨 1000 条数据,比花一个月凑 100k 噪声数据效果好
  • 优先用 LoRA:除非有大显卡集群,否则直接做全参 SFT 太贵。LoRA 在小卡上几小时就能调
  • 学习率比预训练小:1e-5 ~ 5e-5 起步。调大极容易把 base 调傻
  • 混入通用数据防遗忘:1:1 加一些通用对话数据,否则模型只会答你训练任务,其他全报废。
  • 先 prompt + few-shot 试:能用 prompt 解决就别 SFT。SFT 工具链复杂、迭代慢,prompt 能改一句话。

易混点#

SFT
**模仿优秀回答**:教模型「这样答」。
RLHF
**比较好坏**:用偏好数据让模型「**避开烂回答**」。
SFT
把知识 / 风格**烧进权重**。
更新要重新训练。
RAG
把知识**临时塞 prompt**。
更新就改资料库。

延伸阅读#

  • Pre-training —— SFT 的前一步
  • LoRA —— SFT 的低成本实现
  • RLHF —— SFT 的下一步:对齐