偏好学习:从比较和排序数据中学习奖励模型

FreeGuideOnline 最新 2026-06-29

什么是偏好学习?

偏好学习(Preference Learning)是机器学习的一个分支,核心是从比较排序数据中学习。与传统的回归或分类不同,我们并不直接观察某个对象的绝对分数,而是观察“A 比 B 更好”这类相对偏好。这一思想在推荐系统、信息检索以及近年来的**基于人类反馈的强化学习(RLHF)**中扮演了关键角色。

偏好学习的终极目标是构建一个奖励模型(Reward Model),它能够对任意给定的选项给出一个一致的分数,使得这些分数与观察到的偏好关系相符。

为什么需要偏好学习?

在许多现实场景中,直接获取精确的评分非常困难,但获取比较结果却自然得多:

  • 主观评价:让用户给一部电影打 1-5 星往往不够稳定,但问“电影 A 和电影 B 你更喜欢哪一个”要可靠得多。
  • 人类反馈:训练大语言模型时,标注员很难写出一个完美的“理想回答分数”,但很容易指出“回答 B 比回答 A 更有帮助”。
  • 无法量化的指标:产品的设计美感、文本的连贯性,都更适合用排序来捕捉。

偏好学习将相对判断转化为绝对分数,使得模型可以泛化到未见过的选项上。

偏好数据的数学表达

假设我们有一组选项 $x_i, x_j \in X$。一条偏好数据可以表示为: $$x_i \succ x_j \quad (\text{即 } x_i \text{ 优于 } x_j)$$ 有时数据也会包含偏好强度或完全排序。我们的目标是学习一个奖励函数 $r_\theta(x)$,使得当 $x_i \succ x_j$ 时,$r_\theta(x_i) > r_\theta(x_j)$。

Bradley-Terry 模型:将偏好转化为概率

最经典的偏好建模方法是 Bradley-Terry 模型。它假设每个选项都有一个隐含的“能力值” $r(x)$,那么 $x_i$ 优于 $x_j$ 的概率为: $$P(x_i \succ x_j) = \frac{e^{r(x_i)}}{e^{r(x_i)} + e^{r(x_j)}} = \sigma\big(r(x_i) - r(x_j)\big)$$ 其中 $\sigma$ 是 sigmoid 函数。这个模型将二选一比较变成了一个“逻辑回归”问题:以分数差 $r(x_i)-r(x_j)$ 作为输入,预测偏好概率。

从比较中学习奖励模型

给定一批比较数据 $\mathcal{D} = {(x_i, x_j)}$,其中 $x_i$ 被偏好。我们可以通过最大似然估计来训练奖励模型。损失函数为负对数似然: $$\mathcal{L}(\theta) = -\sum_{(x_i, x_j) \in \mathcal{D}} \log \sigma\big(r_\theta(x_i) - r_\theta(x_j)\big)$$

这就构成了一个可微的目标函数。我们可以用任何神经网络作为 $r_\theta(x)$,利用随机梯度下降优化参数 $\theta$。

扩展到排序数据

当一次给出 $K$ 个选项的完全排序时(例如 $x_1 \succ x_2 \succ \dots \succ x_K$),可以将其分解为多个两两比较。为了提高效率,通常会使用Plackett-Luce 模型,但实践中简化为取相邻项的比较也能取得不错效果。

偏好学习中的常见陷阱

奖励黑客(Reward Hacking)

如果奖励模型只在有限的偏好数据上训练,它可能会学到一些“捷径”。例如,对于语言模型,它可能仅仅根据回答的长度给出高分,而忽略了内容质量。这种与真实目标不一致的现象被称为“奖励黑客”,需要通过多样化数据、正则化与对抗训练来缓解。

比较数据中的噪声与冲突

人类标注并非完全一致:同一对选项不同人可能给出相反偏好,甚至同一个人在不同时间判断不同。处理噪声的常见方法是:

  • 引入标签平滑
  • 使用贝叶斯方法建模标注员特异性
  • 收集多个标注并采用多数投票或 Soft Label

偏好学习的典型应用流程

  1. 数据收集:让标注员对模型生成的输出进行两两比较或打分排序。
  2. 奖励建模:使用 Bradley-Terry 类模型在比较数据上训练奖励模型 $r_\theta$。
  3. 策略优化:将 $r_\theta$ 作为奖励函数,利用强化学习(如 PPO)微调生成模型,使其输出能获得更高奖励。
  4. 迭代:使用新模型生成新的输出,再收集偏好数据,持续改进奖励模型。

总结

偏好学习提供了一条从比较和排序中提取知识的优雅路径。其核心在于 Bradley-Terry 概率框架和最大似然估计,使得任意可微模型都可以转化为奖励模型。理解它的数学基础和实践陷阱,是掌握现代 RLHF 技术栈的第一步。