这篇文章对应视频:【[Agentic RL] [RM] 09 Reward Model insights,理解概率建模(Bradley-Terry)、MLE、深度学习的关系】(BV1z4vkBBEgD)。

我不会把它写成“逐句笔记”,而是把 RM 的核心拆成一个你能反复复用的框架:

最顶层是 MLE(决定 loss),中间层是 Bradley-Terry(赋予概率意义),最底层是 Deep Learning(提供函数逼近与表征能力)。

如果你把 Reward Model 当成“又一个神经网络”,你很容易在训练/调参/诊断上迷路;但只要把它当成一个概率模型的参数化实现,很多现象会瞬间可解释(包括:为什么 RM 会偏向“拉平”、为什么 KL 约束几乎是必需、为什么 intransitive 数据会让 RM 变钝)。

系列导航:

关联阅读(建议顺序):

  1. RL4LLM 最小闭环:reward + PG/KL 的工程细节
  2. PPO/GRPO 中 KL 的意义与调参逻辑(别背经验区间)
  3. 多轮训练的分布一致性:token-in-token-out
  4. DPO 专文:KL 正则 RL、隐式 RM 与常见坑点

配套仓库(你本地已下载)里,本文主要对齐这两份笔记:

  • Bradley-Terry + MLE + 梯度直觉 + intransitive 偏好:
    • /Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/reward_model/Bradley-Terry-RM.ipynb
  • DPO 视角(可选):为什么 KL-constrained objective + BT 偏好建模可以“消掉显式 RM”
    • /Users/wangpeng/Downloads/modern_genai_bilibili-main/agentic_rl/reward_model/dpo.ipynb

0. RM 在 RLHF/Agentic RL 里到底扮演什么角色

把 RM 放回 RLHF 的链路中,你可以把它当成一个“可微的偏好评估器”:

  1. 你有一个 prompt $x$(问题/任务/上下文)。
  2. 你有两个回答(或两个轨迹)$y_w$(winner)和 $y_\ell$(loser)。
  3. 人类(或规则/verifier)告诉你 $y_w$ 更好。
  4. 你想训练一个模型 $r_\theta(x, y)$,输出一个标量分数,使得“分差越大,winner 胜出的概率越高”。

然后这个 RM 进入后续阶段:

  • 作为 RL(PPO/GRPO)的 reward(或其中一部分)
  • 或者作为采样/拒绝采样/重排序器(re-ranking)
  • 或者作为 DPO/IPO/SPIN 等偏好优化的隐式中间量

你后面看到的很多工程规则(例如 RL 里要加 KL anchor、要做 holdout 评测、要防 reward hacking),本质都来自一个事实:

RM 只在它“被训练过的数据分布附近”才可靠。

所以 KL 约束不是“玄学正则”,而是“保证策略别跑出 RM 的可信域(trust region)”的工程手段。


1. Bradley-Terry:把“分数差”解释成“偏好概率”

Bradley-Terry(BT)模型的假设非常简单,也非常强:

对同一个 prompt $x$ 下的两个候选 $y_w, y_\ell$,winner 被偏好的概率由分差决定:

$$
P(y_w \succ y_\ell \mid x)=\sigma(\Delta r)=\sigma(r_\theta(x,y_w)-r_\theta(x,y_\ell)),
$$

其中 $\sigma(u)=\frac{1}{1+e^{-u}}$。

换个更“竞赛直觉”的写法(选手 A/B):

$$
P(A \succ B)=\frac{e^{r_A}}{e^{r_A}+e^{r_B}}=\sigma(r_A-r_B).
$$

1.1 两个常被忽略、但决定你能不能调参的性质

  1. 只关心分差,不关心绝对值
    • 如果你把所有分数加同一个常数 $c$,分差不变,概率不变。
    • 这意味着 RM 的“零点”是任意的,你看到的 reward 绝对值本身不重要,重要的是差。
  2. 分差尺度决定“梯度多大”
    • BT 通过 sigmoid 把分差压到 $(0,1)$,分差一旦很大就会饱和,梯度会变小。
    • 所以 RM 不会“无限拉大分差”,它更倾向把学习力用在“还分不清的样本”(hard negatives)上。

2. MLE:从概率模型推导出 RM 的 loss(以及它为什么长得像 BCE)

现在我们已经定义了“偏好概率”。训练就变成了统计学最常规的事情:最大化观测到的选择的概率。

给一个偏好数据集 $\mathcal{D}={(x,y_w,y_\ell)}$,MLE 目标是:

$$
\max_\theta \prod_{(x,y_w,y_\ell)\in \mathcal{D}} P(y_w \succ y_\ell \mid x).
$$

取对数(把连乘变连加):

$$
\max_\theta \sum_{(x,y_w,y_\ell)\in \mathcal{D}} \log \sigma(r_\theta(x,y_w)-r_\theta(x,y_\ell)).
$$

写成最小化 loss(取负号)就是:

$$
\mathcal{L}_{\text{RM}}(\theta)= - \mathbb{E}_{(x,y_w,y_\ell)\sim \mathcal{D}} \left[\log \sigma(\Delta r)\right].
$$

很多实现里也会做一个按 pair 数量的归一(例如从 $K$ 个候选里构造 $\binom{K}{2}$ 个 pair),这不会改变本质,只是改变数值尺度。

2.1 这就是“二分类交叉熵”:把 $\Delta r$ 当 logit

如果你把 $\Delta r$ 当成二分类 logit,label 恒为 1(winner 赢),那么:

  • BCEWithLogitsLoss(logit=Δr, label=1) 等价于 -log σ(Δr)

所以 RM 训练本质上是一个非常熟悉的监督学习问题:逻辑回归 / 二元交叉熵

这也解释了一个工程直觉:

RM 并不“直接学习人类偏好”,它学习的是“能把 winner/loser 分开的一条判别边界”。


3. 梯度长什么样:RM 为什么会自动聚焦 hard negatives

设 $\Delta r=r_w-r_\ell$,loss 为 $L=-\log \sigma(\Delta r)$。

有一个极其重要的导数(几乎所有 RM 的训练现象都能从它解释):

$$
\frac{\partial L}{\partial \Delta r}=\sigma(\Delta r)-1.
$$

你可以把它理解成一个“权重项”:

  • 如果模型把 winner 打得很低($\Delta r \ll 0$),$\sigma(\Delta r)\approx 0$,梯度 $\approx -1$:狠狠改
  • 如果模型分不清($\Delta r \approx 0$),$\sigma(\Delta r)=0.5$,梯度 $=-0.5$:努力改
  • 如果模型已经分得很开($\Delta r \gg 0$),$\sigma(\Delta r)\approx 1$,梯度接近 0:基本不改

这就是为什么实际训练里你会看到 RM 逐步“把简单样本放到一边”,然后对难样本更敏感。

3.1 一个经常被误解的点:饱和不是坏事

很多人看到 sigmoid 饱和就会条件反射地说“梯度消失不好”。但对 RM 来说,饱和恰恰是合理的:

  • RM 的目标不是给出“无限精确的分差”,而是把 winner/loser 的相对顺序学对;
  • 一旦分差足够大,继续增大分差并不会带来更多信息,反而会把训练算力浪费在“送分题”上。

4. Deep Learning:RM 只是把 $r(x,y)$ 参数化成可学习函数

现在你可以把 RM 看成一个黑盒函数:

  • 输入:$(x,y)$
  • 输出:一个标量 $r_\theta(x,y)$

具体实现通常是:

  1. prompt + response 拼成一段序列
  2. 用一个 encoder(LLM/Transformer)得到 hidden states
  3. 用一个线性 head 输出标量 reward(常见做法是取最后一个 token 或平均池化)

然后用上面的 pairwise loss 训练即可。

下面给一个“够用且不误导”的 PyTorch 伪代码(不绑定任何框架):

1
2
3
4
5
6
7
8
9
10
11
def rm_loss(r_w: torch.Tensor, r_l: torch.Tensor) -> torch.Tensor:
# r_w, r_l: [B] scalar rewards for winner/loser
delta = r_w - r_l
return torch.nn.functional.softplus(-delta).mean() # -log sigmoid(delta)

# training step
r_w = rm(x, y_w) # [B]
r_l = rm(x, y_l) # [B]
loss = rm_loss(r_w, r_l)
loss.backward()
optimizer.step()

注意:这里用 softplus(-Δr) 是为了数值稳定(等价于 -log sigmoid(Δr))。


5. Intransitive Preferences:为什么偏好数据一旦“成环”,RM 会倾向“拉平”

BT 模型隐含了一个强假设:存在一个一维的隐藏分数可以排序所有候选。

但人类偏好经常不是一维可排序的,典型现象是“非传递”:

  • $A \succ B$
  • $B \succ C$
  • 但 $C \succ A$

这在语言模型里非常常见,例如:

  • 长文本更“详尽”胜过短文本
  • 短文本更“干净利落”胜过幽默文本
  • 幽默文本更“吸引人”胜过长文本

这种数据对 BT 是不可满足约束。关键点在于:log loss 会极度惩罚“非常确信地预测错”

所以在成环数据上,BT 的 MLE 往往会倾向一个妥协策略:

把分数拉近(flattening),让每一对的胜率都接近 0.5,从而避免任何一条边出现“confident wrong”的巨大损失。

工程含义是:如果你的偏好数据里环很多,标准 RM 会变得“钝”,对细粒度风格差异不敏感。

5.1 怎么缓解(不是银弹,但能让你少走弯路)

  1. 把偏好拆成多维属性(多头 reward / 多目标优化)
    • 把“长度/严谨/幽默/安全”等拆开建模,后续用加权组合或约束优化。
  2. 做更强的数据分层与采样
    • 你不一定要把所有 style 混在一个 RM 里;对特定任务可以做 task-specific RM。
  3. 承认偏好噪声并显式建模
    • BT 是最简单的噪声模型;如果你真的需要表达更复杂的人类偏好结构,要考虑更丰富的随机效用模型(这超出本文范围,但你至少要知道 BT 的边界)。

6. 为什么 KL 约束几乎是必需:RM 的“可信域”不是无限的

你在训练 RL(PPO/GRPO)时,常见目标会长这样(省略细节):

$$
\max_\pi \mathbb{E}[r(x,y)] - \beta D_{KL}(\pi ,|, \pi_{\text{ref}}).
$$

这里 KL 项的工程意义非常朴素:

  • RM 只在“训练它的数据分布附近”靠谱;
  • 你让 policy 生成的分布跑太远,RM 就会开始乱打分;
  • RL 于是会利用这个漏洞进行 reward hacking,导致能力表面上升、行为实际上变坏。

所以 KL 是一种“让策略别跑飞”的护栏,而不是可有可无的装饰。


7. (可选)DPO 视角:BT + KL 约束如何“消掉显式 RM”

如果你看过 DPO,你会发现它的数学几乎就是把上面的两件事拼在一起:

  1. KL-constrained reward maximization 有闭式解:

$$
\pi^*(y|x)\propto \pi_{\text{ref}}(y|x)\cdot \exp\left(\frac{r(x,y)}{\beta}\right).
$$

  1. BT 偏好模型只关心分差 $r(x,y_w)-r(x,y_\ell)$。

把 1 代入 2,会得到一个非常关键的“消元”:

  • 归一化常数(partition function)在做差时抵消;
  • 显式 reward 变成了 log-ratio(相对参考模型的提权幅度);
  • 最终 loss 仍然是 -log sigmoid(·) 的二分类形式。

这就是为什么 DPO 常被描述为:

“把 RL 问题降维成一个二分类监督学习问题(BT modeling)”

它也解释了 DPO/偏好优化里为什么依然要关心 KL/参考模型:你本质上仍然在控制“偏离可信域”的程度。

(如果你想完整看这段推导,直接对照本地笔记:reward_model/dpo.ipynb。)


8. 面向 Agentic RL / Deep Research:RM 应该怎么落地

如果你的目标是 deep research agent(检索、引用、事实一致性、长链推理),我建议你把 RM 设计成“可验证信号的组合”,而不是单纯让 RM 去学一个玄学偏好:

  1. 尽量把 reward 绑定到可验证指标
    • 引用是否可追溯、是否引用了正确段落、事实一致性校验、是否覆盖了关键文献等。
  2. 对不可验证的“写作质量/逻辑”再用偏好数据补齐
    • 但要接受 intransitive/噪声不可避免,并通过数据分层和多头 reward 降低冲突。
  3. 始终把“分布一致性”当第一优先级
    • 多轮 agent 场景建议坚持 token-in-token-out,否则你在 RL 阶段很难解释 logprob/ratio/KL 的统计量。

9. 小结(你真正需要记住的)

  1. RM 不是“又一个神经网络”,它是 Bradley-Terry 概率模型的参数化实例
  2. MLE 推出来的 loss 就是 -log sigmoid(Δr),等价于 BCE;它的梯度天然会聚焦 hard negatives。
  3. 偏好数据存在大量 intransitive 环时,BT 会倾向“拉平”,这是模型边界而不是实现 bug。
  4. KL 约束的核心作用是:把策略限制在 RM 的可信域附近,避免 reward hacking 与 OOD 崩坏。