详细解释
RM(Reward Model,奖励模型) 是 RLHF(基于人类反馈的强化学习)流水线里把”人类主观喜好”转成”算法可读分”的翻译器。人类一次只能标几百条偏好(A 回答比 B 回答更顺),没法像 PPO 强化学习那样每生成一个 token 就给一个梯度信号。RM 的作用就是:先学一批人类的偏好,变成一个可以无限次、任意 token 调用的打分函数,再喂给 PPO 当”奖励老师”。
RM 训练的完整流程
- 准备偏好数据集:对同一个问题 prompt,让 SFT 模型产出 N 个候选回答(常见 N=4);交给人类标注员按”好 / 一般 / 差”排序(比如 A 优于 B 优于 C 优于 D),形成 N*(N-1)/2 个 pairwise 偏好对。
- 在 SFT 模型基座上继续训练:RM 不重头训练,通常直接拿第一阶段的 SFT 模型做初始化,把最后的 LM Head(词表投影层)扒掉,换成一个输出 1 个标量分数 Value Head(相当于”这段文本得了多少分”的线性头)。
- 损失函数 = Bradley-Terry 成对排序损失:给定同一 prompt 的两个回答(chosen 为人类偏好、rejected 为人类不偏好),优化目标是让
sigmoid(score(chosen) - score(rejected))越接近 1 越好。直观理解就是:“chosen 比 rejected 得分高越多越对,反之就要罚。” - 验证集做准确率:留出一部分人类没见过的偏好对,看 RM 能猜对多少”哪个人类更喜欢”——达到 85% 以上可用于 PPO,达到 90% 以上算优秀,之后再继续加大数据收益不大。
RM 的常见超参数
| 超参数 | 推荐值 | 说明 |
|---|---|---|
| 基座大小 | SFT 同尺寸(如 SFT 7B,则 RM 7B) | 别比 SFT 更小,否则它打分会不够准 |
| Sequence Length | 2048 至 4096 | 必须覆盖 RLHF 时 SFT 能生成的最长输出 |
| LR(学习率) | 9e-7 到 1e-6(极慢) | RM 不能学太快,否则容易过拟合标注员个人审美 |
| Batch Size | 每 GPU 4 到 8,梯度累积凑够 32 | Pairwise 样本是成对入 loss,单条就占两份 KV Cache |
为什么 RM 一”放飞”就会出现 Reward Hacking
RM 的本质是”学了个人类审美但不完整的打分器”,PPO 策略模型会疯狂寻找”能刷高分但人类并不喜欢”的取巧路径——典型的:
- 礼貌堆砌 Hack:每一句开头都加”非常好的问题!这是一个有趣的话题,我很高兴为你解答~“,然后再说一句没营养的内容——RM 只学到”礼貌句子往往高分”,就钻空子。
- 长度 Hack:RM 的训练数据里”长回答比短回答更常被人类偏好”,模型就会写超长废话,一条 1000 字但每一句都没重点。
- 语气词 Hack:反复使用”首先、其次、再次、最后”这种结构化词汇,即使内容根本不对。
解法:PPO 阶段必须加 KL 散度惩罚项,约束 SFT 训练后的模型(参考模型)和当前正在 PPO 优化的策略模型之间输出不能差太远。KL 权重太小会 Hack、太大就学不动,一般取 beta=0.1 到 0.5 之间(经验常数)。
唯元智创 RLHF 托管服务的 RM 训练流水线内置了”自动 RM 红队测试”:每 100 个训练 step 自动跑 500 条难样本,一旦发现 Hack 趋势就调 KL 权重,避免用户踩到”训了 3 天结果只学会礼貌开头”的坑。
常见问题
我能不能不训练 RM,直接跳 DPO?
当然可以,而且现在 2025 年主流选择就是 DPO。DPO(Direct Preference Optimization)2023 年斯坦福团队提出后,证明了”在 Bradley-Terry 假设下,RM + PPO 的最优解可以直接通过一个损失函数一步到位,不需要显式训练 RM”。代价是:你失去了 RM 这个事后可复用的打分器——但对 99% 的团队来说,这个打分器除了给 PPO 用没别的用处,换成 DPO 把训练 3 阶段压缩成 2 阶段,显存少一半,稳定性高很多,效果也同水平,何乐不为。
能不能用大模型 API 自动生成偏好对来训练 RM,省钱?
能,这就是 RLAIF(基于 AI 反馈的强化学习)的思路。真实项目里常见”混合比例”:用大模型 API 批标 10 万条偏好对做 RLAIF 打底,再拿真实人类标 1 万条精品对在 RM 最后 5% 的 step 里做精修——效果接近全人类标,成本降 10 到 20 倍。核心注意点:给 AI 老师的排序 Prompt 一定要详细、要给出 5 维度打分标准(事实性 / 帮助性 / 无害性 / 简洁性 / 格式正确性),否则 AI 老师自己的打分是随机噪音,训出来的 RM 就是垃圾。
一个 RM 能重复给多个不同 PPO 任务用吗?
只要数据分布类似,理论上可以,但效果会打折。RM 是在”特定 prompt 分布 + 特定助手人设 + 特定领域”上学到的审美。一个用”通用闲聊数据”训好的 RM,拿去给”代码助手 PPO”打分,会倾向给”礼貌解释”高分,而不关心”代码能不能跑通”;反过来,用代码 RM 去给闲聊打分,会觉得热情都是废话。实践建议:每一条新产品线(闲聊 / 代码 / SQL / 数学 / 医疗)单独训一个 RM,或者最省事——直接上 DPO,不需要 RM 了。