Drill · 手撕

Drill: Reward Margin / Bradley-Terry Loss

可运行的 from-scratch 实现 + 测试。reward model 训练的核心损失。

数学 / The math

Bradley-Terry 模型:给定 chosen / rejected 的标量奖励 rw,rlr_w, r_l,

P(wl)=σ(rwrl)P(w \succ l) = \sigma(r_w - r_l)

训练 reward model = 最大化该似然 = 最小化成对 logistic 损失:

L=E[logσ(rwrl)]L = -\,\mathbb{E}\big[\log\sigma(r_w - r_l)\big]

直觉:把 chosen 的分数推高于 rejected,差距(margin)rwrlr_w-r_l 越大,损失越小。

诊断量:margin(平均奖励差)、accuracy(排序正确的比例 rw>rlr_w>r_l)。

与 DPO 的关系

DPO 把策略本身当成隐式 reward(r=βlogπθπrefr=\beta\log\frac{\pi_\theta}{\pi_{\text{ref}}}),它的损失就是把这里的 rw,rlr_w,r_l 换成隐式奖励的同一个 BT 损失——所以 DPO「不需要单独的 reward model」。

文件 / Files

python from_scratch.py            # 演示
python test_reward_margin.py      # 测试(或 pytest)

追问分层 / Stratified follow-ups