RLHF-奖励模型RM 的"引擎":Pairwise Loss 梯度计算详解
在上一篇文章中,我们介绍了奖励模型 (RM) 是 RLHF 的"指南针",它通过 Pairwise Ranking Loss 来学习人类的偏好。我们最终得到了一个损失值,例如 0.312。
但这个数字本身并不能更新模型。真正驱动模型学习的,是这个损失值 (Loss) 相对于模型每一个参数 ( θ) 的梯度 (Gradient) 。梯度是一个向量,它指明了参数调整的方向,以最快地降低损失。
这篇文章将深入技术细节,拆解 Pairwise Ranking Loss 的反向传播(Backpropagation)过程,揭示模型是如何通过数学"理解"并"执行"------"拉高赢家分数,压低输家分数"这一指令的。
一、 目标与链式法则:拆解依赖关系
我们的总目标是计算 ∇θL,即总损失 L 相对于模型所有参数 θ 的梯度。
首先,我们回顾一下(为简化起见,我们先忽略平均值 1/(2K)):
L(θ)=−(yw,yl)∑log(σ(rθ(x,yw)−rθ(x,yl)))
我们来看其中一个偏好对 (yw,yl) 产生的损失 Lpair:
Lpair=−log(σ(s))其中 s=rw−rl
(注: rw=rθ(x,yw), rl=rθ(x,yl))
要计算 Lpair 对 θ 的梯度 ∂θ∂Lpair,我们必须使用链式法则 (Chain Rule) 。参数 θ 的改变是通过影响 rw 和 rl 的分数,进而影响 s 的差值,最后影响 Lpair 的。
这个过程有两条路径:
- 路径 1 (通过赢家 rw): θ→rw→s→Lpair
- 路径 2 (通过输家 rl): θ→rl→s→Lpair
因此,总梯度是这两条路径上的梯度之和:
∇θLpair=(∂s∂Lpair⋅∂rw∂s)⋅∇θrw+(∂s∂Lpair⋅∂rl∂s)⋅∇θrl
我们可以把这个过程分为两类关键的偏导数进行计算。
二、 第 1 类:损失 L 对分数 r 的偏导数("上游梯度")
这是最核心的数学推导,它定义了 Loss 函数本身的行为。
首先,我们使用一个在数值上更稳定的 Lpair 表达式。
因为 Lpair=−log(σ(s))=−log(1+e−s1)=log(1+e−s)。
- 计算 ∂s∂Lpair (损失对分数 差值 的偏导数):
∂s∂Lpair=dsdlog(1+e−s)=1+e−s1⋅(e−s⋅−1)
=−1+e−se−s=−es+11=−σ(−s)=σ(s)−1
这个结果 σ(s)−1 非常关键。
- 计算 ∂rw∂Lpair (损失对 赢家分数 的偏导数):
∂rw∂Lpair=∂s∂Lpair⋅∂rw∂s
由于 s=rw−rl,我们知道 ∂rw∂s=1。
∂rw∂Lpair=(σ(s)−1)⋅1=σ(rw−rl)−1
- 计算 ∂rl∂Lpair (损失对 输家分数 的偏导数):
∂rl∂Lpair=∂s∂Lpair⋅∂rl∂s
由于 s=rw−rl,我们知道 ∂rl∂s=−1。
∂rl∂Lpair=(σ(s)−1)⋅(−1)=1−σ(rw−rl)
结果分析:
-
对赢家 rw 的梯度 ∂rw∂Lpair=σ(s)−1:
由于 σ(s) 的值域在 (0,1) 之间,这个梯度永远是负数。
-
对输家 rl 的梯度 ∂rl∂Lpair=1−σ(s):
这个梯度永远是正数。
这组正负号,就是"拉高赢家,压低输家"的数学本质。
三、 第 2 类:分数 r 对参数 θ 的偏导数("本地梯度")
这一类偏导数是:
- ∇θrw=∂θ∂rθ(x,yw)
- ∇θrl=∂θ∂rθ(x,yl)
这是什么?
这 θ 代表了 RM 神经网络中的所有参数(例如 Transformer 的 WQ,WK,WV 矩阵、FFN 层的权重和偏置等)。
∇θrw 是一个巨大的梯度向量,它由深度学习框架(如 PyTorch)的自动微分(Autograd)引擎计算。它代表了:"为了让 rw 的分数增加 1,模型中的每一个 参数 θi 应该如何变化?"
这个计算过程就是标准的反向传播 :梯度从 RM 的"回归头"输出 rw 开始,流经 Transformer 的每一层,计算出 rw 对每个参数的偏导数。
∇θrl 同理,但由于输入 yl 与 yw 不同,其计算出的激活值和最终的梯度向量也会完全不同。
四、 组合:完整的梯度更新
现在我们把这两类偏导数组合起来,得到一个偏好对 (yw,yl) 对模型总梯度的贡献 ∇θLpair:
∇θLpair=(∂rw∂Lpair)∇θrw+(∂rl∂Lpair)∇θrl
代入我们在第二节中推导出的结果:
∇θLpair=标量 (负数) (σ(rw−rl)−1)⋅向量 ∇θrw+标量 (正数) (1−σ(rw−rl))⋅向量 ∇θrl
梯度下降如何工作:
模型在更新时,遵循的是梯度下降 (Gradient Descent) 规则:
θnew=θold−η⋅∇θL
(其中 η 是学习率)
我们把上面那个偏好对的梯度代入:
θnew=θold−η⋅(σ(s)−1)⋅∇θrw+(1−σ(s))⋅∇θrl
整理一下符号:
θnew=θold+正数 η⋅(1−σ(s))⋅∇θrw−正数 η⋅(1−σ(s))⋅∇θrl
这就是最终的更新指令:
-
这里的 (r_w 的梯度)(即 ∇θrw)本身是一个向量,它指向的是能使 rw 分数增加的方向。
- 参数 θ 正在沿着 "能使 rw 增加的方向"移动。
- 最终效果:拉高赢家 rw 的分数。
-
这里的 (r_l 的梯度)(即 ∇θrl)本身是一个向量,它指向的是能使 rl 分数增加的方向。
- 参数 θ 正在沿着 "能使 rl 增加的方向"的相反方向移动。
- 最终效果:压低输家 rl 的分数。
五、 核心洞察:梯度大小由"错误程度"决定
我们发现,更新的幅度(即那两个标量)是 1−σ(s)。
令 Pwin=σ(s)=σ(rw−rl),即"模型认为 w 获胜的概率"。
那么更新的幅度正比于 1−Pwin。
我们来看上一篇的例子 ( y2>y3,但 RM 给出 r2=1.9,r3=2.1):
-
错误案例:( y2,y3)
- s=1.9−2.1=−0.2
- Pwin=σ(−0.2)≈0.45 (模型认为 y2 只有 45% 的概率获胜)
- 梯度幅度 ≈1−0.45=0.55
- 结果:一个很大的梯度 ,强力推动模型去"拉高 r2,压低 r3"。
-
正确案例:( y1,y4)
- s=2.5−(−1.0)=3.5
- Pwin=σ(3.5)≈0.97 (模型 97% 确定 y1 获胜)
- 梯度幅度 ≈1−0.97=0.03
- 结果:一个很小的(接近于 0)的梯度 。模型已经做对了,这个偏好对几乎不会产生更新,从而让模型专注于学习 ( y2,y3) 这样的错误案例。
结论
梯度计算不是一个黑盒。通过链式法则,Pairwise Ranking Loss 被精确地分解为一组直观的数学指令:
- 方向: ∇θL 的计算结果天然地包含了"拉高 rw"和"压低 rl"的信号。
- 幅度: 梯度的大小与 1−σ(rw−rl) 成正比,即模型对正确答案的"不确定性"或"错误程度"。
这种自适应的调节机制使得 RM 能够高效、稳定地将数万个人类偏好排序,蒸馏到模型的数十亿参数中,最终打造出一个强大的"人类偏好指南针"。
在 RM 训练中,我们通过最小化 Pairwise Ranking Loss 来更新模型参数 θ。这个损失值本身并不能更新模型,真正驱动模型学习的,是这个损失值 (Loss) 相对于模型每一个参数 ( θ) 的梯度 (Gradient) 。
梯度是一个向量,它指明了参数调整的方向,以最快地降低损失。这篇文章将深入技术细节,拆解 Pairwise Ranking Loss 的反向传播(Backpropagation)过程,揭示模型是如何通过数学"理解"并"执行"------"拉高赢家分数,压低输家分数"这一指令的。