38 分钟
大模型内核:从经典机器学习到对齐与前沿

从预训练到监督微调:为什么「博学」还不够,还要「听话」

讲清预训练基座模型为什么知识广博却不会好好对话,监督微调(SFT)如何用高质量指令/对话示范教会它遵循指令与对话格式,以及灾难性遗忘、全参微调的成本与数据要点

  • 理解预训练模型与「聊天助手」之间差的那一步是什么
  • 掌握 SFT 的数据格式、训练目标与典型流程
  • 理解灾难性遗忘以及如何在微调中缓解
  • 建立「基座 → SFT → 对齐」的完整阶段认知

预训练模型博学,但不会「接话」

预训练的目标是预测下一个 token,模型因此具备了语言与知识,但它默认的行为是「续写」而非「回答问题」:你问它一个问题,它可能接着列出十个相似问题。要把它变成能听懂指令、按要求格式作答的助手,需要在一个较小但高质量的「指令—回答」数据集上再训练,这就是监督微调(Supervised Fine-Tuning,SFT)。

基座到助手的关键阶梯

预训练基座

海量无标注文本,博学但只会续写

SFT 监督微调

高质量「指令→理想回答」示范

指令/对话模型

学会遵循格式、语气与任务

偏好对齐(后续课程)

让回答更符合人类偏好与安全

SFT 在数据和目标上学什么

SFT 样本通常是一条指令(可带上下文/对话历史)和一份人工写好的理想回答。训练时只在「回答」部分计算损失、让模型学会生成这样的回答,指令部分一般只作为条件。它用的仍是下一个 token 的交叉熵,区别在于数据从「互联网原文」换成了「我们希望模型成为的样子」的高质量示范。

为什么预训练模型会「答非所问」?因为它的唯一目标是顺着文本往下续写,没有「要回答用户」这个概念。你给它一句「怎么学 Python?」,它最自然的续写可能是「相关问题还有:怎么学 Java?怎么学 C++?」——它在模仿网页上常见的「问题列表」,而不是在给你写答案。SFT 做的,就是把成千上万条「指令→理想回答」喂给它,让它学会一种新的行为模式:看到指令就进入「作答」状态,按规范的结构、语气和格式给出回应。注意它并没有给模型注入新知识——知识在预训练里已经学全了,SFT 只是调整它「怎么用这些知识开口」。这也是为什么 SFT 数据量不需要很大:几百到几万条高质量示范,往往就足以把行为模式扳过来。

💡质量 > 数量

大量实践表明,SFT 阶段数据质量、多样性和格式一致性远比绝对数量重要:少量经过精雕细琢、覆盖主要任务类型、回答风格统一的示范,往往胜过海量粗糙数据。数据里混入错误或风格混乱,模型会忠实地学走这些毛病。

全参微调与灾难性遗忘

最直接的微调是全参数微调:加载预训练权重,在 SFT 数据上更新所有参数。它效果充分,但要存储和训练整套参数与优化器状态,成本高;另一个风险是灾难性遗忘——在新任务上训得太猛,会覆盖预训练学到的通用能力,模型变「窄」。缓解办法包括:用较小学习率(远小于预训练)、控制训练轮数、混入一定比例通用数据、以及下一讲的参数高效微调。

为什么微调要特别小心「学习率」?预训练已经把模型调到一个很好的通用状态,SFT 数据量又小,如果用预训练那样大的学习率、猛训几个epoch,参数会被小规模的领域数据带着大幅偏移,结果就是:在这个任务上表现好了,但原来会写代码、会翻译、会闲聊的通用能力被冲掉了——模型变成了一个只会干这一件事的「专科生」。所以 SFT 的学习率通常比预训练小一两个数量级,轮数也少,相当于「轻手轻脚地微调」而不是「推倒重教」。混一部分通用数据一起训,则是让模型在学新任务的同时别忘了老本事。这些细节看着琐碎,却是决定微调后模型是「更全能」还是「更偏科」的关键。

配对题阶段与目标配对
🐍一条清晰的主线

预训练解决「知道什么」,SFT 解决「会不会按人类期望的方式表达和执行」,偏好对齐解决「哪个回答更好、更安全」。后面两讲先讲省成本的微调技术 LoRA,再补齐偏好对齐所需的强化学习基础与 RLHF/DPO。

为什么 SFT 用很小的数据量就够?因为它不是在教新知识,而是在「换挡」——把模型从「续写模式」切到「作答模式」。预训练已经喂了海量文本,语言和知识早就内化了,缺的只是行为范式。几百到几万条覆盖主要任务类型、风格统一的示范,就足以让模型学到「看到指令该怎么开口」。这也解释了为什么 SFT 阶段质量远胜数量:一万条风格混乱、互相矛盾的回答,只会教出一个精神分裂的模型;几百条精雕细琢、结构一致的示范,反而把行为模式稳稳扳过来。数据里的每个瑕疵,模型都会照单全收。

选择题

对预训练基座做 SFT 的主要目的是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

从线性回归到神经网络,本质都一样:定义一个带参数的函数 fθ(x),用损失函数衡量它和真实答案的差距,再沿梯度方向更新参数。监督、无监督、强化学习的区别,只在「训练信号从哪里来」。先把这套统一视角立住,后面遇到的任何模型都是它的具体实例,就不会被层出不穷的名词淹没。