跳转到内容

第 35 章 偏好优化:RLHF、DPO 与对齐边界

虚构的北京差旅制度规定,现行住宿限额为每间夜 750 元,旧版限额为 600 元。用户询问现行限额。一个回答说“按现行制度,限额是 750 元”,另一个说“当然可以!您的限额是 600 元”。后者热情、肯定,但把它当作 SFT 示范,教给模型的仍然是错误答案。

如果比较两个回答比亲自写出理想回答更容易,就可以不直接提供唯一目标,而是记录:在这条请求和这些证据下,哪个回答更好。数据里通常把被偏好的回答叫 chosen,另一个叫 rejected。字段名记录的是判断,不是正确性的证明。一个被误标为 chosen 的回答仍然可能是错的。

第 34 章说明了示范与损失。本章先审查比较记录,再用第 6 章的概率工具解释怎样从比较中学习。验收依据是明确的评分准则和保留不变的评测契约,不是满足所有人的偏好,更不是证明每句话都真实。

评分准则(rubric)规定了怎样作出判断、怎样复核判断。本例先检查是否答对所问版本、是否有记录支持、是否遵守操作边界。只有这些条件成立,才比较清晰程度与相关细节。友好不能抵消金额错误。缺少证据时,应暂不形成训练标签,而不是猜一个答案。

例 35.1:审阅四组偏好对。 每一对都包含证据和问题范围。这些是原创双语教学数据,不是人类偏好调查,原始记录保存在 data/part-vi/preferences-v1.json。

表 35.1:相似的标签,需要不同处理。

请求与已提供证据原 chosen原 rejected审核结论
问现行;旧 600,新 750现限额:750现限额:600保留:chosen 使用新版
问历史;旧 600,新 750旧限额:750旧限额:600对调:问题范围改变了答案
问现行;缺少制度记录现限额:750现限额:600暂缓使用:两个金额都无依据
问现行;新版为 750750 元现限额:750 元平局:都符合本次准则

使第一行回答正确的数字,在第二行却使 chosen 答错。第三行中,即使审核者记得此前的例子,也不能偷偷给这道“缺少记录”的题补上来源。第四行若强行分出胜负,就制造了准则并不支持的差别。这份小数据只接纳严格偏好:平局保留在审核记录中,不进入偏好对损失。其他目标可以处理平局,但需要另外规定。

审核后有两组可用的严格比较:一组保留,一组对调。原标签、修改理由、准则版本和修正结果都要保存。实际标注时,应把候选身份与展示顺序分开,对重要分歧留下记录,并把相关请求放在同一数据划分中。从少数回答拼出十组比较,不等于获得十个独立请求。

35.3 先学会打分,再让回答更容易得高分

Section titled “35.3 先学会打分,再让回答更容易得高分”

要让好回答更容易出现,需要一个可以改变的分布。这里的策略(policy)就是语言模型在给定提示后,对回答给出的条件分布。选下一个 Token 是一次动作,完整回答是一连串动作。奖励(reward)是赋给回答的一个反馈数值;它是训练信号,不是金钱,也不是校准过的真实概率,更不授予操作权限。

一种常见的基于人类反馈的强化学习(reinforcement learning from human feedback,RLHF)流程,会先用比较记录训练一个独立的奖励模型(reward model)。它读取提示和候选回答,输出分数。假设 chosen 得 2 分,rejected 得 1 分。一种常用偏好模型把分差转换成“chosen 更受偏好”的预测概率:

σ(1)=11+exp⁡(−1)=0.731059.\sigma(1)=\frac{1}{1+\exp(-1)}=0.731059.

函数 σ(z)=1/(1+exp⁡(−z))\sigma(z)=1/(1+\exp(-z)) 把实数分差 zz 转换成 0 到 1 之间的数。分数相同,σ(0)=0.5\sigma(0)=0.5;chosen 减 rejected 的差越大,预测的偏好概率越高。对“chosen 胜出”的标签,代价 −ln⁡σ(z)-\ln\sigma(z) 会惩罚过低的预测概率。当 z=1z=1 时,代价为 0.313262。若两个分数都加 100,分差和代价都不变。因此,仅靠比较并不能确定奖励的绝对零点。

学会打分后,从策略中采样回答,给回答评分,再更新策略,鼓励高奖励行为。这种利用采样动作和反馈进行学习的方式就是强化学习(reinforcement learning,RL)。InstructGPT 使用 PPO 完成这一步,读懂本章不需要掌握它的优化器细节。在这里描述的策略更新阶段,奖励模型与参考策略(reference policy)保持固定。参考策略是保存下来、用来衡量偏离程度的分布,常取起始 SFT 检查点。它既不是人工标签,也不是另一位投票者。

奖励模型 → RL 策略更新
  1. 模型之外偏好 A > B → 拟合奖励分数
  2. 模型保存的数值奖励模型:先训练,在本次 RL 阶段固定
  3. 处理步骤采样策略输出 → 奖励 − β 对数比
  4. 模型保存的数值更新策略;参考策略保持固定

比较标签与采样动作承担不同作用;对数比的期望形成 KL 惩罚。

原始离线 DPO
  1. 模型之外同一提示、chosen A、rejected B
  2. 模型保存的数值策略 (0.75, 0.25);固定参考 (0.5, 0.5)
  3. 处理步骤β = 1:差值 ln 3 → 损失 0.287682
  4. 模型保存的数值由偏好对损失更新策略

本次更新不单独拟合奖励模型,也不从当前策略采样;仍需要标签与参考概率。

图 35.1:同一组偏好对,可以沿两条路径改变策略。 原创训练阶段关系图 · CC BY-SA 4.0

图 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.5×1+0.5×0=0.50.5\times1+0.5\times0=0.5,新策略为 0.750.75。要衡量偏离,先分别计算两个回答的概率比的对数,再按新策略的概率加权:

DKL(π∥πref)=0.75ln⁡0.750.5+0.25ln⁡0.250.5=0.130812.D_{\mathrm{KL}}(\pi\Vert\pi_{\mathrm{ref}}) =0.75\ln\frac{0.75}{0.5}+0.25\ln\frac{0.25}{0.5} =0.130812.

π\pi 表示待比较策略,πref\pi_{\mathrm{ref}} 表示参考策略。两项分别约为 0.304099 与 −0.173287 nat。单项可以为负,完整 KL 却不会为负。若交换两个分布,改用参考概率作平均,结果是 0.143841,不是同一个数。如果参考策略给某个回答零概率,而新策略能生成它,这个方向的 KL 就是无穷大,因此必须留意两个分布支持哪些回答。

固定提示为 xx,完整回答为 yy,同样的运算一般写成:

DKL(π∥πref)=∑yπ(y∣x)ln⁡π(y∣x)πref(y∣x).D_{\mathrm{KL}}(\pi\Vert\pi_{\mathrm{ref}}) =\sum_y \pi(y\mid x)\ln\frac{\pi(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)}.

自回归模型的序列对数概率,是各 Token 条件对数概率之和。实际 RL 训练通过采样回答估计这个期望,不会枚举全部可能文本。

设非负系数 β\beta 表示每 nat 偏离要扣多少奖励。比较时,用期望奖励减去 β\beta 倍 KL。

表 35.2:惩罚强度会改变取舍。

策略期望奖励KL,nat奖励 − KL,β=1\beta=1奖励 − 2 KL,β=2\beta=2
参考 (0.5, 0.5)0.5000000.0000000.5000000.500000
待比较 (0.75, 0.25)0.7500000.1308120.6191880.488376

仅在这两个候选策略之间,β=1\beta=1 时新策略胜出,β=2\beta=2 时却落后。这里比较的是指定分布,不是优化器收敛后的结果。惩罚也没有认证参考策略本身正确。软惩罚不能保证硬性的质量或安全门槛一定满足。

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 的对数概率比为 ln⁡(1.5)\ln(1.5),B 为 ln⁡(0.5)\ln(0.5);两者相减,得到 ln⁡(3)=1.098612\ln(3)=1.098612。取 DPO 的系数 β=1\beta=1:

σ(ln⁡3)=11+1/3=0.75,LDPO=−ln⁡(0.75)=0.287682.\sigma(\ln 3)=\frac{1}{1+1/3}=0.75, \qquad L_{\mathrm{DPO}}=-\ln(0.75)=0.287682.

如果初始化时当前策略等于参考策略,两个对数比都为零,损失为 ln⁡2=0.693147\ln 2=0.693147。因此,在 DPO 的偏好模型下,新分布让这条偏好标签获得了更高概率。

用 ycy_c 表示 chosen,yry_r 表示 rejected。一对回答的一般表达式是:

z=β[ln⁡πθ(yc∣x)πref(yc∣x)−ln⁡πθ(yr∣x)πref(yr∣x)],LDPO=−ln⁡σ(z).z=\beta\left[ \ln\frac{\pi_\theta(y_c\mid x)}{\pi_{\mathrm{ref}}(y_c\mid x)} -\ln\frac{\pi_\theta(y_r\mid x)}{\pi_{\mathrm{ref}}(y_r\mid x)} \right], \qquad L_{\mathrm{DPO}}=-\ln\sigma(z).

下标 θ\theta 标明当前策略的参数可训练。四个概率必须使用同一个提示和相容的序列化方式,代入本例数字就得到例 35.3。原始目标对偏好对求平均。回答概率覆盖约定的回答 Token 和结束标记;若再按回答长度除一次对数概率,就改变了目标。

DPO 的推导把一种偏好模型与带 KL 正则的奖励目标联系起来。其中 β\beta 缩放对数比之差,不是另一份人工评分,也不是“安全概率”。真实训练还有有限数据、错误标签和模型容量限制,不能直接当作推导中的理想最优解。相对差值改善,也不意味着每次更新都会提高 chosen 的绝对概率,因为其他回答共享概率质量和参数。

35.6 分数变好,也可能把答案带偏

Section titled “35.6 分数变好,也可能把答案带偏”

我们故意设计一个有缺陷的评分器:回答只要包含 750,就奖励 1。于是“限额不是 750,应按 600 执行”也能得奖。搜索或训练过程可能利用这一点,在错误回答里插入预期数字。这就是奖励投机(reward hacking):利用评分信号与真实目标之间的差距,提高测得的奖励。

学出来的评分器可能依赖更隐蔽的线索,例如长度、自信语气、附和用户或熟悉的格式。DPO 同样需要审阅偏好对。历史问题的标签若标反,概率算得再准确,也会鼓励错误的相对偏好。省去独立奖励模型,不等于消除了数据错误或评分信号的缺陷。

偏好、真实性、公平性与安全性需要不同证据。两个答案都错,也能比较出一个胜者;评分准则可能遗漏受到影响的人群;回答中描述了批准,不代表批准真的发生。应直接核对相关事实、受影响的样例和实际操作边界。InstructGPT 的局限讨论说明了标注群体与模型残留问题;DPO 的目标函数是一条学习规则,不是对齐合格证。

如果题目答案能按明确规则检查,反馈中的一些歧义就可能减少。第 36 章会考察这种办法,但检查程序本身仍然需要审查。

偏好优化从依赖上下文的判断开始。常见 RLHF 路径先训练奖励模型,再利用采样奖励、相对固定参考策略更新回答策略。原始离线 DPO 则直接使用偏好对和参考对数概率比。两条路径都受标签奖励什么影响。偏好胜出或 KL 很小,都不能证明真实、公平、安全或具有操作权限。

  1. 把表 35.2 的系数改成 β=0.5\beta=0.5,计算新策略扣除惩罚后的分数,并与参考策略比较。
  2. chosen/rejected 的参考概率为 (0.8, 0.2),当前策略仍为 (0.75, 0.25)。取 DPO 的 β=1\beta=1,计算分差的指数、偏好概率和损失。为什么“chosen 的概率超过一半”还不够?
  3. 审核者更喜欢一个自信地重复用户过时的 600 元前提的回答。评分准则哪里出了问题?需要补查什么证据?
  4. 评分器接受所有以“已核验”结尾的回答。说明奖励怎样可能提高,而准确性没有提高。再设计一个不用同一句话作正确标签的诊断。
  5. 报告声称:“DPO 不需要奖励模型,因此既不需要偏好审核,也不需要参考检查点。”纠正两处推论,并说明本地偏好测试通过后仍不能证明什么。
  1. 新策略分数为 0.75−0.5×0.130812=0.6845940.75-0.5\times0.130812=0.684594,高于参考策略的 0.500000。改变的是系数,不是指定奖励或策略。
  2. 两个比值之比为 (0.75/0.8)/(0.25/0.2)=0.75(0.75/0.8)/(0.25/0.2)=0.75。因此 exp⁡(z)=0.75\exp(z)=0.75,σ(z)=0.75/1.75=3/7=0.428571\sigma(z)=0.75/1.75=3/7=0.428571,损失为 −ln⁡(3/7)=0.847298-\ln(3/7)=0.847298。虽然 chosen 的概率仍高于 rejected,但相对于参考策略,偏向 chosen 的程度反而减弱了。
  3. 附和与自信挤掉了证据和版本范围。应查看现行制度及问题:若现行值为 750,且问现行限额,600 就不合格。记录缺失时应暂不形成事实偏好,不能假定有未记录的来源。
  4. 策略可以在错答案后加上这几个字。让正确与错误回答带相同后缀,其中纳入矛盾陈述和无依据的操作声明,再按已提供事实与边界评分,把误放行保留为评分器失败。
  5. 原始 DPO 仍需要可靠的比较标签和固定参考概率;检查点、分词器与模板固定时,可以缓存这些概率。本地偏好通过,不能证明全部事实、所有受影响人群的利益、安全条件或执行权限都已得到保障。