监督微调(SFT,Supervised Fine-Tuning)是拿人工写好的指令和回答示例,继续训练已经完成预训练的大模型的方法。预训练教会模型接着往下写文本,监督微调教会它按指令回答问题:看到一个提问,先判断提问想要什么,再按示范过的形态、做法和格式给出回答。它的核心动作很具体——给模型看一批“问题应该这样答”的标准示例,让它把这种回答方式学进参数里。
同样一个问题,两种模型的反应能直观说明差别。只经过预训练的模型更像续写机器,问它“请用三点说明光合作用”,它可能接着编出第四点,或者再写几个类似的提问,因为它学到的是文本怎么接下去。经过监督微调的模型更像助手,会按三点的结构作答。知识大多还是预训练给的,变的是模型使用知识的方式。
先摆进训练流水线:它站在预训练之后、对齐之前
把大模型训练排成一条线,监督微调的位置在中间:
| 阶段 | 在教什么 | 信号从哪来 |
|---|---|---|
| 预训练 | 语言规律、知识与通用能力 | 海量文本本身,预测下一个词 |
| 监督微调 | 按指令回答的形态与做法 | 人工写好的指令和回答示例 |
| 偏好对齐 | 回答的好坏与分寸 | 人对多个回答的排序或比较 |
这个顺序不是随意定的。没有预训练打下的底子,几千条示例教不出通用能力;没有监督微调先立住回答形态,后面的偏好对齐连像样的起点都没有。OpenAI 的 InstructGPT 路线就是这样走的:先由标注者写出理想回答,用监督学习训出初始模型,再收集回答排序,做奖励模型和强化学习。
训练时到底在改什么:只对回答部分计分
监督微调和预训练用的是同一类目标:预测下一个词,差别在计分范围。训练时,一条示例被拼成“指令 + 回答”的完整文本,再套上对话模板,标明哪一段是用户说的、哪一段是助手说的。计算损失时,通常只看回答部分,指令部分不计分。模型要学的是“给定这样的指令,该这样回答”,而不是把提问本身也背下来。
训练的步子一般放得很小:学习率比预训练低,轮数也不多,因为目标不是重塑模型,而是把已有能力引导到固定形态上。步子太大、轮数太多,模型容易把示例背得滚瓜烂熟,换个没见过的问法就露馅,还可能丢掉通用能力。训练用的对话模板还必须和上线用的模板一致,否则模型可能认不出轮次边界,出现替用户说话、回答截断在奇怪位置的问题。
一组示例要过四道手:写、清洗、训练、评测
第一道是写示例。每条示例都要回答同一个问题:这是不是我们希望模型在真实场景里交出的回答。覆盖面要事先想好,问答、摘要、改写、格式输出、拒绝回答,缺了哪一类,上线后那一类就容易出问题。
第二道是清洗。去掉重复、矛盾和事实错误的示例,统一风格。同一类问题不能一会儿要求三行回答、一会儿要求长文展开,否则模型学到的是摇摆不定的标准。该拒绝的请求也要单独准备示例,不能靠模型自己猜。
第三道是训练。按统一格式把示例喂给模型,只对回答部分计分,用小步子更新参数。第四道是评测,而且评测集不能和训练集重合,要分开看新指令上的泛化、旧能力的保留、格式与安全边界的遵守。只看训练损失下降就宣布完成,是最常见的自欺欺人。
它和四个相近做法的区别
| 对比对象 | 区别要点 |
|---|---|
| 预训练 | 回答“模型知道什么”,靠海量无标注文本;监督微调回答“该怎么用知识回答”,靠有标准答案的示例 |
| 领域微调 | 强调“为哪个领域调”,监督微调强调“用什么信号调”,两者可以重叠 |
| LoRA | 回答“参数怎么更新”,冻结原参数、只训外挂小矩阵;可与监督微调组合使用 |
| RLHF / DPO | 给的是“哪个回答更好”的比较信号,解决合不合意;监督微调给标准答案,解决会不会按要求做 |
提示词工程则不在训练层面:它只改输入的提示词,参数不动,零训练成本、随时可换。想让模型换个说法,先改提示词;想让模型稳定地换一种回答方式、长期生效,才轮到监督微调。
数据质量为什么压过数量:LIMA 的提示
2023 年的 LIMA 研究提供了一个有力的例证:研究者只用 1,000 条精心挑选的指令和回答示例,对一个 650 亿参数的 LLaMA 模型做标准监督微调,没有用强化学习和偏好数据,模型在受控人工评测中,43% 的回答被认为不输于 GPT-4。结论是,模型的大部分知识在预训练阶段已经学到,少量高质量示例足以教会它如何输出。
这个结论不能被读成“1,000 条就够了”。LIMA 的 1,000 条高度精选,覆盖了不同任务和回答风格,筛选成本本身很高。更准确的读法是:质量决定下限,数量决定覆盖面。几千条干净、一致、覆盖真实任务的示例,常常胜过几十万条来源混杂、风格矛盾的爬取数据。脏数据教出的不是更聪明的模型,而是更自信地用错误格式回答的模型。
三个常见误解
误解一:监督微调能给模型补新知识。它补的是“做法”,不是“知识”。示例里的事实,模型可能记住只言片语,但靠问答示例系统地教新知识效率很低,还容易让模型把没把握的内容也说得斩钉截铁。知识更新快的内容,更适合用继续预训练或检索增强处理。
误解二:示例越多,模型越听话。示例多到一定程度,收益递减,风险却上升:重复导致过拟合,矛盾导致标准混乱,低质示例直接把坏习惯写进参数。评判数据集的标准不是条数,而是每条示例是不是真实任务里想要的回答、风格是否一致、覆盖面有没有缺口。
误解三:做完监督微调,模型就对齐了。它只教“标准答案长什么样”,不教“两个都不错的答案哪个更好”,也不自动解决价值判断和安全尺度。回答得很像样、内容却是编的,敏感问题上把握不好分寸,都需要偏好数据、专门的安全示例和持续评测来补。
什么时候该用它,什么时候还不够
当目标是“让基座模型变成能稳定干活的助手”时,监督微调往往是第一选择:客服按固定话术回答、按指定格式输出内容、把文档改写成统一风格。任务形态稳定、有高质量示例、评测标准清楚,三个条件凑齐,它的性价比很高。
当问题出在别处时,它就不是合适的工具。知识天天变,靠示例追不上更新速度;需要的是“在几个回答里挑更好的”,那是偏好学习的活;模型连基本能力都没有,示例再精也变不出预训练没给的本事。动手前先问一句:缺的是“做法”还是“知识”还是“判断”?答案是做法,才轮到监督微调出场。判断一轮监督微调好不好,看三处:没见过的指令能不能按要求作答,旧的通用能力有没有保住,评测集上的格式、事实和安全表现是不是同时过关。