Reward Modeling
奖励建模根据偏好比较训练网络,使其按照人类的方式为 AI 输出评分。涵盖 Bradley-Terry 损失、类型和风险。
奖励建模是训练一个称为奖励模型的神经网络的过程,该模型会按照人们评判 AI 系统输出的方式为其评分。在标准强化学习中,奖励由环境提供,例如游戏分数。许多目标没有这样的分数:有用的回答、构图出色的图像,或轻柔递出杯子的机器人,都很容易判断,却很难用代码定义。奖励模型通过人类反馈(通常是对两个输出进行比较)学习这种判断,然后自动为新输出评分,其速度和一致性都远胜人工评判。奖励模型是实现基于人类反馈的强化学习 (RLHF)的关键组件,也用于对候选回答重新排序、筛选训练数据和评估模型。
奖励模型的训练方式#
训练数据由比较结果组成。人们看到一个提示以及模型给出的两个或多个回答,然后选出更好的回答;在 OpenAI 的 InstructGPT 工作中,标注人员会为每个提示的 4 到 9 个回答排序,而排序中的每一对回答都会成为一个训练比较样本。之所以使用排序而非绝对分数,是因为人们对两个回答孰优孰劣的看法,远比对某个回答应得 10 分制中的 6 分还是 7 分更一致。
奖励模型通常是预训练的大型语言模型 (LLM),往往就是正在对齐的模型,只是将输出层替换为一个线性头,把最终的嵌入向量映射为一个数值。训练使用 Bradley-Terry 成对比较模型,该模型认为人们偏好回答 A 而非回答 B 的概率,是两者奖励差值的 sigmoid 函数值。损失是人们实际选择的回答所对应概率的负对数。下面这个 PyTorch示例使用 2,000 个模拟比较样本训练线性奖励头:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# 2,000 preference pairs: embeddings of two responses to the same prompt
# Simulated raters prefer the response with higher hidden quality, with some noise
hidden_quality = torch.randn(64)
a, b = torch.randn(2000, 64), torch.randn(2000, 64)
a_wins = (a @ hidden_quality + torch.randn(2000) * 2 > b @ hidden_quality).unsqueeze(1)
chosen, rejected = torch.where(a_wins, a, b), torch.where(a_wins, b, a)
# Reward model: a linear head mapping a response embedding to one scalar score
reward_model = torch.nn.Linear(64, 1)
optimizer = torch.optim.Adam(reward_model.parameters(), lr=0.01)
train, test = slice(0, 1500), slice(1500, 2000)
for step in range(300):
# Bradley-Terry loss: maximize the probability that the chosen response scores higher
margin = reward_model(chosen[train]) - reward_model(rejected[train])
loss = -F.logsigmoid(margin).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
accuracy = (reward_model(chosen[test]) > reward_model(rejected[test])).float().mean()
print(f"Held-out pairs ranked like the raters: {accuracy:.1%}")它会输出 94.8%。模拟评分者本身带有噪声,在这些留出样本中,他们约有 5% 的判断与无噪声的质量排序相矛盾,因此,尽管奖励模型从未见过任何绝对分数,它仍然尽可能地从标签中学会了偏好。留出比较样本上的成对准确率也是比较真实奖励模型的方法,例如在 RewardBench基准测试中。由于损失只涉及奖励之间的差值,因此分数的尺度是任意的,强化学习前的流水线通常会对其进行归一化。
奖励模型的类型#
- 结果奖励模型:为完整回答或整个回合评分,是 RLHF 中的标准选择。
- 过程奖励模型:为解决方案的每个中间步骤评分。OpenAI 的 PRM800K 数据集包含数学解题过程中 800,000 个步骤级别的人类标签。
- 生成式奖励模型:由充当评判者的 LLM 撰写点评或判定,使单个模型能够评估多种任务并解释评分。
- 隐式奖励模型:直接偏好优化 (DPO) 直接利用偏好对训练策略,而策略相对于参考模型的对数概率比则充当奖励。
- 图像奖励模型:ImageReward 使用 137,000 个人工生成图像的专家比较样本进行训练,可用于微调文生图模型,使生成结果更符合提示且更具吸引力。
机器人学习也会将同一理念应用于视觉模型。使用人工标记为成功或失败的相机画面(例如杯子被竖直放置或被撞倒)训练的图像分类器,会输出成功概率,作为学习策略的奖励。使用这类画面和分类任务训练的 Ultralytics YOLO26模型也能发挥这一作用,在毫秒内为尝试过程中的每一帧评分。
保持奖励模型的准确性#
奖励模型只对与训练数据相似的输出准确。随着策略不断改进,它会生成奖励模型从未见过的回答,因此 Meta 的 Llama 2 团队会针对最新模型的输出收集新的比较数据,并在每一轮强化学习之前重新训练奖励模型:
针对任何学习得到的奖励过度优化都会导致奖励劫持。OpenAI 的奖励模型过度优化研究使用大型“黄金”奖励模型代替人工评分者,发现随着策略针对较小的代理奖励模型进行优化,黄金模型的分数先升后降,而代理模型的分数则持续上升;代理模型越大,这种效应就越平缓。奖励模型还会习得评分者的偏见,例如偏好更长或更顺从的回答,而强化学习会进一步放大这些偏见,导致冗长和谄媚。采用 KL 惩罚约束策略接近原始模型、使用奖励模型集成,以及定期利用新的比较数据重新训练,都能减轻这种损害。
奖励建模与相关术语的比较#
- RLHF:包含监督微调、基于人工比较进行奖励建模,以及强化学习优化的完整流水线。奖励建模是其中的第二阶段。
- 奖励函数:手工编写的奖励,例如达到目标时奖励 +1。由于无人能写出完整的奖励函数,因此奖励模型是从数据中学习得到的。
- 可验证奖励:程序会将答案与已知解答进行比对,例如单元测试或参考数学结果。它比学习得到的模型更难被利用,但只适用于答案可以验证的场景。
- 逆强化学习:通过专家完成任务的示范推断奖励函数;而面向 RLHF 的奖励建模则通过人们对系统自身输出的比较来学习。










