调教层 · 第 17 / 25 课 · 从会补全到会听话
SFT:教会补全机器说人话
学完这课你能
- 说清 base 模型是「补全机器」:它不回答问题,它续写文本。
- 理解 SFT 怎么教:示范对话(prompt→回答)成批喂入,只在回答段上算损失。
- 建立「格式与语气是练出来的」体感,并知道数据质量 > 数量。
图书馆里泡大的书虫:一屋子的书都背下来了,你随便问,他都能背出相关的一段——可让他站上客服台,他连一句「您好」都说不利索。上岗前得培训。SFT,就是模型的岗前培训。
01会背书 ≠ 会接待
先做个实验。你问 base 模型:「中国的首都是哪里?」——按人的预期,答案该是「北京」。但它很可能续出:「日本的首都是哪里?韩国的首都是……」。先别笑,注意它干了什么:它没在答题,它在续写一段它见过的文本。这串字像题库、像试卷、像网上某页 FAQ——对补全机器来说,「问题」后面接「更多问题」,是天经地义的续写方向。
这不是它坏了。预训练(第 12–16 课)给它的全部任务就是「猜下一个词」,它把这件事练到了极致——只是没人教过它「问题来了要接答案」。下面实验台里有一段真 base 的补全回放,你亲眼看看这台「题库复读机」。
02示范对话是教材
SFT(Supervised Fine-Tuning,监督微调)的教法朴素到像带实习生:把成千上万条示范对话喂给它——每条就是一个 prompt 配一段写好的回答。问天气的、问日程的、自我介绍的,一遍遍示范「问题该接什么样的回答」。
就像小学生跟着老师的示范句一行行跟读:老师写一句,学生抄一句,慢慢就有了「话该这么说」的手感。
03只在回答上算 loss
教材里藏着一个关键细节:训练时,损失只在回答段上计算。「问:北京天气怎么样」这半截是提示,不是目标——我们要它学会的是「答:」之后怎么写。实现上给每个 token 挂一个 0/1 掩码(mask):回答段为 1,照常算交叉熵;提问段为 0,损失直接清零。要是不 mask 会怎样?模型会分心去学「怎么出题」——那它本来就会。
整条数据流长这样:
04真训一遍,看格式长出来
这一步不用信我。实验台里有一只字符级微模型(几万颗参数,第 13 课同款),教材是几十对模板问答。你点「开训」,它 10 秒左右跑完训练——损失只按回答段统计。训完让它答同一道题,你会看到输出从「胡乱续写」变成「给出答:开头的回答」。格式,就是这么长出来的。
对照播放器里还有一组同题对照:左边是真 base 的补全(真实录制),右边是 SFT 想教会的那种回答。
05质量 > 数量
既然 SFT 是带实习生,教材的质量就比厚度重要。LIMA(2023)那篇著名的实验用一句话概括:一条精心手写的示范,常常赛过一千条网上捡的——千条级的高质量示范,就能训出像模像样的对话模型。脏数据教脏格式:示范里阴阳怪气,模型就学阴阳怪气。你在下一课还会看到类似的道理:喂什么,学什么。
交互实验:对照播放器 + 微型 SFT 实验台
引擎加载中…
组件一「同题对照播放器」:左栏是 pythia-14m base 的真实补全回放(2026-10-14 本地真跑录制,采样种子见页尾注释),右栏是 SFT 想教会的教学示范回答;「真 base 来一发」可用真权重现场补全(首次需确认下载 28.1MB)。组件二「微型 SFT 实验台」:浏览器现场真训练一只字符级微模型(loss 只按回答段统计),训后现场生成前后对照——玩具模型学的是格式,不是知识。
等待开始下载…
组件挂载点 · 对照播放器与微型 SFT 实验台需要 JavaScript
组件加载失败。
处理方式:多为网络抖动或回放包缺失——刷新页面重试。对照回放与训练实验台互相独立,图文正文不受影响。