奖励模型训练:从人类偏好数据到打分函数
奖励模型训练:从人类偏好数据到打分函数
什么是奖励模型?
奖励模型(Reward Model, RM)是强化学习与人类反馈(RLHF)流水线中的核心组件。它的任务是将“人类的偏好”转化为一个可量化的标量信号——奖励值。在大型语言模型的对齐过程中,我们无法在每一个生成步骤都获得人工反馈,因此需要训练一个模型来模拟人类的判断,自动为模型输出打分。
简单理解:奖励模型就是一个模仿人类喜好的打分函数。给定一个提示词和模型生成的回答,它输出一个分数,分数越高代表回答越符合人类期望。
奖励模型的工作流程概览
整个训练过程分为三个核心阶段:
- 收集人类偏好数据:让标注者对同一提示词的多个回答进行比较。
- 定义奖励模型架构:通常基于预训练语言模型,附加一个线性头输出标量分数。
- 训练奖励模型:使用偏好数据,让模型学会如何为更受人类偏爱的回答打出更高分。
最终,这个训练好的奖励模型将被冻结,用于后续的强化学习(如PPO)环节,指导策略模型优化生成质量。
第一步:构建人类偏好数据集
数据格式:比较式标注
偏好数据集的结构通常如下:
| 提示 (Prompt) | 回答 A (Response A) | 回答 B (Response B) | 人类偏好 |
|---|---|---|---|
| 如何制作拿铁? | 简单步骤... | 详细步骤并附温度说明... | B > A |
- 提示:用户输入的原始问题或指令。
- 回答对:由初始策略模型(通常经过监督微调)针对同一提示生成的多个不同回答。通常会采样4~9个回答来形成比较对。
- 偏好标签:标注者选择他们认为更好、更有帮助、更安全或无偏见的那个回答。标签可以是“A更好”“B更好”“平手”或“都差”。
采集的注意事项
- 多样性:提示应覆盖广泛的主题和任务,确保奖励模型对不同场景都有判断能力。
- 高质量标注:标注者需要经过培训,遵循明确的准则(如帮助性、真实性、无害性)。多个标注者之间的一致性(如Cohen's Kappa)需要监控。
- 排序粒度:除了二选一,有时也会收集更细粒度的排序数据(例如列出4个回答的优劣顺序),这能提供更丰富的训练信号。
第二步:奖励模型的架构设计
基础骨干网络
奖励模型通常复用已完成预训练且经过监督微调(SFT)的语言模型作为初始化,因为SFT模型已经具备了一定的语言理解和生成能力,包含了对优质回答的潜在知识。使用相同词汇表和大小的模型能减少分布偏移。
预测头(Scoring Head)
在基础模型的最后一层隐藏状态之上,添加一个线性回归头。最常见的做法是:
- 取最后一个token的隐藏向量(或者对所有token的隐藏状态做池化),输入到一个线性层。
- 线性层输出一个单一的标量值,即为该回答的奖励分数。
数学表示:$r_\theta(x, y) = W^\top \cdot h_{\text{last}}(x, y) + b$,其中 $x$ 是提示,$y$ 是回答,$h_{\text{last}}$ 是最后的隐藏状态。
为何使用最后一个token?
自回归模型中,最后一个token的表示聚合了整个序列的信息,尤其适合作为序列级表示进行打分。实验中也常证实这比平均池化效果更稳定。
第三步:训练目标与损失函数
核心思想:Bradley-Terry 偏好模型
假设我们有一对回答 $(y_w, y_l)$,其中 $y_w$ 是更偏好的,$y_l$ 是较差的。奖励模型的理论基础是 Bradley-Terry 模型,它建模了“ $y_w$ 比 $y_l$ 更受偏好”的概率:
$$P(y_w \succ y_l) = \frac{\exp(r(x, y_w))}{\exp(r(x, y_w)) + \exp(r(x, y_l))} = \sigma(r(x, y_w) - r(x, y_l))$$
其中 $\sigma$ 是sigmoid函数。这本质上将两个回答的奖励值之差映射到[0,1]的概率,表示 $y_w$ 被选中的概率。
损失函数:交叉熵损失
我们希望最大化人类偏好数据的似然,因此使用负对数似然损失:
$$\mathcal{L}(\theta) = -\mathbb{E}{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma \left( r\theta(x, y_w) - r_\theta(x, y_l) \right) \right]$$
这意味着:
- 当 $r_\theta(x, y_w) - r_\theta(x, y_l)$ 很大时,损失很小。
- 当差值很小或负值时,损失增大,迫使模型拉大两个回答的分数差。
实现细节与训练技巧
- 批量构建:每个训练样本包含提示、胜者回答和败者回答。将所有样本的分数差值送入sigmoid后计算损失。
- 奖励归一化:为了防止奖励分数的尺度在训练中漂移,通常会设定一个约束,例如让一个batch内的奖励均值为0。常见做法是维护奖励的滑动平均值并从输出中减去。
- 学习率与优化:使用小学习率(如1e-5~5e-6),采用AdamW优化器。因为只训练顶层的线性头或全量微调,但全量微调可能更利于捕捉偏好细节,不过需警惕过拟合。
- 早停与验证:使用独立的验证集(人工标注的偏好对)监控准确率(即模型对胜者打分更高的比例)。通常准确率在65%~75%之间可视为有效。
第四步:评估奖励模型的性能
训练完奖励模型后,我们需要确保它学会了人类的偏好。常用指标包括:
- 偏好准确率:在留出测试集上,模型对 $(y_w, y_l)$ 给出 $r(x, y_w) > r(x, y_l)$ 的比例。这是最重要的直接指标。
- 与人工评分的相关系数:对一批回答单独进行人工打分(Likert量表),计算模型奖励与人工评分的Pearson或Spearman相关系数。
- 校准度:奖励分数是否随着回答质量的提升而单调递增?可以通过对多个不同质量的回答进行排名来观察。
- 奖励分布的尺度与方差:过大或过小的奖励范围都不利于后续强化学习。通常希望奖励值有合理的动态范围(例如均值接近0,标准差可控)。
第五步:将奖励模型用于强化学习
当奖励模型训练完毕且冻结后,它被接入到RLHF的第三步——PPO训练中:
- 策略模型(待优化语言模型)生成回答 $y$。
- 奖励模型对 $(x, y)$ 给出奖励值 $r(x, y)$。
- PPO算法利用这个奖励信号,结合KL惩罚项(防止策略偏离初始SFT模型太远)来更新策略模型。
此时,奖励模型就充当了环境反馈的角色,替代了真实世界中无法获取的即时奖励。它的准确性和鲁棒性直接决定了最终对齐效果的上限。
进阶挑战与优化方向
减少奖励黑客(Reward Hacking)
策略模型在RL训练中可能会学会一些“钻空子”的行为,例如产生高奖励但无意义或重复的文本。原因可能是奖励模型在某些分布外输入上泛化不良,给出了虚高的分数。缓解方法包括:
- 在奖励模型训练时加入对抗样本或困难负样本。
- 使用集成奖励模型(Ensemble),通过平均多个独立训练的RM输出,提高稳健性。
- 结合规则奖励(如长度惩罚、重复惩罚)进行约束。
处理多目标偏好
人类偏好通常是多维度的(帮助性、安全性、诚实性等),单一标量奖励可能导致目标冲突。解决思路包括:
- 训练多个独立的奖励模型,每个模型负责一个维度,然后在RL阶段加权求和。
- 使用基于排序的偏好数据,将多个方面整合进一个统一的比较框架。
降低标注成本
高质量人类标注昂贵且耗时。可以采用AI辅助标注流程:
- 用已有奖励模型对批量回答进行预排序,只让人标注不确定性高的边界样本(主动学习)。
- 利用强大的语言模型(如GPT-4)生成偏好判断作为弱监督信号,再通过少量人工数据微调。
总结
奖励模型训练是从人类偏好数据中提炼出量化打分函数的过程,它搭建了“人类意图”与“机器优化”之间的桥梁。关注数据收集质量、稳定的loss设计、合适的评测手段及抗过拟合策略,是成功训练奖励模型的关键。一旦获得一个可靠的奖励模型,我们便拥有了一个可复用的、自动化的质量裁判,为语言模型的深度对齐铺平道路。
本教程属于“免费在线教程”系列,旨在帮助开发者快速掌握大模型对齐技术的核心环节。