第 35 章 偏好优化:RLHF、DPO 与对齐边界
35.1 哪个回答更值得学
Section titled “35.1 哪个回答更值得学”虚构的北京差旅制度规定,现行住宿限额为每间夜 750 元,旧版限额为 600 元。用户询问现行限额。一个回答说“按现行制度,限额是 750 元”,另一个说“当然可以!您的限额是 600 元”。后者热情、肯定,但把它当作 SFT 示范,教给模型的仍然是错误答案。
如果比较两个回答比亲自写出理想回答更容易,就可以不直接提供唯一目标,而是记录:在这条请求和这些证据下,哪个回答更好。数据里通常把被偏好的回答叫 chosen,另一个叫 rejected。字段名记录的是判断,不是正确性的证明。一个被误标为 chosen 的回答仍然可能是错的。
第 34 章说明了示范与损失。本章先审查比较记录,再用第 6 章的概率工具解释怎样从比较中学习。验收依据是明确的评分准则和保留不变的评测契约,不是满足所有人的偏好,更不是证明每句话都真实。
35.2 标签离不开它所回答的问题
Section titled “35.2 标签离不开它所回答的问题”评分准则(rubric)规定了怎样作出判断、怎样复核判断。本例先检查是否答对所问版本、是否有记录支持、是否遵守操作边界。只有这些条件成立,才比较清晰程度与相关细节。友好不能抵消金额错误。缺少证据时,应暂不形成训练标签,而不是猜一个答案。
例 35.1:审阅四组偏好对。 每一对都包含证据和问题范围。这些是原创双语教学数据,不是人类偏好调查,原始记录保存在 data/part-vi/preferences-v1.json。
表 35.1:相似的标签,需要不同处理。
| 请求与已提供证据 | 原 chosen | 原 rejected | 审核结论 |
|---|---|---|---|
| 问现行;旧 600,新 750 | 现限额:750 | 现限额:600 | 保留:chosen 使用新版 |
| 问历史;旧 600,新 750 | 旧限额:750 | 旧限额:600 | 对调:问题范围改变了答案 |
| 问现行;缺少制度记录 | 现限额:750 | 现限额:600 | 暂缓使用:两个金额都无依据 |
| 问现行;新版为 750 | 750 元 | 现限额:750 元 | 平局:都符合本次准则 |
使第一行回答正确的数字,在第二行却使 chosen 答错。第三行中,即使审核者记得此前的例子,也不能偷偷给这道“缺少记录”的题补上来源。第四行若强行分出胜负,就制造了准则并不支持的差别。这份小数据只接纳严格偏好:平局保留在审核记录中,不进入偏好对损失。其他目标可以处理平局,但需要另外规定。
审核后有两组可用的严格比较:一组保留,一组对调。原标签、修改理由、准则版本和修正结果都要保存。实际标注时,应把候选身份与展示顺序分开,对重要分歧留下记录,并把相关请求放在同一数据划分中。从少数回答拼出十组比较,不等于获得十个独立请求。
35.3 先学会打分,再让回答更容易得高分
Section titled “35.3 先学会打分,再让回答更容易得高分”要让好回答更容易出现,需要一个可以改变的分布。这里的策略(policy)就是语言模型在给定提示后,对回答给出的条件分布。选下一个 Token 是一次动作,完整回答是一连串动作。奖励(reward)是赋给回答的一个反馈数值;它是训练信号,不是金钱,也不是校准过的真实概率,更不授予操作权限。
一种常见的基于人类反馈的强化学习(reinforcement learning from human feedback,RLHF)流程,会先用比较记录训练一个独立的奖励模型(reward model)。它读取提示和候选回答,输出分数。假设 chosen 得 2 分,rejected 得 1 分。一种常用偏好模型把分差转换成“chosen 更受偏好”的预测概率:
函数 把实数分差 转换成 0 到 1 之间的数。分数相同,;chosen 减 rejected 的差越大,预测的偏好概率越高。对“chosen 胜出”的标签,代价 会惩罚过低的预测概率。当 时,代价为 0.313262。若两个分数都加 100,分差和代价都不变。因此,仅靠比较并不能确定奖励的绝对零点。
学会打分后,从策略中采样回答,给回答评分,再更新策略,鼓励高奖励行为。这种利用采样动作和反馈进行学习的方式就是强化学习(reinforcement learning,RL)。InstructGPT 使用 PPO 完成这一步,读懂本章不需要掌握它的优化器细节。在这里描述的策略更新阶段,奖励模型与参考策略(reference policy)保持固定。参考策略是保存下来、用来衡量偏离程度的分布,常取起始 SFT 检查点。它既不是人工标签,也不是另一位投票者。
- 模型之外偏好 A > B → 拟合奖励分数
- 模型保存的数值奖励模型:先训练,在本次 RL 阶段固定
- 处理步骤采样策略输出 → 奖励 − β 对数比
- 模型保存的数值更新策略;参考策略保持固定
比较标签与采样动作承担不同作用;对数比的期望形成 KL 惩罚。
- 模型之外同一提示、chosen A、rejected B
- 模型保存的数值策略 (0.75, 0.25);固定参考 (0.5, 0.5)
- 处理步骤β = 1:差值 ln 3 → 损失 0.287682
- 模型保存的数值由偏好对损失更新策略
本次更新不单独拟合奖励模型,也不从当前策略采样;仍需要标签与参考概率。
图 35.1 区分了这条路径里的两次参数更新。比较标签先改变奖励模型参数;新采样的回答及其分数,再指导回答策略更新。参考策略会计算同样的回答概率,却不跟着一起更新。以后还可以重新收集数据、训练奖励模型;这里的“固定”指当前声明的阶段。
35.4 为了多得一点奖励,值得偏离多远
Section titled “35.4 为了多得一点奖励,值得偏离多远”奖励模型的训练比较覆盖了哪些情况,我们才对它在那些范围内的可靠性有依据。如果策略一味追求高分,可能找出一些因错误理由而获奖的输出。可以用相对参考策略的 KL 散度(Kullback–Leibler divergence)作惩罚,抑制过度偏离。这里的散度衡量两个分布的差异,不是物理空间里的距离。
例 35.2:只有两个回答时,完整算一次。 对同一个提示,把教学世界限定为 A、B 两个回答,顺序固定,奖励分别指定为 1、0。参考策略的概率为 (0.5, 0.5),待比较策略为 (0.75, 0.25)。这些是作者设定的完整回答概率,不是真实文本的实测概率。
参考策略的期望奖励为 ,新策略为 。要衡量偏离,先分别计算两个回答的概率比的对数,再按新策略的概率加权:
表示待比较策略, 表示参考策略。两项分别约为 0.304099 与 −0.173287 nat。单项可以为负,完整 KL 却不会为负。若交换两个分布,改用参考概率作平均,结果是 0.143841,不是同一个数。如果参考策略给某个回答零概率,而新策略能生成它,这个方向的 KL 就是无穷大,因此必须留意两个分布支持哪些回答。
固定提示为 ,完整回答为 ,同样的运算一般写成:
自回归模型的序列对数概率,是各 Token 条件对数概率之和。实际 RL 训练通过采样回答估计这个期望,不会枚举全部可能文本。
设非负系数 表示每 nat 偏离要扣多少奖励。比较时,用期望奖励减去 倍 KL。
表 35.2:惩罚强度会改变取舍。
| 策略 | 期望奖励 | KL,nat | 奖励 − KL, | 奖励 − 2 KL, |
|---|---|---|---|---|
参考 (0.5, 0.5) | 0.500000 | 0.000000 | 0.500000 | 0.500000 |
待比较 (0.75, 0.25) | 0.750000 | 0.130812 | 0.619188 | 0.488376 |
仅在这两个候选策略之间, 时新策略胜出, 时却落后。这里比较的是指定分布,不是优化器收敛后的结果。惩罚也没有认证参考策略本身正确。软惩罚不能保证硬性的质量或安全门槛一定满足。
35.5 不单独训练奖励模型,能不能学偏好
Section titled “35.5 不单独训练奖励模型,能不能学偏好”前面的路径先学评分器,再用采样回答优化策略。直接偏好优化(Direct Preference Optimization,DPO)在其原始的固定参考、离线数据设定中,提供了另一条路径:直接用偏好对训练策略,不单独拟合奖励模型,也不在每次更新中重新从当前策略采样回答。
DPO 仍要在当前策略和参考策略下,分别计算两个回答的概率。它比较的是:相对于参考策略原先的偏好,当前策略是否更偏向 chosen。
例 35.3:四个概率组成一个 DPO 损失。 让 A 为 chosen,B 为 rejected。沿用参考概率 (0.5, 0.5) 和当前概率 (0.75, 0.25)。A 的对数概率比为 ,B 为 ;两者相减,得到 。取 DPO 的系数 :
如果初始化时当前策略等于参考策略,两个对数比都为零,损失为 。因此,在 DPO 的偏好模型下,新分布让这条偏好标签获得了更高概率。
用 表示 chosen, 表示 rejected。一对回答的一般表达式是:
下标 标明当前策略的参数可训练。四个概率必须使用同一个提示和相容的序列化方式,代入本例数字就得到例 35.3。原始目标对偏好对求平均。回答概率覆盖约定的回答 Token 和结束标记;若再按回答长度除一次对数概率,就改变了目标。
DPO 的推导把一种偏好模型与带 KL 正则的奖励目标联系起来。其中 缩放对数比之差,不是另一份人工评分,也不是“安全概率”。真实训练还有有限数据、错误标签和模型容量限制,不能直接当作推导中的理想最优解。相对差值改善,也不意味着每次更新都会提高 chosen 的绝对概率,因为其他回答共享概率质量和参数。
35.6 分数变好,也可能把答案带偏
Section titled “35.6 分数变好,也可能把答案带偏”我们故意设计一个有缺陷的评分器:回答只要包含 750,就奖励 1。于是“限额不是 750,应按 600 执行”也能得奖。搜索或训练过程可能利用这一点,在错误回答里插入预期数字。这就是奖励投机(reward hacking):利用评分信号与真实目标之间的差距,提高测得的奖励。
学出来的评分器可能依赖更隐蔽的线索,例如长度、自信语气、附和用户或熟悉的格式。DPO 同样需要审阅偏好对。历史问题的标签若标反,概率算得再准确,也会鼓励错误的相对偏好。省去独立奖励模型,不等于消除了数据错误或评分信号的缺陷。
偏好、真实性、公平性与安全性需要不同证据。两个答案都错,也能比较出一个胜者;评分准则可能遗漏受到影响的人群;回答中描述了批准,不代表批准真的发生。应直接核对相关事实、受影响的样例和实际操作边界。InstructGPT 的局限讨论说明了标注群体与模型残留问题;DPO 的目标函数是一条学习规则,不是对齐合格证。
如果题目答案能按明确规则检查,反馈中的一些歧义就可能减少。第 36 章会考察这种办法,但检查程序本身仍然需要审查。
35.7 本章小结
Section titled “35.7 本章小结”偏好优化从依赖上下文的判断开始。常见 RLHF 路径先训练奖励模型,再利用采样奖励、相对固定参考策略更新回答策略。原始离线 DPO 则直接使用偏好对和参考对数概率比。两条路径都受标签奖励什么影响。偏好胜出或 KL 很小,都不能证明真实、公平、安全或具有操作权限。
35.8 习题
Section titled “35.8 习题”- 把表 35.2 的系数改成 ,计算新策略扣除惩罚后的分数,并与参考策略比较。
- chosen/rejected 的参考概率为
(0.8, 0.2),当前策略仍为(0.75, 0.25)。取 DPO 的 ,计算分差的指数、偏好概率和损失。为什么“chosen 的概率超过一半”还不够? - 审核者更喜欢一个自信地重复用户过时的 600 元前提的回答。评分准则哪里出了问题?需要补查什么证据?
- 评分器接受所有以“已核验”结尾的回答。说明奖励怎样可能提高,而准确性没有提高。再设计一个不用同一句话作正确标签的诊断。
- 报告声称:“DPO 不需要奖励模型,因此既不需要偏好审核,也不需要参考检查点。”纠正两处推论,并说明本地偏好测试通过后仍不能证明什么。
35.9 参考解答
Section titled “35.9 参考解答”- 新策略分数为 ,高于参考策略的
0.500000。改变的是系数,不是指定奖励或策略。 - 两个比值之比为 。因此 ,,损失为 。虽然 chosen 的概率仍高于 rejected,但相对于参考策略,偏向 chosen 的程度反而减弱了。
- 附和与自信挤掉了证据和版本范围。应查看现行制度及问题:若现行值为 750,且问现行限额,600 就不合格。记录缺失时应暂不形成事实偏好,不能假定有未记录的来源。
- 策略可以在错答案后加上这几个字。让正确与错误回答带相同后缀,其中纳入矛盾陈述和无依据的操作声明,再按已提供事实与边界评分,把误放行保留为评分器失败。
- 原始 DPO 仍需要可靠的比较标签和固定参考概率;检查点、分词器与模板固定时,可以缓存这些概率。本地偏好通过,不能证明全部事实、所有受影响人群的利益、安全条件或执行权限都已得到保障。
35.10 参考文献
Section titled “35.10 参考文献”- Ouyang 等,Training language models to follow instructions with human feedback,2022,第 3.5、5 节。支持奖励模型、PPO、参考策略的流程,以及偏好对齐的边界。
- Rafailov 等,Direct Preference Optimization,2023,第 3—4 节、式 3—7。在特定偏好模型与 KL 正则条件下推导直接偏好目标,支持四概率算例。