本节摘要:本节用一个最小实验定义"后半程":把同一句提问分别喂给基座模型和对话模型,看它们给出的完全不同的两种命运——基座模型自顾自续写(甚至模仿提问者再编一个问题),对话模型停下并给出回答。这个差异不是"更多预训练"能带来的,而是 SFT 用指令数据重新校准了模型的行为目标。本节随后给出全书最重要的分工声明:预训练与分词器不重写,实战详见 《ht-gpt:从零搭建 GPT 训练与推理实战》、理论详见《Happy-LLM:从零训练大语言模型》,本教程从"你手上已有(或随手可得)一份基座权重"这一刻讲起。
阅读完本节,你应当能够:
对基座模型(如 nanochat 流水线第②阶段的产物,一个 124M 参数的小 GPT)输入:
你:中国最长的河流是哪一条?
典型输出(基座模型,示意):它会认真地续写这段文本,而不是回答你——
你:中国最长的河流是哪一条? 我:是长江。 你:那世界最高的山峰呢? 我:是珠穆朗玛峰。
看起来它"会"回答,但注意两点:第一,你只问了一次,它替你编造了后续整段对话;第二,如果你不手动打断,它会继续"你问我答"地写下去,永远不停。把同样的输入给对话模型(第③阶段 SFT 之后的产物),输出变成:
中国最长的河流是长江,全长约 6300 公里,发源于青藏高原,最终注入东海。<|endoftext|>
一句回答,一个终止符,停下。这就是后半程要制造的全部差异:从"概率上像的文本"变成"行为上对的回答"。
值得强调的是:两段输出用的是同一类模型、同一个目标函数——差异不在"会不会算概率",而在"把概率用在什么行为上"。这也是为什么本书的路线不是"继续预训练更多数据"(那只会得到更好的续写器),而是一条全新的工序:换数据、换格式、换验收标准。
💡 这个对比实验不需要训练任何东西:HuggingFace 上任何一对 base/chat 权重(如 GPT-2 与之对话微调过的社区版本)都能演示同样现象。
| 维度 | 基座模型 | 对话模型(SFT 后) |
|---|---|---|
| 停止行为 | 不会主动停,续写到长度上限 | 学会说终止符,答完即停 |
| 角色边界 | 把"用户说的话"也当成要续写的文本 | 能区分 user/assistant 消息 |
| 指令遵循 | "帮我写首诗"可能被当成一句要补全的句子 | 理解为任务并执行 |
第三条尤其关键:基座模型的训练目标是"给定前文,预测下一个词",它见过海量"接着写"的文本,从没见过"被要求做事"就要去做事的文本。SFT 的本质是换掉训练分布:用数万条"指令→合格回答"的对话样本继续做下一词预测——目标函数一个字没改,模型的行为却被彻底重定向了。这与《Happy-LLM:从零训练大语言模型》里对预训练目标的推导完全一致,此处不重复展开。
💡 基座回答"看起来很对"是一种幸存者错觉:因为提问后面通常跟着答案,续写统计确实倾向"先写答案"——但只要多问两轮,它就会开始编造你的下一句提问,或者把话题续到毫不相干的网页体文本上。判断一个模型是不是 chat 模型,最可靠的单测是:它答完会不会自己停。
把"SFT 在中间做了什么"拆成一张精确的账:
| 维度 | SFT 之前(基座) | SFT 之后 | SFT 动它了吗 |
|---|---|---|---|
| 目标函数 | 下一词预测交叉熵 | 同左 | 没动 |
| 架构层数/参数 | 与预训练结束时一致 | 同左(微调幅度小) | 没动 |
| 训练数据 | 海量网页(FineWeb-Edu) | 指令对话(数万条) | 换了(唯一的变量) |
| 行为 | 续写、不停、身份混乱 | 回答、会停、守身份 | 变化的结果 |
这张表回答初学者最常见的两个误会:其一,"SFT 是不是教模型新知识"——主要不是,知识绝大多数来自预训练,SFT 主要是释放与定向已有能力;其二,"SFT 之后模型变聪明了吗"——能力上限基本没变,变的是能力被调用的方式。这也解释了 1.1 节预告的现象:SFT 的 loss 从约 1.3 起步而不是从 10.4——它站在预训练的肩膀上,只学薄薄一层行为。
nanochat 把这条界画成了代码边界:官方对 SFT 数据的处理思路(发布帖 Discussion #1)是收集一批问答形式的对话,微调时只在回答 token 上计算 loss、对话之间用填充对齐,让模型把"能力"用在"扮演助手"上。具体的数据构造在第 2 章、损失掩码在第 3 章、对话格式在第 4 章逐一展开。
⚠️ nanochat 仓库高速演进:当前 master 已转向 GPT-2 speedrun 路线,脚本名与数据集都有变动(SFT 数据示例换用了 SmolTalk)。本书以 2025 年 10 月发布帖的四阶段流程为叙事主轴,接口细节以官方仓库 README 为准。
本教程是 ht 体系的一环,边界如下(全书各章反复引用):
概念清楚了,下一步是让机器就位——0.2 节解决"在哪跑、要多少显存"的问题。