奖励模型设计
构建有效的奖励信号模型
模型架构
基于LLM的奖励模型
使用预训练语言模型作为backbone,添加线性头输出标量奖励
class RewardModel(nn.Module):
def __init__(self, base_model):
self.model = base_model
self.score_head = nn.Linear(hidden_dim, 1)
def forward(self, input_ids):
hidden = self.model(input_ids).last_hidden_state
reward = self.score_head(hidden[:, -1, :])
return reward
训练目标
使用对比损失学习相对偏好:
# Bradley-Terry模型
P(A { 优于} B) = σ(r(A) - r(B))
# 损失函数
L = -log σ(r(x, y_win) - r(x, y_lose))
设计要点
模型规模
通常与策略模型同规模或更大
输出归一化
奖励分数归一化,稳定训练
提示处理
只对回复部分计算奖励
序列池化
使用最后一个token或平均池化
多维度奖励
可以设计多个奖励头分别预测不同维度:
有用性奖励
安全性奖励
真实性奖励
r_total = w1 * r_helpful + w2 * r_safety + w3 * r_truthful
常见问题
奖励黑客
策略模型找到漏洞欺骗奖励模型
过拟合
奖励模型记忆训练数据,泛化差
分布偏移
训练和推理时的数据分布不一致
----