5.2 SFT:给 模型上示范课
最直接的办法:做给它看
怎么教会一位「只会接话茬」的选手好好回答问题?
想想人类是怎么培训客服新人的:不是给 TA 讲一百条理论,而是丢过去一沓优秀对话记录——「客户这样问,你就这样答」。照着学,很快就有模有样。
监督微调(SFT)就是给模型上的这门示范课:收集几万份「问题 + 完美回答」,让模型继续做它最擅长的事——预测下一个词——只不过这次的「课本」不再是杂乱的互联网,而是精挑细选的示范。
一条真实的 SFT 训练样本长这样:
{
"messages": [
{"role": "system", "content": "你是一个乐于助人的 AI 助手。"},
{"role": "user", "content": "帮我把这句话翻译成英文:机会总是留给有准备的人。"},
{"role": "assistant", "content": "Opportunities always favor the prepared. 也可以译作:Chance favors the prepared mind.(巴斯德名言的常见英译)"}
]
}
训练时,整段对话会按上一节说的模板拼成一串 token,喂给模型做「预测下一个词」——和预训练完全同款的训练方式(第 4.3 节的老朋友),只是数据换了。
一个关键细节:只学「回答」,不学「提问」
注意,这段对话里有 user 说的话,也有 assistant 说的话。如果照单全收,模型会连「用户腔」一起学——我们可不想让它学会提问题、学会用户的错别字。
所以 SFT 有个标配操作:只在 assistant 部分的 token 上计算损失。user 的话照常输入(模型需要读懂它),但预测错了不罚分——就像批改作业只批「答」,不批「题」。这个操作叫 loss mask,细节在深入层。
立竿见影,但有天花板
SFT 的效果好得惊人:几万条高质量示范,就能让基座模型学会对话格式、跟随指令、礼貌拒答——ChatGPT 体验的大半个「壳」,SFT 就能给上。
但示范课有个先天局限:它只教了「怎么说」,没教「什么更好」。
- 两个都语法正确、都切题的回答,哪个更有帮助?示范数据说不出来——它只有一个「标准答案」,没有「比较」。
- 人写的示范未必是模型能力范围内的最优解:标注员写的证明可能啰嗦,模型本可以写得更漂亮,却被迫模仿人的版本。
- 示范覆盖不了无穷的真实问题:没见过的场景,模型只能靠泛化猜「示范老师会怎么做」。
要突破这层天花板,需要一种新的信号——不是「照着这个说」,而是「这两个里哪个更好」。这就是下一节 RLHF 的入口。
「示范课」听起来数据越多越好,实际上 SFT 的质量远比数量重要:LIMA 论文(2023)用精选的 1000 条示范就教会了对话格式,业界共识是「几条脏数据的伤害大于几百条好数据的收益」。另外示范课是把双刃剑——示范里的口头禅、八股开头(「当然可以!以下是……」)、过度道歉,模型会全盘吸收。你在各家模型身上感受到的「AI 腔」,很大程度就是 SFT 数据的文风。
小结
- SFT = 用「问题 + 完美回答」的示范数据继续做预测下一个词,训练方式与预训练同款。
- 标配细节 loss mask:只在 assistant 部分算损失——批「答」不批「题」。
- SFT 质量远比数 量重要,但天花板明确:它教「怎么说」,教不了「哪个更好」。
延伸阅读
- InstructGPT 论文 (2022)——SFT → 奖励模型 → PPO 三部曲的定义之作,ChatGPT 的配方来源。
- LIMA: Less Is More for Alignment (2023)——1000 条精选示范的力量。
- 下一节 5.3 RLHF:从「哪个更好」中学习:亲自当一回标注员。