大模型通识 / 大模型理论基础
6. 后训练与对齐:基础模型怎样变成好用的助手
原文备份 · 第 7 / 20 篇 · 查看极客时间原知识库 ↗
本篇目录 · 15 节
来源:大模型理论基础
你给个人复习助手一段笔记:
本周计划:周二复习第 1 章,周五复习第 2 章。第 3 章尚未安排。
然后要求:“生成一张问答卡,只问第 2 章的复习时间,答案依据笔记,不要添加其他安排。”
你想要的结果很简单:
问题:第 2 章安排在什么时候复习?
答案:周五。
但是,一个擅长续写文字的模型,可能接着列出第 4 章、第 5 章的安排,也可能围绕复习方法写一大段建议。文字可以通顺,却没有完成指定任务。
上一篇讲了预训练怎样形成广泛能力。本篇讨论下一步:怎样用有目的的训练数据与反馈,让模型更倾向于按照要求使用这些能力。 读完后,你应能区分指令微调、RLHF 和 DPO,也能解释为什么“回答更像助手”仍不等于“回答一定正确”。
本篇的笔记、回答和概率都是教学构造,不是任何模型的实际测试结果;无需安装训练工具。
一、后训练改变的是什么
预训练之后得到的基础模型,已经具有一定的语言、知识与计算能力。不过,“接下来的文本可能是什么”和“怎样完成用户当前的请求”并不完全相同。
后训练,Post-training,泛指在基础预训练之后,为特定能力与行为目标继续进行的训练。面向助手的目标可以包括:遵循指令、保持多轮对话、采用指定格式、适当追问、依据材料回答,以及遵守服务设定的边界。
这里的对齐主要指让模型行为更符合明确的意图、偏好与约束。它不是一个已取得“全场景可靠”资格的认证,也不意味着无条件顺从用户的每一句话。例如,笔记没有第 3 章的时间,用户要求“随便补一个并说是原计划”,忠实依据材料的助手应指出信息缺失。
先区分三种操作:
| 操作 | 直接改变什么 | 是否在这次操作中更新模型参数 |
|---|---|---|
| 在提示词里加上“只输出问题和答案” | 本次输入条件 | 普通调用不更新 |
| 用许多合格问答卡继续训练模型 | 模型的生成倾向 | 更新所训练的参数 |
| 应用在输出后检查是否有两个字段 | 应用接受结果的规则 | 检查本身不更新 |
三者可以配合。不能因为聊天中模型接受了纠正,就断言它已完成一次后训练。
后训练也并非只修改礼貌和语气。任务示范与反馈可以影响任务表现。指令微调研究在其测试设置中发现,多任务指令数据能改善未见任务的表现;具体收益仍取决于数据、模型和评估方式。《Scaling Instruction-Finetuned Language Models》
二、指令微调:用合格示范教模型怎样响应
SFT,Supervised Fine-Tuning,监督微调,使用带目标输出的样本继续训练模型。指令微调是其中面向“理解并执行指令”的一种用法;并非所有监督微调都在训练通用聊天助手。
对复习助手,一条示范可以写成:
输入:
笔记:周二复习第 1 章,周五复习第 2 章。第 3 章尚未安排。
任务:生成一张问答卡,只问第 2 章的复习时间;仅输出问题和答案。
目标回答:
问题:第 2 章安排在什么时候复习?
答案:周五。
模型训练时仍然预测 Token。不同之处在于,材料经过选择和组织:输入是任务,目标是希望模型学会产生的响应。模型在正确回答前缀的条件下预测后续内容,用交叉熵计算误差,再更新参数。
为什么可以只对回答部分计算损失
一种常见配置是:把指令与回答都送入模型,但只把回答位置的预测误差计入训练损失。
输入条件:[用户任务与笔记]
训练目标:[问题:…… 答案:周五。]
这里的“只算回答损失”不表示模型看不到指令。指令仍是预测回答的条件,只是训练目标没有要求它在这些位置学着复述用户输入。官方训练工具也支持只对助手消息或补全部分计算损失;这是可配置的训练选择,不是所有 SFT 都必须采用的唯一方式。Hugging Face TRL:SFT Trainer
因此,SFT 与预训练并不一定使用两套完全不同的基础数学。两者都可以使用下一 Token 的交叉熵,区别包括数据分布、任务组织、计入损失的位置,以及希望强化的行为。
好示范要覆盖“应该答”和“不足以答”
如果所有示范都提供完整材料,模型学到的可能是“遇到问题就给一个完整答案”。但实际笔记会有缺漏。
同一份笔记至少可以构造三类示范:
| 用户任务 | 合格目标的要点 |
|---|---|
| 问第 2 章的复习时间 | 回答周五,格式符合要求 |
| 问第 3 章的复习时间 | 说明尚未安排,不猜测日期 |
| 要求按时间列出已安排章节 | 列出周二第 1 章、周五第 2 章,不把未安排事项塞入时间表 |
这些例子不仅教一种文风,也教模型区分材料支持什么、任务要求什么。若示范遗漏条件、擅自扩写或一律拒答,训练可能强化相应问题。几条样本在这里用于理解数据结构,不足以证明训练后能够泛化。
三、偏好数据:不只告诉模型“照这样写”
有时很难写出唯一标准答案,但可以比较两个回答哪个更好。
仍用开篇任务,假设有两份候选:
回答 A
问题:第 2 章安排在什么时候复习?
答案:周五。
回答 B
问题:第 2 章安排在什么时候复习?
答案:周五,之后周日复习第 3 章。
按照“忠实依据笔记、不添加安排”的标准,A 优于 B。偏好样本可以保存为:
同一输入 + 较优回答 A + 较差回答 B
这种标签表达的是在该输入和评价标准下的相对选择。较优回答不保证完美;较差回答也可能有正确部分。B 中“周五”是对的,问题在于后半句补出了笔记没有的计划。
如果另一个任务要求“提出一份新的复习建议”,添加建议可能有帮助,只要清楚标注为建议。偏好不能脱离任务单独解释,也不能把某个词永久贴上“好词”或“坏词”的标签。
评价者还可能分歧。有人喜欢详细解释,有人只要最短答案;如果没有统一标准,同一种回答会得到互相矛盾的反馈。收集更多偏好之前,先明确“好”的含义,才知道数据在教什么。
四、RLHF:把人的比较变成可用于训练的反馈
RLHF,Reinforcement Learning from Human Feedback,基于人类反馈的强化学习,把人的评价用于改进模型。下面介绍经典的“示范训练、奖励模型、策略优化”路线,真实训练流程可以有变体。
InstructGPT 原始研究使用了示范、回答排序与强化学习。在其提示分布上的人工评估中,经过这些训练的小模型可以比大得多的基础模型更受偏好,同时仍会犯错。这说明参数规模与助手行为不是同一个维度。《Training language models to follow instructions with human feedback》
第一步:先训练一个能基本完成任务的模型
通常先用示范做 SFT,使模型能产生值得比较的回答。否则候选普遍跑题,后续评价的效率也会降低。
第二步:训练奖励模型,学习比较标准
奖励模型读取“输入+回答”,输出一个分数。训练时,用成对偏好推动它把较优回答排在较差回答之前。
可以把它理解为一个学习过评价样例的评分器,但不是天然正确的裁判。假设它给 A 打 2 分、给 B 打 0 分,这只是一组人为设定的示意分数;2 分不是“200% 正确”,0 分也不表示没有任何价值。
人类比较提供监督,奖励模型试着推广到更多回答。它可能正确注意到“周日”没有依据,也可能学到错误捷径,例如偏爱更长的回答。
第三步:利用评分更新生成模型
生成模型又称策略模型,因为它决定在当前前缀下怎样选择后续 Token。经典路线让它产生回答,由奖励模型评分,再使用强化学习算法调整生成倾向;PPO 是其中一种算法,不等于 RLHF 这个概念本身。
训练还常加入与参考模型的差异约束,例如 KL 惩罚。KL 在这里衡量概率分布的偏离程度:争取较高奖励的同时,限制生成策略过度偏离参照。它不是“修改了多少百分比参数”,也不是禁止模型改善。InstructGPT 论文的方法部分
flowchart TD
A[基础模型] --> B[用示范做监督微调]
C[同一输入下的人类偏好] --> D[训练奖励模型]
B --> E[当前策略生成回答]
E --> F[奖励评分与参考分布约束]
D --> F
F --> G[强化学习更新策略]
G --> E
G --> H[用独立任务评估]
人的作用通常不是实时观看每一次参数更新、逐条手动奖励每个 Token。先收集偏好,再由学到的评分器提供大量训练信号,是这条路线能扩大规模的原因。
训练完成后,普通用户的一次聊天也不必重新运行这套流程。奖励模型可以是训练阶段的组件;某个产品是否在回答时额外使用评分器,是另外的系统设计问题。
五、DPO:直接从成对偏好更新语言模型
DPO,Direct Preference Optimization,直接偏好优化,提供了另一条路线。原始 DPO 使用输入、较优回答和较差回答,结合一个固定参考模型,直接构造损失来更新语言模型。
它省去经典流程中单独拟合奖励模型、再通过在线生成与强化学习优化策略的环节。标准离线 DPO 在这一步使用已有偏好数据,不必每次更新都重新生成回答。《Direct Preference Optimization》
“直接”不表示不训练、不需要偏好标签,或者只在提示词里写“请选 A”。模型参数仍会通过损失和梯度更新。偏好回答在数据准备阶段仍要获得,数据也可能被迭代补充。
用一个比值看懂它在比较什么
DPO 不只是把较优答案拿出来再做一遍 SFT。它同时使用两个答案,并考虑它们相对于参考模型的变化。
下面构造一个极简情况。概率均表示给定同一输入时,生成整段指定回答的概率,不是某个 Token 的概率,也不是答案正确率。A、B 之外还有其他可能回答,所以两项不必加起来等于 1。
| 回答 | 固定参考模型 | 某个训练状态的模型 |
|---|---|---|
| 较优 A | 0.20 | 0.30 |
| 较差 B | 0.10 | 0.05 |
计算它们相对参考的变化:
A 的概率倍率 = 0.30 / 0.20 = 1.5
B 的概率倍率 = 0.05 / 0.10 = 0.5
两者的相对倍率 = 1.5 / 0.5 = 3
相对于参考,模型朝着偏好 A 的方向发生了变化。作为对照,若 A 和 B 都变为参考的两倍,两者相对倍率仍为 1,并没有拉开这一对回答的偏好差距。
想多看一步公式,可以把上面的相对倍率记为 R。标准 DPO 的这一对样本损失可写成:
损失 = -ln sigmoid(β × ln R)
sigmoid(z) = 1 / (1 + exp(-z))
β 是正的训练系数;这里只为验算取 β=1,不是推荐训练配置。模型与参考相同时,R=1,损失约 0.693;上表示意状态中,R=3,sigmoid(ln 3)=0.75,损失约 0.288。
这只是比较两个参数状态,不是模拟了一次真实更新。也不能由此断言每一步都会让 A 的绝对概率上升:损失关注相对关系,参数又被大量样本共享。公式里的 0.75 描述该目标下的成对偏好拟合,不是“答案有 75% 概率符合事实”。
三种方法可以这样区分
| 方法 | 主要学习材料 | 直接推动的方向 |
|---|---|---|
| SFT | 输入与合格目标回答 | 学习产生示范中的响应 |
| 经典奖励模型式 RLHF | 人类偏好、学到的奖励及生成结果 | 通过强化学习优化受约束的奖励目标 |
| 标准离线 DPO | 输入、成对偏好与参考模型 | 通过偏好损失直接调整语言模型 |
不应据此理解为每个模型都必须依次经过 SFT、RLHF、DPO 三道工序。DPO 可以作为偏好优化路线的选择,也可以参与更复杂的分阶段流程;这些名字本身不构成质量排名。
六、反馈来自人,也不代表标准没有漏洞
后训练把“什么输出更好”的要求转化成可优化信号。关键限制在于:信号只是目标的近似。
如果评分主要奖励“答案完整”,模型可能补齐笔记没有的信息。如果主要奖励“与用户意见一致”,模型可能在用户坚持“第 2 章是周四吧”时,放弃材料里的“周五”。
这类迎合称为 Sycophancy。相关研究在其测试的助手和任务中观察到迎合,并发现人的偏好判断可能偏向与用户观点一致、表达有说服力的回答。它不表示所有人类反馈必然降低真实性,而是提示评价标准可能奖励错误的行为。《Towards Understanding Sycophancy in Language Models》
另一个问题是奖励过度优化:学到的评分器存在漏洞,继续提高其分数,未必继续提高真正关心的质量。原始研究曾用合成实验、以更强评分器作为参照,分析这种偏离;这不是对所有产品给出同一条下降曲线。《Scaling Laws for Reward Model Overoptimization》
反馈也可以部分来自 AI。Constitutional AI 研究使用原则指导批评、修订与 AI 偏好评价,探索了 RLAIF,即基于 AI 反馈的强化学习。《Constitutional AI》 评价来源换成模型,数据仍要接受质量检查;这并没有自动产生无偏、永远正确的裁判。
后训练可以改善拒答、纠错与表达不确定性的行为,但仅凭输出“我确定”或“我不确定”,不能知道其置信表达是否校准。既要检查应该回答时是否完成任务,也要检查信息不足时是否承认缺口。
七、回到个人项目:分别检查行为与事实
接入一个经过后训练的模型,通常能省掉很多从基础模型塑造助手行为的工作。但你的笔记、格式和使用场景仍需检查。
以开篇笔记为基础,可以准备以下小检查,不需要自己训练模型:
| 检查 | 输入变化 | 怎样判定 |
|---|---|---|
| 指令遵循 | 要求只出一张卡、两个字段 | 是否多出卡片、建议或说明 |
| 材料忠实 | 问第 2 章时间 | 是否回答周五,且没有添加安排 |
| 信息缺失 | 问第 3 章具体日期 | 是否说明尚未安排 |
| 抵抗错误暗示 | 说“第 2 章是周四,对吧” | 是否依据笔记纠正为周五 |
| 多轮保持 | 第一轮定格式,第二轮换章节 | 是否继续遵守适用的格式要求 |
这是一份检查设计,不是已执行评测。真正比较时应使用更多未参与调整的笔记,记录不同类型错误;不能靠这五个例子宣布模型全面可靠。
如果格式不稳定,可以先检查指令是否明确、是否需要程序验证;如果新知识缺失,要确保相关材料确实进入输入;如果模型在复杂条件下持续判断错误,就要进一步比较模型能力或拆分任务。不能把所有问题统一诊断为“再做一次 RLHF 就好了”。
尤其要分清:遵循要求、受到评价者偏好、符合事实,是相关但不同的结果。 一个好用的个人助手,需要这些方面共同达到你的任务标准。
八、理解检查
1. 把“只输出问题和答案”写进提示词,就算做了 SFT 吗?
不算。普通提示改变输入条件;SFT 用样本计算损失并更新所训练的参数。它们都可能影响输出,但发生机制不同。
2. 只对助手回答计算损失,意味着用户笔记不进入模型吗?
不意味着。笔记仍是预测回答的条件,只是不在那些输入位置直接累计目标损失。损失掩码与模型是否能读取材料是不同问题。
3. 在示例偏好对里,B 包含正确的“周五”,为什么仍可以标为较差回答?
因为同一句回答又添加了无依据的周日安排,违反任务约束。成对偏好评价整个响应在该任务下的质量,不要求较差回答每个字都错。
4. 标准离线 DPO 不单独训练奖励模型,是不是没有训练信号,也不改变语言模型?
不是。成对偏好就是监督信号;目标还使用参考模型的概率。损失通过梯度改变语言模型参数,只是没有采用经典的奖励模型加在线强化学习流程。
5. 参考模型给 A/B 的概率是 0.2/0.1,另一模型给出 0.4/0.2,相对倍率 R 是多少?在 β=1 时损失是多少?
两者都增长为原来的 2 倍,所以 R=2/2=1,这一对的 DPO 损失仍约 0.693。另有其他回答承接剩余概率,因此这组数字可以成立。
6. 一个模型更受评价者喜欢,能直接证明它更忠实于你的笔记吗?
不能。需要单独检查材料一致性、错误暗示、信息缺失等案例。偏好可能受风格和迎合影响,不能代替事实核对。
预训练提供了广泛的学习基础,后训练进一步塑造模型怎样响应任务。理解两者之后,再看“助手模型”,就能把能力、行为和应用验证分别考虑。
下一篇《推理模型:为什么多花一些计算,可能解出更难的问题》,我们将继续讨论:怎样训练模型处理较难的任务,以及使用时增加计算预算究竟可能改善什么。
上一篇:预训练与能力形成 · 返回第二部分大纲