2026年10月8日
10 后训练与微调:学会对话
后训练是预训练之后的第二个阶段。上次说到,预训练得到的基础模型只会续写,不会回答。后训练要做的,就是把一个"博学但不懂交流"的续写机器,变成一个能理解指令、以助手身份回应的对话模型。
用一个比喻:预训练像一个人读遍了图书馆里的所有书,知识渊博,但从没和人对话过;后训练则像是入职培训,教他如何理解别人的需求、怎样回答才有帮助、什么事情不该做。
后训练通常包括以下几个步骤。
第一步:监督微调(SFT)
准备大量高质量的"指令—回答"示范数据,比如:用户问"把这段话翻译成英文",配上一个优秀的翻译结果;用户问一个编程问题,配上一个清晰正确的解答。这些数据通常由人工编写,或者由人筛选、修改模型生成的内容。
训练方法和预训练几乎一样,仍然是"预测下一个 token",只有两点不同:
- 数据被套进了对话模板。 也就是 01 篇讲的
<|im_start|>user ... <|im_end|>那种格式。模型正是在这一步学会了识别角色标记、理解"system 内容优先级更高"、在回答结束时输出结束标记。 - 只对助手部分计算损失。 用户的问题只作为输入,模型不需要学会"预测用户会问什么",只需要学会"在这个问题后面,应该怎样回答"。
数据量相比预训练小得多,但效果立竿见影:模型从"续写问题列表"变成了"回答问题"。
第二步:偏好对齐
SFT 让模型学会了回答的格式,但有个局限:它只能模仿示范数据,而对很多问题来说,很难写出"唯一正确的标准答案"。什么样的回答更有帮助、更诚实、更得体,往往需要比较才能判断。
于是有了偏好对齐。最经典的方法是 RLHF(基于人类反馈的强化学习):
- 让模型对同一个问题生成多个回答。
- 请人类标注员比较,选出更好的那个。比较比直接打分容易,也更一致。
- 用这些比较数据训练一个奖励模型,让它学会预测"人类会更喜欢哪个回答"。
- 用强化学习优化对话模型:模型生成回答,奖励模型打分,分数高的回答方式被强化,分数低的被削弱。
这一步也是在调整参数,但目标不再是"预测出示范数据中的下一个 token",而是"生成奖励更高的回答"。
RLHF 流程复杂、训练不稳定,所以后来出现了一些简化方法,比如 DPO,它跳过了单独训练奖励模型的步骤,直接用偏好数据调整模型。另外,Anthropic 提出过一种叫 Constitutional AI 的方法:先写下一组原则,再让 AI 依据这些原则来评判和改进回答,减少对大量人工标注的依赖。
第三步:针对推理的强化学习
这是近两年变得非常重要的一步。对于数学、编程这类答案可以自动验证的任务,不需要人来判断好坏:数学题的答案对不对、代码能不能通过测试,程序就能检查。
于是可以让模型大量尝试解题,答对了就给奖励,答错了就没有。在这个过程中,模型会自己摸索出有效的解题策略,比如把问题分解成步骤、检查中间结果、发现错误后换一种思路。现在很多模型具备的"先思考再回答"能力,主要就是通过这种训练获得的。还记得之前说的"每个 token 不可撤回,一步错步步错"吗?推理训练正是让模型学会了在思考过程中自我纠错。
后训练教会了模型什么
把这几步合起来,模型学会了:
- 识别对话格式和角色,遵守 system prompt
- 理解指令的真实意图,给出有帮助的回答
- 拒绝有害请求,在不确定时承认不知道(虽然不完美)
- 调用工具:按特定格式输出工具调用请求,并理解拼回来的工具结果
- 多步推理和自我检查
注意,后训练基本不增加新知识,知识主要来自预训练。它改变的是模型如何组织和表达已有的知识,以及在什么情况下怎样行动。
我们自己做的微调
最后说说标题里的"微调"。模型公司做的 SFT,和开发者自己做的 fine-tuning,本质上是同一种技术,区别只在于规模和目的。模型公司用它把基础模型变成通用助手,你用它把通用助手调整到特定任务上,比如固定的输出格式、特定的语气风格、某个领域的专业术语。
开发者微调时有几点需要注意,正好可以用之前讲过的概念来理解:
容易过拟合。 你的数据通常只有几百到几千条,而模型有数十亿以上的参数。训练轮数太多,模型就会死记这些样本的表面特征。
可能遗忘原有能力。 如果学习率太大,参数被大幅改动,模型可能在你的任务上变好了,却丢掉了通用能力,这叫灾难性遗忘。所以微调通常使用较小的学习率。
LoRA 等高效方法。 为了降低成本和遗忘风险,常用的做法是冻结原有的全部参数,只额外训练一小组新增参数(通常不到原模型的 1%)。这样既省显存,又能最大程度保留原有能力。
适用场景要分清。 回到第一轮聊过的原则:想让模型知道新信息,优先用 RAG,把资料放进 context;想让模型表现得不一样,比如稳定的格式和风格,才考虑微调。这和"预训练提供知识、后训练塑造行为"的分工恰好是对应的。