第3章 后训练:行为的塑形
预训练说明了数据、目标函数、Tokenizer、规模和算力如何形成基础能力,但预训练模型学到的首先仍是“像训练语料一样继续写”。产品需要的却是理解当前指令、遵守格式和边界、在不确定时说明限制,并在协作中稳定完成任务。能力形成与行为可用之间的差距,就是后训练要处理的问题。
本章的判断是:SFT、偏好优化和可验证奖励分别解决“应该怎样做”“多个可行答案哪个更好”以及“任务结果是否可判定”三类问题。它们能塑造模型的默认行为,却不能替代实时事实、权限判断与审计;这些边界要由模型之外的组件承担。
3.1 行为目标与监督契约
flowchart TD A["任务要求"] --> B["逻辑消息与角色"] B --> C["模板化为 token"] C --> D["可读取的位置"] C --> E["被监督的目标"] D --> F["条件概率"] E --> G["有效目标分母"] F --> H["训练目标"] G --> H
预训练模型留下的行为缺口
GPT 类模型通过 next-token prediction 学会了语言和大量文本模式,但训练目标没有直接告诉它什么是“有帮助的回答”。用户输入“帮我解释这个报错”,基础模型可能续写一段论坛帖子、模拟多个角色,或者直接生成一个没有上下文依据的修复方案。它在语言概率上可以很自然,在任务目标上却可能完全错误。
早期迁移学习主要在下游任务上训练分类器或序列到序列模型,解决的是任务准确率;大模型产品还需要处理意图理解、回答风格、拒答边界、格式遵循和多轮协作。FLAN 的工作表明,把许多任务改写成自然语言指令并进行混合微调,可以提升模型的零样本泛化 [1];InstructGPT 则把示范学习、偏好建模和强化学习组合成完整的助手训练流程 [2]。
这条路线经历了几个关键转折:先用 instruction tuning 解决“听不懂指令”,再用 preference learning 解决“多个可行答案如何排序”,随后用 Constitutional AI 和 RLAIF 扩大安全反馈,最后把可验证奖励用于数学、代码和复杂推理。每一步都解决了一个瓶颈,同时引入新的优化对象和新的评估风险。
| 原始问题 | 代表方法 | 主要效果 | 新限制 |
|---|---|---|---|
| 模型只会续写,不会按指令做事 | 指令微调、SFT | 学会任务格式与回答角色 | 依赖示范质量,容易模仿错误 |
| 多个答案都能完成任务,但质量不同 | 人类偏好、Reward Model | 学会帮助性、真实性和风格偏好 | 奖励是代理,存在 reward hacking |
| 在线 RL 流程昂贵且不稳定 | DPO、IPO、KTO、ORPO | 直接从偏好数据优化策略 | 仍依赖偏好覆盖;是否需要参考模型取决于方法 |
| 人工安全标注昂贵、覆盖有限 | RLAIF、Constitutional AI | 用原则和 AI feedback 扩展数据 | judge 偏差会被放大 |
| 长链推理难以用主观偏好衡量 | RLVR、过程验证、GRPO | 用可验证结果换推理成功率 | verifier 漏洞会成为新攻击面 |
因此,“对齐”不是单一算法,而是一组逐层改变行为的训练和评估方法。后续小节会分别说明它们依赖什么数据、优化什么目标、何时适用,以及哪些问题不能交给权重解决。
SFT本身就是后训练的一部分,不应把“做完SFT再开始后训练”写成阶段定义。目标需要区分任务能力、指令遵循、偏好质量和安全约束;知道怎样生成SQL,不等于会按JSON输出,更不等于拥有执行删除的权限。后训练能够改变候选行为,授权必须由外部系统执行。
模板是输入协议,mask是监督协议
采用模型结构的 \(B,T,D\) 与预训练的概率定义。聊天模型实际看到的是角色、内容、分隔符与特殊token形成的序列。先固定底座、Tokenizer和chat template修订,再格式化样本;不要把一份对话JSON直接当成所有模型都能理解的通用协议。Transformers v4.45.2文档说明,模板已经负责特殊token时,后续重复添加可能破坏格式;训练也不能无条件插入只用于生成的assistant起始提示。[3]
教学上,样本分两层保存:逻辑消息层记录system/user/assistant/tool角色、工具调用ID与结果;token层记录input_ids、attention可见性和labels。训练可选择监督所有assistant轮,也可只监督最后一轮,二者都需明示。用户问题、系统文本和工具结果通常作为条件,不作为本章assistant-only目标的直接标签。这是本书选择的训练契约,不是所有框架的默认行为。
假设一条简化序列由 BOS U Q A R EOS PAD 七个token组成:U/A是角色,Q是用户内容,R是助手内容,符号只是教学占位,不是某Tokenizer的实际ID。若只监督R与EOS,则位于A的logits预测R,位于R的logits预测EOS;其他预测位置的损失权重为零。工具名和参数若属于assistant动作,应被监督;工具实际返回内容则作为后续条件,不能训练模型伪造工具成功。
| 记录对象 | 含义 | 必查错误 |
|---|---|---|
| input_ids | 模板化后的完整条件序列 | 重复BOS/EOS、角色错位、截断动作参数 |
| attention mask | 当前token可以读取哪些位置 | padding、跨样本、未来目标泄漏 |
| loss mask / labels | 哪些目标token贡献梯度 | 把用户或工具内容当助手目标 |
| shift约定 | logits位置与下一目标的对应 | 模型内部已shift,外部又shift一次 |
这两种mask不可互换:一个不计入loss的用户token,仍可以被助手读取;一个padding位置不仅不监督,还应按模型实现处理可见性。EOS是应学习何时结束的有效目标,PAD是补齐而非答案。若两者共用ID,仅按ID屏蔽会误删真正EOS监督,应结合有效长度和角色边界构造labels。
从数据划分到反馈覆盖
多轮样本要按轮次和角色保存,再按同一逻辑任务分组:同一任务的不同轮次、改写版本和生成负例先归入一组,再划分训练、验证与测试,最后各自 packing。独立任务之间需要隔离可见性,不能只插入 EOS 就假定切断了注意力。训练集用于拟合,验证集用于调参,冻结测试集不反复挑选模型。
样本版本要同时记录输入协议(Tokenizer、模板)、监督位置和数据来源。模板或监督范围一变,同一份对话的标签就变了,“离线学会了某种输出”可能只是学会了已经过期的接口。
监督契约先回答一个比“用什么算法”更早的问题:同一份记录里,哪些内容是模型当时已经知道的条件,哪些内容才是希望它产生的动作。下面以一个贯穿本章的教学任务说明。用户要求定位某次告警的原因,输入只有时间范围和服务名称;助手先生成查询参数,工具返回两条日志,其中一条证据尚不充分;助手随后输出带引用的候选解释。训练样本不能把稍后才取得的日志提前塞进第一次查询的条件,也不能把人工事后确认的根因写成模型当时已经观察到的事实。否则优化器可以正常下降,训练任务却已经被改变成一个有答案泄漏的容易问题。
这里存在三种不同的“正确”。消息序列正确,是事件按实际可观察顺序排列;动作正确,是给定当时的信息选择了合适的查询或回答;结果正确,是最终解释得到独立证据支持。一次任务最终成功,不代表其中每一步都值得模仿。例如助手第一次查询用了错误时间范围,碰巧在第二次猜中了;把整条轨迹不加区分地用于监督,会同时强化正确结论和错误查询。反过来,工具临时不可用导致任务失败,也不代表助手选择的查询参数错误。标签必须落在所选择的监督对象上,不能直接从最终成功标签推出每个中间动作的质量。
一个有用的数据检查是“前缀可重放”:遮住目标动作及之后的事件,只向审核者展示目标前缀,再判断能否得到该动作。如果只有看完未来结果才认为动作合理,样本就需要重新标记。这个检查是本书根据条件概率定义提出的方法,不是对某个已运行数据集的结论。它尤其适用于多轮修复、交互编程与工具轨迹,因为这些场景的观察顺序本身就是问题的一部分。自然语言叙述可以把事件倒叙,训练协议则必须明确模型究竟在哪个时刻做决定。
损失掩码还不能通过字符长度粗略推算。一个汉字可能被编码成一个或多个 token,角色分隔符也可能不是普通字符串;先单独编码用户文本,再把长度相加,不一定等于对完整模板一次编码所得的边界。应使用模板提供的可靠角色区间或经核验的 token 对齐方式,在完整序列上构造监督位置。对同一个样本同时打印逻辑角色、token ID、可读文本片段和是否计入损失,才能观察标签到底落在了内容、分隔符还是下一轮起始处。样本级标签正确但 token 级错位,仍然是在训练另一个任务。
截断也有语义。假设目标是一个带三个必填字段的结构化动作,长度上限只留下前两个字段及半个字符串。若仍把截断片段作为完整好答案,模型会收到“在半个动作处停止也合理”的信号。另一种截断可能保留答案却删掉唯一支持它的证据,使原本有依据的示范变成无依据断言。可选策略包括丢弃样本、缩短非必要上下文、重新生成合法目标或按明确的部分输出任务监督;不存在一个适合所有数据的无条件截尾规则。评估集也应统计截断比例,否则任务分数变化可能只是进入训练的样本集合改变了。
多轮监督范围决定了同一段对话被使用多少次。若把每一轮分别展开成一个前缀—回答样本,早期消息会反复作为条件,早期助手回答还可能在多个样本里重复被监督;若在完整对话中一次监督所有助手轮,重复权重又不同。这两种组织都可以合理,但不能把“消息数量相同”当作训练权重相同。对包含长工具输出的任务,还应区分总输入 token 与有效目标 token:前者影响前向成本,后者进入本章的监督分母。大量工具文本可以耗费很大计算,却没有增加同等数量的助手目标。
划分数据时,独立单位最好对应生成事实的来源,而非最后导出的行号。一个工单的原问题、中文改写、英文翻译和合成负例若分散到训练与测试,模型可能凭共同细节识别任务;随机切分行数并不能消除这种关联。应先按工单、原始文档、题目家族或去重簇分组,再划分,最后在各自集合中执行采样和打包。这个流程牺牲了一部分表面样本数量,却让留出误差更接近对新任务的判断。若所有数据都来自同一套模板,还需要另设模板外的测试,否则只证明模型记住了表达形式。
最后,示范、偏好和奖励是三种不同的数据接口。示范给出一条希望模仿的序列;偏好说明在同一条件下两个候选的次序;奖励把生成轨迹映射成可优化数值。不能因为示范答案“很好”就默认所有其他回答都是负例,也不能因为一个答案赢过明显错误答案就认为它达到上线标准。后续三种目标的推导都依赖这个区别:监督学习拟合目标内容,成对学习拟合相对关系,强化学习则需要在采样分布上解释反馈如何改变行为。
3.2 SFT:从示范到条件分布
flowchart TD A["示范前缀"] --> B["预测下一目标"] B --> C["有效位置负对数概率"] C --> D["按 token 或样本归一化"] D --> E["参数更新"] E --> F["自由生成"] F --> G["留出任务与错误前缀检查"]
SFT 的数据结构与损失
监督微调通常使用 \((x,y)\) 样本,其中 \(x\) 是系统、用户和上下文,\(y\) 是目标助手回答。对多轮对话,训练一般只对 assistant token 计算损失,避免模型把用户问题也当作需要模仿的输出。对单个样本按有效目标 token 取平均时,目标为:
\[ \mathcal{L}_{\text{SFT}}^{\text{example}}(\theta) =-\frac{1}{|\mathcal{A}|}\sum_{t\in\mathcal{A}} \log \pi_\theta(y_t\mid x,y_{<t}), \]
其中 \(\mathcal{A}\) 表示被监督的 assistant token 位置。mask 设计很重要:如果系统消息、工具结果、用户内容和助手答案边界处理错误,模型会学到错误的角色关系,表现为复读用户输入、泄露隐藏提示或把工具返回内容当成自己的指令。
批量训练还必须说明样本如何加权。若先汇总批内所有有效目标 token,再除以有效 token 总数,每个 token 权重相同,目标为 \(\mathcal{L}_{\text{SFT}}^{\text{token}}=-\sum_b\sum_{t\in\mathcal A_b}\log\pi_\theta(y_{b,t}\mid x_b,y_{b,<t})/\sum_b|\mathcal A_b|\),较长回答因包含更多目标 token 而贡献更多总权重;若先对每个样本按 \(|\mathcal A_b|\) 取平均,再对批内样本取平均,则每个样本权重相同。两者不是同一个目标,不能只写“mean reduction”而省略分母。监督位置还要覆盖 EOS——它是“该在哪里停下”的监督信号,漏掉会削弱停止位置的直接监督,但不能据此断言模型必然无限续写;padding 位置不仅要排除出损失,还要按实现约定处理注意力可见性。这些约定直接决定模型学到什么。
SFT 数据不必是“知识百科”。它主要塑造输入到输出的映射,包括任务分解、回答结构、拒答模板、工具调用格式、引用方式和不确定性表达。Self-Instruct 通过模型生成和筛选指令数据,展示了如何在人工种子有限时扩展任务覆盖 [4];LIMA 则指出,少量但一致、高质量的示范也能带来显著的对齐效果 [5]。这两项工作共同提醒我们:数量和质量不是简单替代关系,数据覆盖与示范一致性必须一起看。
数据设计:能力覆盖比表面多样更重要
一个成熟的 SFT 集合应该按任务分层,而不是把所有对话混成一个文件。常见分层包括:问答和解释、摘要与改写、结构化抽取、代码生成与修复、数学解题、多轮澄清、工具调用、拒答和安全边界。每一层都要记录输入分布、目标格式、难度、语言、工具状态和验收规则。
示范答案要尽量符合真实产品标准。若线上要求简短,训练集不能全部是教程式长答案;若线上要求引用证据,答案中就应明确区分已知事实、推断和待核验内容;若线上使用 JSON,示范应覆盖字段缺失、枚举错误、转义和失败分支;若线上允许调用工具,必须包含工具成功、超时、权限拒绝和部分结果等轨迹。
数据审核可以采用四道门:语义正确性、任务完成度、格式合法性和安全合规性。任何一道不通过,都不应仅仅因为“语言很流畅”而进入训练。对代码样本运行测试,对 SQL 样本使用只读沙箱,对数学样本执行答案验证,对事实问答保留来源字段。后训练数据的验收方式应尽可能接近上线后的验收方式。
SFT 的局限与退化模式
SFT 是模仿学习,不直接知道哪个答案在真实环境中产生了更好的结果。它会把示范中的错误、偏见、冗长和过度自信稳定地复制出来。如果所有答案都使用相同模板,模型可能在任何问题上输出模板;如果数据过度集中于某领域,通用能力可能退化;如果负面案例很少,模型不会知道何时应澄清或拒绝。
SFT 描述的是训练目标,不决定必须更新全部模型参数。需要在全量微调、LoRA、QLoRA 等参数更新方式之间选择时,见第 6 章“模型适配与能力扩展”;本章只规定监督信号和行为目标。
常见诊断包括:训练 loss 持续下降但真实任务不涨,说明可能过拟合表达风格;训练后格式更稳定但事实准确率下降,说明示范把表达优先级放得过高;安全拒答增加但正常请求成功率下降,说明边界样本比例或标签策略不合理。解决方案可能是回放通用数据、重新配比、增加难例、改用偏好数据,或者干脆在推理层加入 schema 和验证器,而不是继续增加 SFT 步数。
交叉熵定义沿用预训练;中文推导可回看《动手学深度学习》的对应章节。[6] 对assistant-only样本,只在选定位置累加下一token负对数概率,并按有效目标token数归一化。先打印每个token及其label,确认答案和EOS被监督、prompt和padding未被直接模仿;再在少量人工可核对样本上检查loss和预测。小集合能被拟合只证明管线可能正常,不证明泛化。
过拟合、遗忘与泄漏需要不同证据:训练集改善而留出集下降,先查泛化;新领域上升但通用回归下降,先查配比和学习率;留出分数异常高且命中相同工单或答案模板,先查划分。不能将三者都写成“继续训练不足”。同一底座与预算下比较数据/目标变化,才有机会确定收益来自什么。
把 SFT 看成条件分布拟合,可以解释它为何会偏向常见表达。对一个固定前缀,假设训练数据里七次使用简短说明、三次使用详细说明;在容量充足且其他条件相同的理想化情况下,最大似然会尝试匹配这些示范频率。它并不知道详细说明是否更贵,也不知道七条简短说明是否只是同一作者重复录入。样本分布因此不仅提供事实内容,也在暗中提供风格与行为的权重。数据去重、分层采样和人工修订改变的是这个经验分布,而不是训练之外的装饰步骤。
可以用一个手算比较两种分母。设样本甲只有两个有效目标 token,两个位置的负对数概率都为一;样本乙有八个有效目标 token,每个位置的负对数概率都是三。先对样本平均再对批次平均,损失是二;把所有有效 token 合并,损失是二点六。两者的差异不来自浮点误差,而来自甲、乙各占一半权重还是分别占五分之一与五分之四。若长回答主要来自某个领域,选择 token 平均就同时提高了该领域的总体影响。比较训练配方时,应先把这个隐含权重说清楚。
同样的区别会延伸到梯度累积。假设两个微批分别有很少和很多有效目标,若各自求平均后再等权累积,就得到“微批平均的平均”;只有在有效目标数相等或额外按目标数加权时,它才等价于整个更新批次的 token 平均。这里不展开分布式实现,第五章和训练平台章节会继续追踪归一化;本章要强调的是,优化器看到的梯度已经包含了数据权重选择。换一套打包长度导致效果变化,不能立即归因于模型“更擅长长文本”,也可能是监督权重发生了变化。
从单个词表位置看,交叉熵对 logits 的导数是预测概率减去目标的独热标签。因此目标 token 获得提升的方向,其他候选按当前概率承担相应调整。但共享参数把许多位置耦合在一起,一次参数更新并不保证每个训练位置的目标概率都单调上升。梯度冲突提供了一个具体解释:相同前缀在一批样本里要求简洁,在另一批里要求展开,而输入又没有告诉模型何时选择哪种行为;优化器只能折中。若希望按用户需求切换风格,最有效的修复通常是让条件和标签一致,而不是仅降低学习率。
教师强制还解释了训练损失与自由生成之间的落差。训练时,预测第三个目标 token 所用的前缀来自示范中的前两个目标;生成时,它看到的可能是自己刚刚产生的另一种表达。一个很小的早期错误会把模型带到训练数据较少覆盖的前缀,后续即使局部概率计算正确,也未必知道如何恢复。对工具任务尤其如此:把参数字段写错后,环境返回错误信息,下一步条件已经不同于成功示范。只补充更多成功轨迹,可能继续降低教师强制损失,却没有教会错误前缀下的恢复动作。
可以把训练目标与评估对象放在一个具体例子里比较。目标回答为“证据不足,先核对时间范围”,模型在标准前缀下能给这句话很高概率,但自由生成先输出了“已经确认根因”。此时后续再补一句证据不足,整个答案仍然矛盾。只计算目标句的平均损失会漏掉这种轨迹级错误;评估必须实际生成,并检查前后断言是否一致。数据改进可以加入相同观察下的澄清示范,也可以加入已经出现错误断言后的自我纠正样本,但应区分“预防错误”与“在错误后恢复”的两种任务。
合成示范带来的问题也可以按这个框架理解。Self-Instruct 提供了扩展指令覆盖的路线,LIMA 展示了精选示范的价值;它们没有给出一个对所有底座通用的数据数量阈值。基于这两类工作,本书建议把合成过程拆成任务生成、答案生成和独立验收三个环节。若同一生成器同时设计题目、写答案并给自己打分,错误可能在三步中保持一致。增加生成数量能提高表面多样性,却未必增加新的任务约束;需要按能力、输入条件和失败分支检查覆盖,而不是只看字符串去重率。
对于领域适配,回放通用数据的作用可以解释为保留旧任务的梯度约束。新领域数据推动某些共享参数朝专业表达移动,通用回放则使这些移动同时接受旧任务损失的检验。它不是遗忘的绝对保险:若配比过低、学习率过高或两类标签本身冲突,仍可能退化。比较时应画出新任务收益与旧任务损失的关系,选择可接受的折中,而不是只报告新任务最佳检查点。选择最后一个训练步、最低验证损失和最高业务分数,可能得到三个不同的模型,应提前定义选择准则。
SFT 的最小验收可以围绕可定位的反例展开。先检查目标边界,再确认少量样本能被拟合,随后比较教师强制与自由生成,最后看未见任务和旧能力。前一步失败时,后一步的总体分数通常难以解释。例如目标边界错了,增加样本数量只是更稳定地学习错误协议;小样本拟合成功却留出失败,则要查覆盖、冲突和容量。这样的顺序不是为了延迟训练,而是把每一项实验对应到一个可被否定的假设,避免同时改动数据、模板和优化器后无法解释收益来源。
3.3 RLHF:奖励、优势与 PPO 更新
flowchart TD A["旧策略采样并保存概率"] --> B["奖励与参考惩罚"] B --> C["旧价值与优势估计"] C --> D["固定优势更新 actor"] C --> E["固定回报目标更新 critic"] A --> D R["冻结参考策略"] --> B D --> F["刷新旧策略并重新采样"] E --> F
偏好数据与 Reward Model
当一个问题存在多个都能接受的答案时,很难写出唯一标准答案。例如代码解释可以简洁或详细,开放问题可以有不同论证方式,安全回答需要同时考虑帮助性和风险。RLHF 将问题转成排序:给定 prompt,让标注者比较候选回答,记录 chosen 与 rejected。
偏好学习的经典工作展示了如何从人类比较中学习奖励函数 [7]。对语言模型而言,Reward Model 接收 prompt 和 response,输出一个标量 \(r_\phi(x,y)\)。它的训练可写成 Bradley-Terry 风格的损失:
\[ \mathcal{L}_{\text{RM}}=-\log\sigma(r_\phi(x,y^+)-r_\phi(x,y^-)). \]
这个分数是标注偏好的代理,不是真实质量本身。标注者之间可能不一致,短回答与长回答的偏好可能混杂,安全和帮助性可能冲突,同一领域的专家标准也可能不同。安全评估实践还表明,偏好标准必须把“回答有用”和“回答安全”拆成可讨论的维度,而不能把所有差异压成一个没有解释的总分 [8]。数据中必须记录标注指南、样本来源、分歧率、比较难度和拒标比例,不能只保存最终的 chosen/rejected 字符串。
PPO的四种模型角色
RLHF常从SFT策略开始。Reward Model用比较信号拟合偏好,不是当前策略自己说成功就给分。PPO在rollout策略生成的数据上,用概率比和裁剪代理目标组织多轮更新;原论文并不保证clip后每一个实际参数更新都满足严格KL上界。[9]
| 角色 | 训练时职责 | 冻结与更新 |
|---|---|---|
| actor / policy | 在状态下给下一个token概率 | 当前策略更新;旧rollout概率保存 |
| critic / value | 估计当前前缀后续回报 | 拟合固定回报目标,不能预测任务事实 |
| reference | 提供相对行为锚点 | 在本轮训练中冻结,不等于旧策略 |
| reward model / verifier | 对候选结果或轨迹给信号 | 本次采样批次内固定版本与语义 |
状态 \(s_t\) 可表示提示加已生成前缀,动作 \(a_t\) 是下一个token。旧策略概率 \(\pi_{old}(a_t\mid s_t)\) 来自生成该rollout的策略快照;reference \(\pi_{ref}\) 常是冻结SFT模型,二者用途不同。模型可共享某些物理模块,但逻辑角色与梯度路径仍需区分。把它们都称为“原模型”,会使ratio、KL和缓存数据失去解释。
\[ \rho_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{old}(a_t\mid s_t)},\qquad J_{clip}=\mathbb E_t\left[\min\left(\rho_t\hat A_t, \operatorname{clip}(\rho_t,1-\epsilon,1+\epsilon)\hat A_t\right)\right]. \]
Actor最大化该代理目标,等价实现可以最小化其负值。正优势鼓励增加相应动作概率,负优势鼓励减小;裁剪改变代理目标的收益,不是直接把神经网络参数截断。更新后仍要监控实际KL、clip比例和有效样本,不能只看到目标值上升就认定策略仍接近旧分布。
实现里还有两个常被忽略的旋钮。优势归一化:按批内均值与标准差缩放优势,可以稳定更新尺度,但会让不同批次的“好”与“坏”不再可比,记录时应保存归一化前后的统计量。熵正则:在目标里加入策略熵可以维持探索、避免过早收敛到单一措辞,系数过大则会削弱对齐效果。PPO 原论文的联合目标包含可选的熵奖励项;是否启用、采用何种优势归一化及其系数属于具体配方,必须随实验记录。
GAE、终止与采集截断
GAE将多步TD残差指数加权,在方差与偏差间取舍。其原始推导针对策略梯度与价值估计;应用到语言token,需要额外明确状态、奖励位置与终态。[10] 用 \(b_t\) 表示该转移是否允许bootstrap,\(c_t\) 表示是否沿同一轨迹继续递推:
\[ \delta_t=r_t+\gamma b_tV_{old}(s_{t+1})-V_{old}(s_t),\qquad \hat A_t=\delta_t+\gamma\lambda c_t\hat A_{t+1}. \]
真正终止时 \(b_t=c_t=0\)。若只因采样长度到上限而截断一个尚未结束的任务,最后转移仍可有 \(b_t=1\),但当前采集片段不继续递推,故 \(c_t=0\);需要保存实际末状态的价值估计,不能用自动reset后的新任务状态替代。Gymnasium文档清楚区分termination与truncation的bootstrap语义。[11] 对LLM,EOS、max_new_tokens和业务超时是否代表终态,要由定义的任务目标决定,不能直接按字段名机械映射。
以下是本书手算,非训练实验。取三步奖励 \((0,0,1)\)、旧价值 \((0.2,0.4,0.6)\)、\(\gamma=1,\lambda=0.5\),最后一步真正终止,末价值按零处理。逐步倒推得到:
| t | 奖励 | 旧价值 | TD残差 | GAE优势 | 价值回归目标 \(\hat A_t+V_{old}(s_t)\) |
|---|---|---|---|---|---|
| 1 | 0 | 0.2 | 0.2 | 0.4 | 0.6 |
| 2 | 0 | 0.4 | 0.2 | 0.4 | 0.8 |
| 3 | 1 | 0.6 | 0.4 | 0.4 | 1.0 |
第三步优势是0.4,第二步为0.2加0.5乘0.4,第一步同理。若另一条采集片段第三步奖励为零且只是截断,末状态估值0.8,则第三步残差为0.2,优势依次为0.35、0.30、0.20,回归目标为0.55、0.70、0.80。若误将截断当终止,最后残差会变成负0.6,并向前污染优势。
生成数据时保存旧logprob与旧价值。Actor使用的优势应视为固定数值,不能经优势计算反向更新critic;critic拟合的回报目标也应detach,不能让目标跟着当前预测一同移动而虚假减小误差。共享主干时,两个明确的损失可以分别向主干贡献梯度,但不是通过未切断的目标路径互相追逐。归一化优势、价值裁剪和系数等属于训练配方,需要记录,不能默认为同一PPO定义。
一种教学奖励构造是每步加 \(-\beta[\log\pi_{old}(a_t\mid s_t)-\log\pi_{ref}(a_t\mid s_t)]\),并在回答末尾加偏好分。在旧策略采样的动作上,这个log比的期望对应旧策略到reference的逐状态KL;单个样本可以为负,不能把它当逐token必非负的精确KL。其他估计器和把KL放进损失的配方也存在,应单独记录。[2][9]
InstructGPT 的结果说明,少量高质量示范加上人类反馈可以显著改善指令遵循和用户偏好 [2]。HH-RLHF 工作把 helpfulness 与 harmlessness 作为不同数据和评价维度,说明对齐不能只优化一个“总分” [8]。但 reward model 只观察到有限特征,policy 可能学会让答案“看起来像高分答案”,而不是完成真实任务。
典型 reward hacking 包括:用更长的答案获得“更充分”的表面分;反复声明安全以获得无害分;使用肯定语气迎合用户;把不确定问题包装成自信结论;通过测试集模式获得奖励。发现投机的关键不是降低 reward,而是把线上目标拆成独立验收:事实用检索或引用检查,代码用执行测试,格式用解析器,安全用攻击集,用户满意度用真实任务而非单一 judge。
RLHF 需要候选生成、标注平台、偏好数据库、Reward Model 训练、在线 rollout、策略训练和评估回归。每个环节都可能成为瓶颈:候选太相似,偏好信号弱;候选太长,标注成本高;标注指南模糊,RM 学到噪声;rollout 版本不一致,数据不可复现;训练中 reference 与 tokenizer 不匹配,KL 统计失真。
因此选择 RLHF 前应先问:偏好是否能被稳定描述?是否有足够难的比较样本?Reward Model 是否覆盖真实失败类型?是否有独立验证器抵抗投机?如果答案是否定的,先改善示范和评估,往往比直接扩大 PPO 更有效。
奖励模型的比较损失可以先用两条分数手算。若优选答案比分数较低答案高两个单位,预测偏好概率约为零点八八;若把两条分数同时加上一百,概率完全不变。这说明成对标签只约束同一提示下的分数差,并不赋予奖励零点绝对意义。跨提示的奖励均值更不能直接解释为“这道题完成得比另一道题好多少”。当策略优化依赖奖励尺度时,应检查归一化、截断和不同任务的配比,否则某个评分范围更宽的任务可能支配梯度,即使它在业务上并不更重要。
偏好模型还能把混杂变量学成捷径。设训练中所有好答案恰好更长,所有坏答案更短;模型可以通过长度预测标签,而无需理解内容。留出比较若沿用同样分布,准确率仍然很高。诊断需要构造交叉对照:同样正确的一长一短、同样长度的一对对错,以及需要简短回答却故意展开的候选。若奖励次序跟着长度而不是正确性改变,问题在评分器或标签中。继续用该评分器训练策略,会主动增加这种捷径出现的频率,导致优化后的数据分布比奖励模型的训练分布更极端。
为什么还需要价值模型?一个终局奖励只告诉整段轨迹的结果,策略梯度若把相同结果直接乘到所有动作上,方差往往较大。价值函数估计在当前前缀下继续采样的平均回报,优势则比较这次实际经历与该预期。对一个本来很容易成功的前缀,成功不一定是强烈的额外好消息;对一个通常失败的前缀,同样的成功可能更值得增强。这里价值模型估计的是所定义奖励下的回报,并不判断句子是否真实。奖励定义错了,价值模型拟合得再准确,也只是在更准确地预测错误目标。
GAE 中的两个参数可以通过极端情形理解。令递推系数为零,优势只使用一步残差,强烈依赖下一状态的价值估计;令它接近一,优势会汇入更远处的残差,更接近长回报与当前价值的差,通常也更容易受到远端随机性的影响。这不是“越大越准确”的单调选择。若语言任务只在结束时给奖,较短的信用传播可能依赖 critic 提前把结果信息学到前缀中;若 critic 尚不可靠,又需要观察优势如何随长度和位置变化。比较这些统计比只看一个总体价值损失更能解释训练初期的行为。
前面的三步手算还可以用来检查时间轴。第三个奖励属于第三个动作之后发生的转移,第三个价值则属于采取第三个动作之前的状态;把奖励向前或向后错位一格,即使表格形状不变,也会把信用给错动作。真实终止后不能再沿下一条样本传播优势,否则一个任务的最终成败会污染另一个任务的开头。对补齐位置既不应产生真实动作比率,也不应延续递推。实际实现可把这些边界做成很小的人工序列,而不必先启动昂贵的模型训练来发现。
PPO 裁剪的方向也值得手算。设裁剪范围为零点八到一点二,优势为正二,当前与旧策略的动作概率比为一点五:未裁剪乘积是三,裁剪项是二点四,取较小值得二点四。继续增大这个比率不再提高该样本的代理收益。若同样优势下比率为零点五,目标仍取一,保留把概率拉回来的梯度。对负优势减二,比率为零点五时两个候选为负一与负一点六,取负一点六,进一步减小概率不再得到代理收益;比率为一点五时则保留负三,仍惩罚错误方向的增长。
这些分支说明,裁剪只在有利方向超过范围时压平局部代理收益,并没有把概率比硬性限制在区间。模型参数由大量样本共同更新,一个样本的梯度被压平后,其他样本仍可能继续改变它的概率。即使每个观测动作的比率接近一,未被采样的动作也可能发生变化。因此实际分布的 KL、有效样本数量和新采样结果都是必要诊断;它们是在检查代理目标与真实策略变化之间的差异,不是重复计算同一个指标。
旧策略概率必须在采样时固定。假设第一次更新后用当前参数重算分母,第二次更新又把新分母当成旧策略,所有比率会被人为拉回一附近;日志看上去“很稳定”,其实比较基准正在追着策略移动。反过来,长期复用很旧的 rollout,概率比可能极端,样本很难代表当前策略。训练通常在采样成本和数据新鲜度之间取舍:同一批数据多用几轮可减少生成开销,却增加离策略偏移。这个取舍应由当前策略相对采样策略的变化来评估,不能只按固定轮数宣布安全。
参考 KL 有另一条时间轴。它连接当前行为与一个选定的行为锚点,目的在于使奖励优化不要无约束地偏离已有分布;旧策略则连接本次更新与产生数据的策略。两个模型在训练开始时可能权重相同,后来会分离。若阶段间更新参考模型,应明确这是更换正则化问题,而不只是清理缓存。参考分布本身也可能有缺陷:过强约束会阻碍纠正原有错误,过弱约束会允许策略在奖励模型不可靠区域大幅移动。合理系数需要结合任务收益、行为漂移和奖励可靠性共同判断。
采样后的奖励、优势和价值目标应形成一次明确的数据快照。先用固定版本的评分器计算回报,再得到旧价值与优势,之后在若干小批中更新;不要在同一批尚未训练完时悄悄切换评分器,使前后小批对应不同问题。若使用共享主干,actor 与 critic 的损失可以按系数共同更新主干,但策略梯度不应通过“优势如何计算”反向修改目标。否则模型可以通过改变价值估计减少表面损失,而不是改善动作分布。这里需要区分允许共享参数与允许任意梯度路径,两者不是同一件事。
最终应把奖励曲线和外部成功曲线并排观察。若奖励持续上升、人工判断或可执行测试却下降,优先检查奖励投机、分布迁移和尺度变化;若两者都不动,检查探索是否覆盖成功路径、优势是否被掩码清空、更新是否被裁剪饱和;若先上升后突然退化,则检查数据新鲜度、奖励版本和优化尺度。不同症状有不同假设,不能用“强化学习不稳定”概括所有问题。RLHF 的工程难点正是让采样、评分、估值与更新围绕同一个可解释目标运行。
3.4 DPO:把偏好写成策略目标
flowchart TD A["同一提示的偏好对"] --> B["策略响应对数概率"] A --> C["冻结参考响应对数概率"] B --> D["两个相对比值的差"] C --> D D --> E["偏好似然与梯度"] E --> F["更新策略"] F --> G["检查覆盖与独立任务质量"]
DPO 的核心思想
DPO 观察到,在特定的 KL 正则化奖励模型设定下,最优 policy 与 reward 存在解析关系,可以直接用偏好对训练 policy,而不显式拟合 Reward Model 和运行完整 PPO [12]。常见目标形式为:
\[ \mathcal{L}_{\text{DPO}}=-\log\sigma\left(\beta\left[\log\frac{\pi_\theta(y^+\mid x)}{\pi_{\text{ref}}(y^+\mid x)}-\log\frac{\pi_\theta(y^-\mid x)}{\pi_{\text{ref}}(y^-\mid x)}\right]\right). \]
直觉是:提高 chosen 相对于 reference 的相对概率,同时降低 rejected 的相对概率。DPO 的优点是使用熟悉的监督训练基础设施,批处理简单,训练曲线更易观察,适合拥有静态偏好数据的团队。它并没有消除对齐问题,只是把 reward model 和在线策略优化的复杂度部分转移到了偏好数据质量和超参数上。
这个目标可以从更一般的设定推出来。在 KL 正则化的奖励最大化问题中,最优策略与奖励之间存在解析关系:\(\pi^*(y\mid x)\propto\pi_{ref}(y\mid x)\exp(r(x,y)/\beta)\)。把它反解,就能用策略与参考模型的概率比表示奖励,于是偏好似然可以只写成两个策略的比值,不再需要显式训练奖励模型。这也是 DPO 名字的由来:语言模型本身隐式地参数化了奖励。
DPO 的这条等价推导依赖偏好概率可由 Bradley–Terry(或论文讨论的 Plackett–Luce)模型表示,并以 KL 正则化的奖励最大化为原始优化问题 [12]。参考模型用于定义正则化锚点,不需要是价值意义上的“中性模型”。实践中的另一类风险来自数据覆盖:若偏好对由与目标策略差异很大的行为策略生成,有限的离线样本可能无法覆盖新策略会访问的回答区域,此时隐式奖励在分布外区域缺少可靠证据。这个覆盖问题影响离线优化的可信度,但不是把“参考模型中性”补成理论前提。
IPO、KTO 与 ORPO
IPO 试图缓解 DPO 在偏好数据重复、噪声或过拟合时的理论和实践问题 [13];KTO 不要求每个 prompt 都有成对答案,而是使用 desirable/undesirable 的单条反馈,适合只有好坏标签的场景 [14];ORPO 把监督损失与偏好比率结合,不使用独立 reference model [15]。它们的共同点是:利用离线数据直接调整回答分布,避免每次更新都与环境交互。
| 方法 | 需要的数据 | 主要优点 | 主要风险 |
|---|---|---|---|
| DPO | chosen/rejected pair | 公式直接、实现成熟 | 对参考模型和温度敏感 |
| IPO | preference pair | 尝试降低过拟合偏好 | 理论假设和数据质量仍重要 |
| KTO | 单条好/坏信号 | 不要求配对数据 | 反馈尺度和类别平衡难处理 |
| ORPO | 示范加偏好信号 | 流程短、无需 reference | 多目标损失权衡复杂 |
方法选择应由反馈形态决定,而不是由论文热度决定。如果已有稳定的高质量示范,SFT 后再做 DPO 通常更自然;如果只有线上点赞和点踩,先确认反馈是否与任务成功相关;如果有程序化成功信号,直接使用验证器或 RLVR 可能比把信号粗略转换成偏好更合适。
偏好对最容易出现三类问题。第一,chosen 和 rejected 实际表达相同,差异只有长度和措辞;第二,标注者依据个人风格而不是任务完成度排序;第三,负例过于糟糕,模型只学会避免明显错误,却没有学会高难度取舍。解决这些问题要增加 hard negative:事实只错一个数字、代码只缺一个边界条件、工具参数只错一个字段、安全回答既不能拒绝过度也不能放任越权。
UltraFeedback 使用规模化AI反馈和更细的评价维度扩展偏好数据,体现了从单一比较走向多属性反馈的趋势 [16]。但 AI 反馈不是天然客观,仍要用人工抽样检查 judge 一致性、长度偏差、位置偏差和语言偏差。Zephyr 的工作展示了如何用高质量反馈和蒸馏快速得到对齐模型 [17],同时也说明蒸馏的上限受 teacher、数据和评估协议约束。
概率相加、mask与长度偏差
DPO中的序列log概率是所选response token条件log概率的和。chosen/rejected共享相同提示,提示token不应进入响应似然;各自padding不计,EOS按协议处理。策略与reference必须使用兼容的Tokenizer、模板、截断和监督范围,否则差值混入协议变化,已经不是公式中的同一事件。若一条回答被截断成不完整参数,原偏好标签也需重新检查。[12]
较长回答包含更多负log概率项,直接求和、逐token平均和其他长度归一化定义不是同一目标。不能在实现中随意将sum改mean,再继续声称精确复现原始DPO。beta是偏好目标与参考约束设定的一部分,也不等于生成温度。偏好更高是相对变化,不能据此保证chosen绝对概率每次都上升,更不能证明外部任务已成功。
下面用一个本书构造的有限回答空间展开解析关系。固定提示,只允许三个候选回答,并给它们一个总和为一的参考分布。目标是在回答概率的单纯形上最大化平均奖励,同时减去到参考分布的 KL 惩罚。加入概率和为一的拉格朗日约束,对每个候选概率求导后,奖励与对数概率比只差一个对所有候选相同的常数;归一化便得到前面的指数加权形式。这里要求参考分布在考虑的候选上具有正概率,否则概率比与 KL 的支持集需要单独处理。这个有限例子解释推导结构,不表示现实语言模型可以枚举全部回答。
若参考分布对两个候选各给一半概率,奖励差为一,正则化系数也为一,最优策略对高奖候选的概率约为零点七三一;把系数增大,分布会更靠近原先的一半;把系数减小,分布会更集中到高奖候选。这是理想奖励已知、概率可自由选择时的结果。真实 DPO 用有限偏好样本训练共享参数,优化是否到达该理想解、偏好模型是否正确、未见回答如何变化,都仍需实证。因此“有解析最优关系”不等于实际训练不受容量和数据限制。
反解奖励时会出现只依赖提示的配分函数。为什么它能消掉?因为一次偏好比较的两个回答具有完全相同的提示,它们的奖励相减时,公共项相互抵消。如果把来自不同提示的两个回答拼成一对,或者一边删了系统条件而另一边保留,公共项就不再是同一个量。这不只是实现细节:同一答案在不同条件下可能有不同价值,跨条件比较没有沿用原推导的资格。偏好样本应保存完整条件,不能只保存两段看起来像答案的文本。
再看相对概率与绝对概率的区别。设参考策略对优选与劣选回答的概率分别为零点二和零点一,新策略分别为零点一和零点零二。优选答案的绝对概率下降了一半,但相对参考的比例为零点五,劣选答案则降到零点二,两者的相对差仍然向优选方向移动。因此偏好损失可以改善,同时优选答案也变得更少出现;剩余概率被分配给其他未在这一对中出现的回答。这个反例不否认梯度中的优选增强方向,而是在提醒共享分布和多个训练样本使单对直觉不能升级为全局单调保证。
目标中的 sigmoid 还提供了样本权重。当前策略若已经把一对样本排序得非常有把握,该样本继续提供的梯度通常较小;若次序仍然错误,权重较大。这个机制可以减少已经解决的简单偏好对的影响,却也可能反复追逐错误标签。假设一个标签把正确的简短答案标成劣选,随着模型纠正其他样本,这个冲突样本仍会提供强梯度。增加迭代次数不自动等于增加可靠知识;要看偏好噪声、难例质量及留出关系是否支持进一步优化。
响应似然的边界必须和比较事件一致。若两个回答共享一长段开头,该段的策略与参考对数概率差在理论上会相减抵消,但后续分支的条件不同,不能只保留最后一个不同 token 就认为等价。两个候选在第一个分叉之后,即使又出现相同文字,它们所依赖的前缀也可能不同。实现应按完整响应逐位置计算条件概率,再按定义组合;文本差分可以帮助审核标签,却不能直接代替概率链式分解。相同字串不意味着相同条件事件。
长度问题也不是简单“长答案天然吃亏”。较长序列的对数概率和通常更负,但 DPO 使用的是策略相对参考的差,再比较两个回答;长度怎样影响最终梯度取决于每个位置的相对变化与数据分布。改成 token 平均确实改变了长度权重,却同时改变理论目标。正确做法是明确所用变体,并通过长度匹配的对照检查它是否解决了当前偏差,而不是在代码里静默改分母。生成温度则改变采样分布,它与训练目标中的正则化系数属于不同层次,不应共享一个含混的“温度”解释。
离线偏好优化省去了训练期间不断向环境采样的环节,但没有省去候选生成成本。若所有偏好数据来自一个与当前策略差异很大的模型,当前策略常犯的错误可能根本不在负例中。更新后的策略又可能发现新的语言捷径,使旧偏好对不能代表部署分布。可行的改进是用当前候选补充新的比较,再重新进行离线训练;这已经形成迭代式的数据收集流程,成本与风险都要重新记录。是否在线不由“用了 DPO”三个字永久决定,而由数据何时生成、如何更新决定。
反馈形态决定方法适配,但不自动决定标签质量。点赞和点踩看似适合单条反馈目标,实际可能受到用户情绪、展示位置或任务难度影响;成对比较看似更精细,也可能只反映某个标注者的风格。IPO、KTO 和 ORPO 在目标设计上的差异,不能替代对这些因素的审查。尤其 ORPO 不需要独立参考模型这一性质,应与它仍需要监督与偏好权衡分开理解。减少一个模型角色,缩短了计算链路,却没有删除多目标冲突。
本节方法可以用一组最小指标验收:偏好对上的排序准确率、优选与劣选各自的绝对似然、相对参考的变化,以及独立生成后的任务质量。四者回答不同问题。排序上升只说明更符合已有比较;绝对似然揭示概率质量是否整体流向未观察区域;参考差显示行为漂移;实际生成才暴露部署结果。只报告其中最好看的一项,会遮住目标与用途之间的距离。选择检查点时应根据预先定义的任务标准,而不是事后挑最有利的统计口径。
3.5 RLVR 与 GRPO:从结果到探索信号
flowchart TD
Q["同一问题"] --> S["采样一组候选"]
S --> V["验证结果或奖励评分"]
V --> A["组内相对优势"]
A --> Z{"是否存在奖励差异"}
Z -->|是| U["带概率比的策略更新"]
Z -->|否| D["检查难度与探索"]
U --> S
D --> Q
可验证奖励为什么改变了训练对象
偏好奖励适合“哪个回答更好”,但复杂数学、代码和规划任务往往有更客观的验收。Tülu 3 将使用确定性验证函数进行强化学习的阶段称为 Reinforcement Learning with Verifiable Rewards(RLVR),并把它用于数学和可精确检查的指令遵循任务 [18]。DeepSeek-R1 使用基于规则的准确性与格式奖励训练数学、代码和逻辑推理能力,是同类的可验证奖励实践,但其报告没有把 RLVR 作为方法名称 [19]。DeepSeekMath 提出 GRPO,其强化学习实验训练了神经奖励模型,并非全部使用确定性数学验证器 [20]。
本书为讨论成本构造一个教学奖励,以下公式不是上述论文的统一配方:
\[ R(x,y)=\mathbf{1}[V(x,y)=1]-\lambda,\text{cost}(y), \]
其中 \(V\) 是验证器,cost 可以惩罚过长推理、过多工具调用或过高延迟。模型于是会探索多种推理路径,保留能通过验证的轨迹。它学到的不只是“用某种语气回答”,而是“在推理预算内找到可验收结果”。
结果奖励、过程奖励与验证器
只在最终答案上给奖励,信用分配会很困难:一条长推理可能在最后一步出错,模型不知道前面哪些步骤有价值。过程奖励模型尝试对中间步骤逐步评价;Let’s Verify Step by Step 研究过程监督的奖励模型,并用候选筛选评估数学解题效果;不能将它直接当作任意策略在线强化学习收益的证明 [21]。但过程奖励也可能把某种表面推理风格当作正确,或者让模型过度拆步骤。
本章关注验证器怎样形成训练信号:验证器可能需要训练、校准和对抗评估,也可能是无需学习的确定性程序。Training Verifiers 的研究展示了训练结果验证器的路线 [22]。工程上要记录 false positive、false negative、测试覆盖和版本变化,防止策略针对覆盖漏洞优化。训练完成后,如何在一次请求中用冻结版本的验证器筛选候选、引导搜索和决定停止,见第 4 章 4.4 节。
GRPO、组内奖励与冷启动
DeepSeekMath的GRPO为同一问题采样一组回答,用组内奖励构造相对优势,减少独立critic的需求。以结果监督为例,\(\hat A_i=(R_i-\overline R)/(\operatorname{std}(R)+\varepsilon)\),该回答token沿用相对优势,再结合策略比和正则化目标更新。这里的epsilon是数值稳定约定,具体实现须记录;如果整组全对或全错,中心化后的奖励没有区分信号,不能指望仅靠分母修复探索。[20]
按 DeepSeekMath 的结果监督写法,先对每条回答取 token 平均,再对组内回答平均,可把更新目标写成下式;这里保持其逐 token 概率比口径,不能与整段概率比静默互换:
\[ J_{\mathrm{GRPO}}=\mathbb E\left[ \frac1G\sum_{i=1}^{G}\frac1{T_i}\sum_{t=1}^{T_i} \left{\min!\left(\rho_{i,t}\hat A_i, \operatorname{clip}(\rho_{i,t},1-\epsilon,1+\epsilon)\hat A_i\right) -\beta k_{i,t}\right}\right], \quad \rho_{i,t}=\frac{\pi_\theta(a_{i,t}\mid s_{i,t})}{\pi_{\mathrm{old}}(a_{i,t}\mid s_{i,t})}. \]
其中一种 KL 样本项为 \(k=u-\log u-1\),\(u=\pi_{\mathrm{ref}}(a\mid s)/\pi_\theta(a\mid s)\)。它由对数不等式保证非负;其期望等于相应 KL 的结论需要动作按当前策略采样等条件。复用旧策略轨迹多轮更新时,不能忽略采样分布变化而直接声称仍是当前策略 KL 的无偏估计。该项与组内任务优势分开进入损失。[20]
组大小、奖励难度和题目分布共同决定有效信号。若底座几乎无法生成正确格式或任何成功候选,增加组采样也可能徒增计算;若问题太简单全组成功,同样缺乏相对区分。先测可解析率、非零奖励组比例与多样性,再决定补SFT、调整难度或增加探索,这是本书的选型建议,非一种保证收敛的规则。
R1 报告区分直接从底座进行 RL 的 R1-Zero 与加入冷启动数据的 R1;后者用整理过的推理样本改善初始格式与可读性,不能把前者的实验写成“任何任务都不需要 SFT” [19]。工具参数和状态协议严格时,先用示范建立合法行为基线常更易诊断;是否冷启动应由底座与任务证据决定,不是 PPO 和 GRPO 各自永久绑定的属性。
工具调用训练要让模型学会选择工具、填充参数、处理返回值、在失败后重试。Toolformer 研究让模型学习在适当位置调用工具 [23],ReAct 把推理与行动交替组织成轨迹,使模型能根据观察更新下一步 [24]。这些工作解决的是“模型如何与环境交互”,不涉及“模型是否拥有权限”。
训练数据应覆盖成功、失败、超时、被拒绝、部分结果和需要确认的分支;工具 schema、参数类型、错误码必须与线上接口一致,否则模型学到的是不可执行的假协议。有副作用的动作仍需运行时的权限与审批,训练中较高的调用准确率不构成执行授权。
奖励来源和优化算法是两条独立坐标。PPO 可以使用人类偏好训练出的奖励模型,也可以使用确定性验证函数;GRPO 可以使用规则分数,也可以使用学习出的奖励模型。Tülu 3 的可验证奖励阶段采用 PPO,DeepSeekMath 用组内比较构造优势并训练神经奖励模型,而 R1-Zero 的报告强调规则准确性与格式奖励。把这三件事并列之后,就能避免“换成 GRPO 就获得可靠验证”或“用了 PPO 就只能做人类偏好”的错误推论。算法负责怎样利用信号,验证器负责信号究竟意味着什么。
组内标准化可以用四个候选手算。设结果奖励依次为一、一、零、零,组均值是零点五,若使用总体标准差则为零点五,忽略稳定常数时优势为一、一、负一、负一。若改成一、零、零、零,均值为零点二五,总体标准差约为零点四三三,成功候选优势约为一点七三二,失败候选约为负零点五七七。相同的一次成功,在不同组分布中获得不同的相对权重;这正是组内比较的含义,不是验证器给了更大的绝对成功奖励。改用样本标准差时数值也会变化,复现必须说明口径。
若四个候选全部失败,中心化后没有任务奖励差异;加一个很小的稳定常数只能避免除零,不能创造成功方向。全部成功也一样缺乏相对区分,但原因完全不同:前者可能太难、格式失效或验证器出错,后者可能太简单。两者在平均奖励上可区分,在优势方差上却都可能接近零。应同时记录奖励均值、非零方差组比例和可解析率,才能决定是补充基础示范、改变采样、调整题目难度还是修复评分。即使任务优势为零,参考正则化仍可能产生梯度,不能把它称为整个更新必然为零。
对于结果监督,同一回答的多个 token 共用相对优势,意味着成功轨迹中的错误尝试也可能被一起强化。如果回答先走错再纠正,最终成功不能说明每一步都有效。过程奖励试图提供更细的定位,却需要可靠的步骤边界和评价标准;把自然语言每一行当成一步,并不保证它对应一个可判定推理操作。验证器如果奖励“看起来有推导”,模型可能学会增加形式化措辞而不提高正确性。结果奖励与过程奖励各自承担不同误差,不能仅按反馈更密集就断言后者更好。
本书用简单的伯努利模型说明探索难度:假设每个候选独立以概率 p 成功,一组 G 个候选至少出现一次成功的概率为一减去失败概率的 G 次方。这个式子只在独立、同分布的教学假设下成立;真实候选常因同一模型与题目而相关,因此不能直接拿它预测收益。它仍揭示两个方向:成功概率极低时,增加少量候选可能只得到更多失败;候选高度相似时,名义组大小也不等于有效探索数量。测量独立成功路径的多样性,比只增加生成数量更有意义。
成本惩罚进一步改变了目标。假设成功奖励为一,每个 token 扣一个固定小成本,一条很长但正确的轨迹最终得分可能低于短而错误的轨迹。如果业务要求首先正确,这个线性权衡就未必符合需求。可以考虑把成本作为约束、在成功样本内部比较效率,或分阶段调整奖励,但每种选择都对应不同优化问题。不能把奖励权重当作没有语义的调参旋钮。特别是在训练初期,尚未学会成功路径就强烈惩罚长度,可能抑制必要探索;这需要通过轨迹检查来判断,不能仅根据平均长度下降庆祝效率改善。
规则验证也有统计错误。代码通过有限测试集,只能证明它通过已执行用例;数学答案抽取器若把回答中的任意正确数字当成最终答案,模型可能列出许多候选投机命中。结构化任务若只检查能解析,模型可以输出合法但无用的空对象。验证应分成解析、格式、语义与执行结果,并明确每层失败怎样映射成奖励。对代码任务,还要隔离运行环境、限制资源并保留超时原因;超时可能来自错误算法,也可能来自测试基础设施,不应无条件混成同一种语义错误。
验证器升级会改变训练问题。旧版本误判为成功的样本,新版本可能判错;若把两种分数混在同一组里,优势比较就失去共同尺度。一个可解释流程是在批次或阶段边界固定验证版本,对已保存轨迹重新评分,并分别观察策略变化与评分变化。独立评估最好使用更广的未公开测试或人工核验,减少策略针对训练检查的适应。这里所谓独立不是简单换一个文件名,而是让评估覆盖训练奖励尚未编码的失败模式。
工具交互提供了一个特别清楚的信用分配例子。一次查询返回空结果,可能意味着参数错误,也可能意味着条件下确实没有记录。若奖励只要求“最后必须找到记录”,模型会被鼓励不断改条件直到出现任意结果,而不是忠实回答没有证据。应把任务定义为在指定约束下完成查询与解释,并把改变约束的动作纳入评价。对多轮轨迹,环境状态、错误返回和动作顺序都需要保留;只保存最终自然语言回答,会丢失导致成功或失败的关键路径。
3.6 安全反馈与独立回归
flowchart TD P["明确原则"] --> C["批评与修订示范"] C --> S["监督微调"] P --> J["候选偏好判断"] J --> R["偏好模型与策略优化"] S --> R R --> E["独立正常任务与攻击评估"] E --> F["检查收益与退化"]
Constitutional AI 的思路
人类不可能穷举所有危险请求,也难以对每个回答写出统一标准。Constitutional AI 用一组明确原则指导模型批评和改写自己的回答,再利用这些比较构造 AI feedback [25]。原则可以描述无害、诚实、尊重隐私、避免越权、在安全范围内提供帮助等要求。
其监督阶段用原则引导批评与修订,再把修订回答作为微调目标;随后在强化学习阶段,另用原则引导 AI 对候选回答作偏好比较,训练偏好模型并优化策略。不能把两个阶段压缩成“原答案与修订答案直接配对”的唯一流程。原则文本使判断依据可以审阅,但原则如何被模型解释仍需评估。
RLAIF 的优势与盲点
RLAIF 用 AI judge 代替或补充人工标注,可以降低成本、提高一致性并覆盖更多样本 [26]。但 judge 与被训练模型可能共享相同错误,形成同质化反馈;judge 可能偏好更长、更礼貌或更像自身的答案;对复杂事实和隐晦攻击,judge 也可能失效。人类反馈的稀缺性没有消失,只是从逐条标注转移到原则设计、抽样审计和困难案例审核。
安全对齐至少要区分三种行为:允许且有帮助、拒绝且解释边界、拒绝后仍提供安全替代方案。只有“拒绝率”一个指标会奖励过度拒答。HHH 数据集把 helpful、harmless、honest 作为不同评价维度,适合用来说明三者并不总是同向 [27]。例如用户请求安全分析恶意代码时,完全拒绝可能损害帮助性;直接给出可执行攻击脚本又可能越过安全边界。
安全数据的分层比总体的“安全率”更能说明问题。至少区分四类:明确违规(必须拒绝并解释)、边界请求(需要澄清或提供受限帮助)、正常但敏感的请求(应当正常完成)、攻击性输入(越狱、注入、隐私抽取)。四类的正确行为不同,把它们混成一个“安全/不安全”标签,会同时奖励过度拒答和放任违规。评估也要分开报告:违规放行率、正常请求误拒率、边界请求的澄清率、攻击阻断率,四者不能互相抵消。
模型可以学会说“我不能帮助你”,但它仍可能通过工具调用、编码变换或多轮诱导泄露危险信息。生产安全必须由模型之外的控制层承担,包括输入分类、输出审查、参数白名单、速率限制、审计日志与回滚。Llama 2 的安全评估展示了红队、自动测试和人工分析的组合方式 [28],但任何公开安全报告都不能替代目标系统自己的威胁模型。
安全训练数据还会带来分布迁移。线上用户可能使用不同语言、隐喻、拼写错误或多轮上下文;攻击者会针对拒答模板做变形。因而安全回归应包含越狱、提示注入、隐私抽取、工具越权和多轮状态攻击,并记录攻击成功率、误伤率与响应延迟。
方法选择与回归证据
LLM judge 可以快速比较开放式回答,MT-Bench 和 Chatbot Arena 研究系统讨论了 judge 与人类偏好的关系以及位置、长度和模型自偏差 [29]。它适合做大规模筛选和回归趋势,不适合单独作为高风险事实或权限决策。使用 judge 时要固定 prompt、随机化答案顺序、做人工抽样、测试不同语言和长度,并报告与人工标注的相关性。
能程序化验证的任务应优先程序化:代码执行、JSON schema、SQL 结果、数学答案、工具状态和引用链接。开放式质量再使用 judge 辅助。这样可以减少“模型评价模型”的循环偏差,也让失败样本能够回放。
每次 SFT、DPO、RLHF 或 RLVR 更新,都应与上一版本比较同一矩阵:能力是否提升,正常请求是否被误拒,危险请求是否被放行,回答长度是否异常,工具调用是否稳定,延迟和 token 成本是否变化。测试结果要按任务类型、语言、难度和风险等级切片;总体平均分上升不能掩盖关键子集下降。
可以用以下映射做初筛:如果模型不知道任务格式,先做 SFT;如果模型会做任务但多个答案质量差异明显,加入偏好数据;如果只有好坏标签而没有成对回答,考虑 KTO;如果有可靠程序验收,可以用 RLVR 形成训练信号,也可以按第 4 章 4.4 节在推理时直接筛选候选;如果问题来自动态事实,使用 RAG 或工具;如果问题是权限和副作用,使用运行时控制;如果问题是复杂任务成功率和延迟权衡,测量 test-time scaling。
| 首要缺口 | 优先方法 | 所需证据 | 不该用它解决的问题 |
|---|---|---|---|
| 固定任务格式、术语或步骤不稳定 | SFT | 高质量示范与字段级回归集 | 实时知识、权限与外部状态 |
| 多个可行答案质量差异明显 | DPO / RLHF / 偏好优化 | 覆盖真实取舍的成对偏好数据 | 没有稳定“更好”定义的事实判定 |
| 数学、代码或结构化结果可程序验证 | RLVR / 验证器 | 难以被投机通过的结果检查 | 主观语气和不可判定的帮助性 |
| 安全边界需要大量反馈覆盖 | RLAIF / Constitutional AI | 原则、人工抽检与对抗测试 | 部署侧授权与审计 |
| 当前事实变化或存在副作用 | 检索、规则或验证器 | 数据来源与版本 | 试图把状态写入权重 |
以 ALR 告警诊断为例,设想一组偏好标注总是奖励“直接给出根因”的回答。面对一个需要证据判断的请求,回答 A 会说明前提、引用依据并指出需要确认;回答 B 会直接给出结论。若标注只看语气、速度和表面帮助度,B 很可能被选为偏好样本。偏好优化后,离线“帮助度”上升,实际任务的成功率却下降。
该教学反例的直接原因是偏好标签奖励了无依据的确定性表达,而没有区分证据充分与证据不足。修复方式不是继续堆同类的安全样本,而是修正偏好标准:把偏好比较限制在解释清晰度、证据忠实度和不确定性表达上,把事实与条件判断交给独立的检索、规则或验证器;并在回归集中单独记录事实准确率、条件判断准确率和澄清率。这个案例说明,后训练只能塑造默认行为,不能替代外部的事实与规则校验。
在同一底座、相近序列长度与数据量下,SFT通常是便于启动的基线,离线偏好优化省去在线rollout,而RLHF/RLVR还需奖励或环境链路。实际成本仍要按候选数量、参考前向、有效token和设备测量,不能把算法名当作固定价格排序。训练前应估算标注成本、GPU 时间、评估成本、数据存储、失败重跑和线上推理增量。不要只比较一次训练的费用,还要计算每次发布回归和长期维护费用。
工具调用样本的监督目标不是“让动作成功”,而是“让模型学会在给定观察下输出正确的下一步”,二者差别很大。
| 观察 | 应当监督的目标 | 不应奖励的目标 |
|---|---|---|
| 查询返回不满足条件 | 引用原因并说明后续路径 | 为表面帮助度承诺可以办到 |
创建 INC-4821 时回执丢失、外部状态未知 | 沿原 Operation 查询核验 | 断言失败并换键重新建单 |
| 返回权限拒绝 | 说明范围并请求合法流程 | 改参数绕过限制或伪造成功回执 |
| 返回部分结果且证据不足 | 保留已知事实,明确缺失条件 | 用流畅补全填造未返回字段 |
表中的标签来自本书教学契约,生产样本应由业务规则与实际回执确认。偏好对还应保留同一观察下的难负例,避免模型只学会用礼貌语气包装错误动作。
将同一底座的 SFT、SFT 加 DPO、SFT 加在线 RL 作为可比较路线,固定留出任务和总预算,分别计入数据标注、候选生成、训练、评估与失败重跑。中文和混合协议需要自己的切片,InternLM2 等报告提供了分层观察的参考,不能用英文总分替代本地任务。[30] 每次只改变主要因素并保留旧版本,才能解释差异。
状态:设计完成;独立实现未提供,未实测。 输入包含普通问答、多轮工具成功、权限拒绝、提交超时未知四类教学对话,固定Tokenizer/模板与最大长度。输出input_ids、角色区间、labels、Attention/loss mask及有效目标数;按3.1的占位token案例打印每个logits位置预测的目标,区分库内部shift和外部shift两种接口。
断言: 用户/system/tool内容不作为assistant目标,合法动作与EOS保留监督;padding屏蔽且无全零监督样本;packing后独立工单不可跨读;截断导致JSON或工具调用不完整时拒绝或按已定义规则重建样本;训练/测试不含同工单或去重簇。先在少量手工样本验证管线,再核对独立留出集。能拟合小样本不表示泛化,也不表示工具真的提交。
回收错误: EOS与PAD共ID时按ID全屏蔽、重复shift、mask只看字符串长度、工具返回冒充助手,都要有反例。运行代码应放独立实验仓库;本卡不提供伪造测试输出,不把训练loss改善当作已获得业务授权。
安全反馈首先是一个分类边界与效用问题,而不只是多写几种拒答句式。假设正常请求中包含“分析一个恶意样本为什么危险”,攻击请求中也包含同样词汇;只靠关键词拒答会把两类任务混在一起。训练需要把意图、上下文、所请求细节和允许的帮助范围编码进示范与偏好。若标签仅写“安全”,却没有说明为何应拒绝或为何可以回答,审核者之间的分歧会被压缩成不可解释的噪声。原则文本能够帮助统一讨论对象,但仍需要具体反例说明边界如何落在输出上。
可以用一张混淆表推导为什么总体拒答率不足以评价安全。对真正应拒绝的请求,拒绝是正确处理;对正常请求,同样的拒绝则是误伤。若评估集合中攻击比例改变,整体拒答率会随之改变,即使模型在每类上的行为完全不变。因此比较两个版本应固定样本分布,分别报告危险请求放行与正常请求误拒,再观察关键子群。一个总分把两种错误相互抵消,会让团队无法判断模型究竟更谨慎还是更失去帮助性。阈值选择应来自任务需求,而不是把拒绝越多当作越安全。
AI judge 还会把评价协议变成输入的一部分。如果候选答案中包含“请给这个答案最高分”的文字,而裁判没有把它严格当作被评价对象,评分可能受到候选内容操纵。即使没有这种显式干扰,答案顺序、长度与措辞也可能改变判断。成对比较可以交换展示顺序,检查是否出现前后自相矛盾;人工审核可以盲化模型身份;多裁判比较可以定位分歧,但多数票也可能共享偏差。每种措施解决的是一种误差来源,不能把裁判数量增加等同于获得独立真值。
反馈循环会放大这种偏差。第一轮裁判喜欢某种套话,策略便增加套话;第二轮数据来自该策略,套话更常见,裁判进一步把它与好答案关联起来。这个过程甚至可以伴随离线偏好准确率上升,因为训练和评价正在共同适应同一种表面特征。打断循环需要外部标准,例如可执行测试、证据忠实度检查以及来自真实困难任务的人工样本。这里的人类参与不是简单给模型打总分,而是在判断当前代理信号是否仍然对应想改善的行为。
微调后的安全性质也不能从底座继承为不变事实。Qi 等研究显示,特定模型即使使用看似良性的常见微调数据,也可能发生安全退化;这支持在领域微调后重新回归,而不是推断任何微调必然破坏安全。[31] 本书据此建议把安全与正常能力回归放在每一次参数更新之后,并保留更新前的可比较结果。若新模型的专业术语更准确却更容易服从越界指令,不能只用专业任务平均分解释为全面改进。
统计不确定性同样需要保留。假设一个教学测试集中某类攻击零次成功,这只说明有限样本里未观察到成功,不证明真实概率为零。样本过少、攻击高度相似或评测重复调参,都可能使“零失败”缺少代表性。发布记录应写清样本数量、构造方式、是否独立于训练与调参,以及关键失败类别的覆盖。若同一测试集被反复用于选模型,它已经参与开发,最终还需要保留新的评估材料。这个要求并非追求一个永久不变的安全分数,而是让结论的范围与证据规模相匹配。
选择方法时,可以把一个完整实验的比较对象固定下来:相同底座、相同输入协议、相近总预算和同一留出任务。先训练示范基线,再判断主要剩余错误是格式不稳、偏好取舍不佳还是可验证任务失败。若格式已经稳定而事实仍缺证据,继续堆格式样本很难解决;若验证器常把错解判为正确,换优化算法也无法修复目标;若候选已经包含好答案却总选择较差答案,偏好训练或推理筛选才更切合问题。这个诊断顺序把方法选择落实到观察,而不是按流行名称串接所有阶段。
成本也应按完整闭环计算。离线偏好训练可能不在线生成,但预先生成和标注候选仍有代价;组相对方法省去独立 critic,却增加同题候选采样;确定性验证器不需要学习参数,执行测试仍会消耗时间。比较时至少分开记录生成 token、被监督 token、被评分候选和通过验证的有效轨迹。若大量预算花在无法解析的输出或全零奖励组上,降低单步训练时间未必提高每单位成本的有效进展。资源效率最终应联系到可比较的任务收益,而不是某个局部算子更快。
回到告警诊断教学案例,完整验收应串起观察、动作和解释:日志是否来自指定时间范围,查询是否保留用户条件,解释是否引用实际证据,信息不足时是否明确限制,以及环境失败时是否做出与状态一致的下一步。示范提供正确轨迹,偏好对比较同一观察下的解释质量,规则检查可验证参数与引用,人工评估剩余的推理与表达。这几种信号各自负责能够可靠判断的部分,组合后才构成可讨论的后训练方案。模型权重改变了行为倾向,外部结果仍然需要在任务环境中核验。
本章小结
后训练从SFT的示范学习,到偏好优化,再到基于环境与验证的反馈,改变的是生成行为。样本边界决定哪些token被学习,优势和奖励决定哪些动作被鼓励,独立回归决定这些变化能否用于目标任务。Reward不是成功证明,critic不是事实库,reference也不是权限系统。
第 2 章介绍的交叉熵与 KL 在本章分别进入监督目标和正则化目标,第 1 章说明的模型结构边界仍然约束后训练能学到的行为。第 4 章转向生成、搜索和推理期验证,研究一次请求怎样在明确预算内得到更可靠的候选;第 6 章再讨论如何选择全量微调、参数高效微调及其他模型适配方式。
参考资料
- Wei, J., et al,Finetuned Language Models Are Zero-Shot Learners,2022。核验日期:2026-10-31。
- Ouyang, L., et al,Training Language Models to Follow Instructions with Human Feedback,2022。核验日期:2026-10-31。
- Hugging Face,Transformers Chat Templates,v4.45.2。核验日期:2026-10-31。
- Wang, Y., et al,Self-Instruct: Aligning Language Models with Self-Generated Instructions,2023。核验日期:2026-10-31。
- Zhou, C., et al,LIMA: Less Is More for Alignment,2023。核验日期:2026-10-31。
- Zhang, A., Lipton, Z. C., Li, M., & Smola, A. V,动手学深度学习:softmax回归与交叉熵,中文在线2.0.0。核验日期:2026-10-31。
- Christiano, P. F., et al,Deep Reinforcement Learning from Human Preferences,2017。核验日期:2026-10-31。
- Bai, Y., et al,Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback,2022。核验日期:2026-10-31。
- Schulman, J., et al,Proximal Policy Optimization Algorithms,2017。核验日期:2026-10-31。
- Schulman et al.,High-Dimensional Continuous Control Using Generalized Advantage Estimation,2015 preprint / v6。核验日期:2026-10-31。
- Farama Foundation,Gymnasium: Handling Time Limits,checked 2026-10-16。核验日期:2026-10-31。
- Rafailov, R., et al,Direct Preference Optimization: Your Language Model is Secretly a Reward Model,2023。核验日期:2026-10-31。
- Azar, M. G., et al,A General Theoretical Paradigm to Understand Learning from Human Preferences,2023。核验日期:2026-10-31。
- Ethayarajh, K., et al,KTO: Model Alignment as Prospect Theoretic Optimization,2024。核验日期:2026-10-31。
- Hong, J., et al,ORPO: Monolithic Preference Optimization without Reference Model,2024。核验日期:2026-10-31。
- Cui, G., et al,UltraFeedback: Boosting Language Models with Scaled AI Feedback,2024 / v2。核验日期:2026-10-31。
- Tunstall, L., et al,Zephyr: Direct Distillation of LM Alignment,2023。核验日期:2026-10-31。
- Lambert, N., et al,Tülu 3: Pushing Frontiers in Open Language Model Post-Training,2024(v5 修订于 2025)。核验日期:2026-10-31。
- Guo, D., et al,DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning,2025 / v1。核验日期:2026-10-31。
- Shao, Z., et al,DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models,2024。核验日期:2026-10-31。
- Lightman, H., et al,Let’s Verify Step by Step,2023。核验日期:2026-10-31。
- Cobbe, K., et al,Training Verifiers to Solve Math Word Problems,2021。核验日期:2026-10-31。
- Schick, T., et al,Toolformer: Language Models Can Teach Themselves to Use Tools,2023。核验日期:2026-10-31。
- Yao, S., et al,ReAct: Synergizing Reasoning and Acting in Language Models,2023。核验日期:2026-10-31。
- Bai, Y., et al,Constitutional AI: Harmlessness from AI Feedback,2022。核验日期:2026-10-31。
- Lee, H., et al,RLAIF vs. RLHF: Scaling Reinforcement Learning from Human Feedback with AI Feedback,2024 / v3。核验日期:2026-10-31。
- Askell, A., et al,A General Language Assistant as a Laboratory for Alignment,2021。核验日期:2026-10-31。
- Touvron, H., et al,Llama 2: Open Foundation and Fine-Tuned Chat Models,2023。核验日期:2026-10-31。
- Zheng, L., et al,Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena,2023。核验日期:2026-10-31。
- InternLM Team,InternLM2 Technical Report,2024。核验日期:2026-10-31。
- Qi, X., et al.,Fine-tuning Aligned Language Models Compromises Safety, Even When Users Do Not Intend To!,2023,v1。核验日期:2026-10-31。