RLHF :深入解析奖励模型 (Reward Model)

305 阅读2分钟

RLHF :深入解析奖励模型 (Reward Model)

从 ChatGPT 到 Claude,再到各种开源大模型,它们惊艳表现的背后,除了不断增长的参数规模,还有一个至关重要的技术——基于人类反馈的强化学习 (RLHF)

RLHF 是一套复杂的流程,它旨在让大语言模型(LLM)的输出更符合人类的偏好、价值观,使其变得“有用且无害”。而在这套流程中,奖励模型 (Reward Model, RM) 扮演着“人类偏好代理人”的关键角色。它就像一个指南针,为强化学习阶段的 LLM 指明了优化的方向。

本文将深入探讨奖励模型 (RM):从它在 RLHF 中的位置开始,解析其模型结构,并详细举例说明其核心训练算法——Pairwise Ranking Loss。

RLHF-step2.jpg

一、 RLHF 的“三步走”战略

要理解 RM,首先要明白它在整个 RLHF 流程中的位置。RLHF 通常分为三个阶段:

  1. 阶段 1: SFT (监督微调)

    • 目标: 让预训练的 LLM 学会模仿人类的回答方式。
    • 做法: 收集少量高质量的“标注者示范数据”((prompt, response) 对),在预训练模型的基础上进行监督微调(Supervised Fine-Tuning)。
    • 产出: SFT 模型。这个模型已经能按指令回答问题,但其回答的质量、安全性和有用性还不稳定。
  2. 阶段 2: 训练奖励模型 (RM)

    • 目标: 训练一个模型,使其能够模拟人类的偏好,为任何 (prompt, response) 对打分。
    • 做法: 拿一个 SFT 模型,对同一个 prompt 生成 KK 个不同的回答。人类标注者对这 KK 个回答进行排序(从最好到最差)。RM 的任务不是预测一个绝对分数,而是学习这个“排序”。
    • 产出: RM 模型。这是我们本文的主角。
  3. 阶段 3: PPO (强化学习)

    • 目标: 使用 RM 作为“奖励函数”,通过强化学习(如 PPO 算法)来优化 SFT 模型,使其生成的回答能获得更高的 RM 分数。
    • 做法: SFT 模型(此时称为策略模型)生成回答,RM 为这个回答打分(奖励)。PPO 算法根据这个奖励来更新策略模型的参数,使其更倾向于生成高分回答。
    • 产出: 最终的、经过“对齐”的 RLHF 模型。

二、 奖励模型 (RM) 的“庐山真面目”:模型结构

一个常见的误解是:奖励模型是一个全新的、神秘的模型。

事实是:奖励模型 (RM) 通常与 SFT 模型使用相同(或相近)的 Transformer 架构。 它们的主要区别不在于“骨架”,而在于“头部”——即模型的最后一层如何输出结果。

1. 输入:Prompt 和 Response 的拼接

RM 的任务是判断一个 response yy 对于一个 prompt xx 来说有多好。因此,它需要同时接收 xxyy 作为输入。

  • 输入序列: RM 会将 prompt 和 response 拼接成一个单独的文本序列,并用特殊的分隔符(如 [SEP])隔开,最后加上一个结束符(如 [EOS])。

    • [Prompt 文本] [SEP] [Response 文本] [EOS]

2. 模型主体:Transformer 编码器

这个拼接后的序列被转换成 Token ID,然后输入到 Transformer 模型中。模型通过自注意力机制和前馈网络,充分理解 prompt 和 response 之间的语义关联。

3. 输出:从“预测词”到“预测分”

这是 RM 与 SFT/LLM 最大的不同:

  • SFT/LLM 的头部 (LM Head):

    • 目标是预测下一个词。
    • 它的头部是一个巨大的线性层,将最后一个 Token 的隐藏状态(Hidden State)映射到整个词汇表(例如 50000 维)的 Logits,用于计算下一个词的概率。
  • RM 的头部 (Regression Head):

    • 目标是输出一个标量(一个数字)来代表“质量得分”。

    • 它会进行池化 (Pooling) :只取最后一个 Token(即 [EOS])的隐藏状态 hfinalh_{\text{final}}(例如 4096 维),因为这个向量被认为编码了整个序列的语义。

    • 然后,它使用一个回归头(通常是一个简单的线性层)将这个高维向量 hfinalh_{\text{final}} 映射为一个标量。

      r=Wheadhfinal+bheadr = W_{\text{head}} \cdot h_{\text{final}} + b_{\text{head}}

这个最终输出的标量 rr,就是 RM 对 (x,y)(x, y) 对的奖励分数。

三、 RM 如何训练?Pairwise Ranking Loss 详解

我们已经知道,RM 的训练数据是人类的“排序”,而不是“打分”。因为让人类在两个回答中选一个更好的(“我更喜欢 A 而不是 B”)远比给一个回答打绝对分数(“这个回答是 7.5 分”)要容易和准确。

RM 的训练目标是:模型给 ywy_w(赢家)的分数 应该高于 yly_l(输家)的分数。

1. 损失函数公式

为了实现这个目标,RM 使用了 Pairwise Ranking Loss(成对排序损失),其公式如下:

L(θ)=1(K2)E(x,yw,yl)[log(σ(rθ(x,yw)rθ(x,yl)))]L(\theta) = - \frac{1}{\binom{K}{2}} \mathbb{E}_{(x, y_w, y_l)} [\log(\sigma(r_\theta(x, y_w) - r_\theta(x, y_l)))]

我们来拆解这个公式:

  • L(θ)L(\theta):我们要最小化的总损失,θ\theta 是 RM 的所有参数。
  • (K2)\binom{K}{2}:从 KK 个排序好的响应中,可以抽出的“赢家-输家”配对总数。
  • (x,yw,yl)(x, y_w, y_l):一个数据点,包含 Prompt xx、更受偏好的响应 ywy_w (winner) 和较差的响应 yly_l (loser)。
  • rθ(x,yw)r_\theta(x, y_w)rθ(x,yl)r_\theta(x, y_l):RM 对赢家和输家(在 xx 的上下文中)的打分。
  • rθ(x,yw)rθ(x,yl)r_\theta(x, y_w) - r_\theta(x, y_l)核心部分。我们希望这个差值尽可能大(为正)。
  • σ()\sigma(\cdot):Sigmoid 函数 (σ(z)=1/(1+ez)\sigma(z) = 1 / (1 + e^{-z}))。它将(-∞, +∞)的差值压缩到 (0, 1) 之间,可以被理解为“RM 认为 ywy_w 优于 yly_l 的概率”。
  • log()\log(\cdot):对数似然。我们希望 σ()\sigma(\cdot) 趋近于 1(即 RM 100% 确定 yw>yly_w > y_l),而 log(1)=0\log(1) = 0
  • ()-(\cdot):取负号。因为我们要最大化对数似然 log(σ)\log(\sigma)(使其接近 0),所以我们要最小化它的相反数(使其从一个较大的负值接近 0)。

2. Pairwise Ranking Loss 计算举例

假设我们有 1 个 Prompt xx,收集了 K=4K=4 个响应,人类排序为 y1>y2>y3>y4y_1 > y_2 > y_3 > y_4

步骤 1:找出所有偏好对

总共有 (42)=6\binom{4}{2} = 6 个偏好对 (yw,yl)(y_w, y_l)

(y1,y2y_1, y_2), (y1,y3y_1, y_3), (y1,y4y_1, y_4), (y2,y3y_2, y_3), (y2,y4y_2, y_4), (y3,y4y_3, y_4)

步骤 2:获取当前 RM 的打分

我们将这 4 个 (prompt, response) 对输入 RM,假设(在一个训练批次中)模型 θ\theta 给出了以下分数:

  • rθ(x,y1)=2.5r_\theta(x, y_1) = 2.5
  • rθ(x,y2)=1.9r_\theta(x, y_2) = 1.9
  • rθ(x,y3)=2.1r_\theta(x, y_3) = 2.1 <-- 注意!RM 搞错了!
  • rθ(x,y4)=1.0r_\theta(x, y_4) = -1.0

分析: 人类偏好 y2>y3y_2 > y_3,但 RM 却给出了 1.9<2.11.9 < 2.1 的分数。我们期望损失函数能够“惩罚”这个错误。

步骤 3:计算每个偏好对的 Loss

我们计算 Lpair=log(σ(rwrl))L_{\text{pair}} = \log(\sigma(r_w - r_l))

偏好对 (w, l)对应的人类偏好RM 分数 rw​,rl​差值 (rw​−rl​)σ(差值) (概率)log(σ) (单对损失)
(y1,y2y_1, y_2)y1>y2y_1 > y_2(2.5, 1.9)0.60.60.6460.6460.437-0.437
(y1,y3y_1, y_3)y1>y3y_1 > y_3(2.5, 2.1)0.40.40.5990.5990.512-0.512
(y1,y4y_1, y_4)y1>y4y_1 > y_4(2.5, -1.0)3.53.50.9710.9710.029-0.029
(y2,y3y_2, y_3)y2>y3y_2 > y_3(1.9, 2.1)0.2-0.20.4500.4500.798-0.798
(y2,y4y_2, y_4)y2>y4y_2 > y_4(1.9, -1.0)2.92.90.9480.9480.053-0.053
(y3,y4y_3, y_4)y3>y4y_3 > y_4(2.1, -1.0)3.13.10.9570.9570.044-0.044

观察:

  • 对于 (y2,y3y_2, y_3) 这一对,由于 RM 搞错了,差值为负(-0.2)。
  • σ(0.2)0.450\sigma(-0.2) \approx 0.450,这个概率小于 0.5,代表 RM 认为 yly_l (即 y3y_3) 赢的概率更高。
  • log(0.450)0.798\log(0.450) \approx -0.798,这是一个很大的负数,因此它贡献了最大的“惩罚”(Loss)。
  • 对于 (y1,y4y_1, y_4) 这种 RM 预测正确的对,差值很大 (3.5),log(σ)\log(\sigma) 接近 0,贡献的 Loss 很小。

步骤 4:计算最终的 Loss

  1. 求和 (Sum):

    (0.437)+(0.512)+(0.029)+(0.798)+(0.053)+(0.044)=1.873(-0.437) + (-0.512) + (-0.029) + (-0.798) + (-0.053) + (-0.044) = -1.873

  2. 取平均 (Divide by 6):

    1.873/60.312-1.873 / 6 \approx -0.312

  3. 取负 (Negate):

    loss(θ)=(0.312)=0.312\text{loss}(\theta) = -(-0.312) = 0.312

这个 0.3120.312 就是这个 batch 的最终损失值。在反向传播时,这个损失会促使模型参数 θ\theta 进行更新,目标是拉高 rθ(x,y2)r_\theta(x, y_2) 的分数压低 rθ(x,y3)r_\theta(x, y_3) 的分数,使 rwrlr_w - r_l 的差值变大,直到 Loss 趋近于 0。

总结

奖励模型 (RM) 是 RLHF 流程中承上启下的关键。它通过一个巧妙的 Pairwise Ranking Loss,将人类模糊、相对的“偏好排序”数据,转化为了一个可以被优化的、输出标量分数的神经网络。

这个 RM 的质量,直接决定了 PPO 阶段强化学习的天花板。一个能准确理解人类偏好的 RM,是训练出“有用且无害”的 AI 助手的真正指南。