趋近智
训练奖励模型 (RM) 是强化学习 (reinforcement learning)与人类反馈 (RLHF) 的一个核心过程,它利用人类偏好数据。这些数据通常以成对比较的形式出现,包含一个提示、一个选择的回答和一个拒绝的回答。奖励模型 (RM) 的作用是学习一个函数,将提示和可能的回答映射为一个标量值。这个值表示该回答与给定提示下人类偏好的一致程度。这个学得的奖励函数随后将作为指导信号,用于使用强化学习对语言模型进行微调 (fine-tuning)。
奖励模型的架构通常与正在对其进行校准的基础语言模型密切相关。一种常见做法是直接使用经过监督微调 (fine-tuning) (SFT) 的模型,并修改其最终层。RM 的头部不再预测下一个词元 (token)的分布,而是被调整为输出一个单一的标量值。
具体而言,RM 的输入是提示 () 和候选回答 () 的拼接。这个组合序列由 Transformer 架构处理。序列中最后一个词元(通常是序列结束词元)对应的隐藏状态随后通过一个线性层(奖励头部)来生成标量奖励分数。
以 SFT 模型作为 RM 的基础具有显著益处:
令 表示参数 (parameter)为 的 RM 对提示 和回答 输出的标量奖励。
RM 是在收集到的偏好数据集 上训练的,其中 是人类偏好的回答(被选择的), 是对提示 而言被认为较不偏好的回答(被拒绝的)。训练目标是使 RM 对同一提示下被选择的回答赋予比被拒绝的回答更高的分数:
这通常被视为一个回答对的二分类问题。一种常见的方法是调整 Bradley-Terry 模型,该模型对 比 更受偏好的概率进行建模。这个概率可以通过它们的奖励分数之差经过逻辑 S 型函数 来建模:
RM 通过最小化数据集 中人类偏好的负对数似然来训练。损失函数如下:
这个损失函数促使差值 变得大且为正,从而有效地最大化根据人类标注正确分类偏好回答的概率。有时可以添加一个边际项,但这种基本形式被广泛使用。
训练期间,每个数据点 需要对 RM 进行两次前向传播:一次是提示与选择的回答 () 拼接,另一次是提示与拒绝的回答 () 拼接。
以下是一个简化的 PyTorch 代码片段,说明了训练步骤中的损失计算:
import torch
import torch.nn.functional as F
# 假设 'reward_model' 是你的 RM 实例(例如,带有标量头部的 Transformer)
# 假设 'tokenizer' 是你的分词器实例
# 假设 'batch' 包含 (提示, 选择的回答, 拒绝的回答) 字符串的元组
def compute_rm_loss(reward_model, tokenizer, batch):
"""计算一批偏好数据的成对排序损失。"""
prompts, chosen_responses, rejected_responses = batch
# 对选择的回答进行词元化和输入准备
chosen_inputs = tokenizer(
[p + c for p, c in zip(prompts, chosen_responses)],
return_tensors="pt",
padding=True,
truncation=True,
max_length=1024 # Example max length
)
# 将张量移动到正确的设备
chosen_inputs = {
k: v.to(reward_model.device) for k, v in chosen_inputs.items()
}
# 对拒绝的回答进行词元化和输入准备
rejected_inputs = tokenizer(
[p + r for p, r in zip(prompts, rejected_responses)],
return_tensors="pt",
padding=True,
truncation=True,
max_length=1024 # Example max length
)
rejected_inputs = {
k: v.to(reward_model.device) for k, v in rejected_inputs.items()
}
# 从模型获取奖励分数
# reward_model 的前向传播应为每个序列返回一个标量分数
chosen_rewards = reward_model(**chosen_inputs).rewards
# 假设模型输出具有 .rewards 属性
rejected_rewards = reward_model(**rejected_inputs).rewards
# 计算损失
# 损失 = -log(sigmoid(选择的奖励 - 拒绝的奖励))
loss = -F.logsigmoid(
chosen_rewards - rejected_rewards
).mean()
return loss
# --- 在你的训练循环中 ---
# optimizer.zero_grad()
# loss = compute_rm_loss(reward_model,
# tokenizer, batch_data)
# loss.backward()
# optimizer.step()
在 RL 阶段使用 RM 之前,评估其性能是很重要的。主要衡量标准是在保留偏好对集上的准确率。这衡量了 RM 正确预测人类偏好回答 () 的频率。准确率通常在 65% 到 80% 之间,具体取决于任务难度、数据质量和模型容量。
使用偏好数据和成对排序损失训练奖励模型的基本流程。
除了准确率,定性分析也很有用。检查 RM 与人类判断强烈一致或不一致的案例,可以显示模型中的偏差或不足。检查奖励分数是否与回答长度、连贯性或实用性等其他易于理解的质量指标相关联也很有帮助,尽管这些关联可能很弱。
成功训练奖励模型是 RLHF 流程中的重要一步。一个训练良好的 RM 提供了必要的信号,以在后续强化学习 (reinforcement learning)阶段指导 LLM,使其生成更符合人类期望特性(如有用性、诚实性和无害性)的输出。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•