LLM学习笔记-奖励模型reward model

 

奖励模型(Reward Model)训练数据是如何构造的

LLM Training: RLHF and Its Alternatives Another distinction not depicted in the above-mentioned annotated figure relates to how model responses are ranked to generate the reward model. In the standard InstructGPT approach for RLHF PPO discussed previously, the researchers collect responses that rank 4-9 outputs from which the researchers create “k choose 2” comparisons. For example, if a human labeler ranks four responses (A-D), such as A < C < D < B, this yields “4 choose 2” = 6 comparisons:

这段话是在解释奖励模型(Reward Model)训练数据是如何构造的,我来用大白话拆解:


核心概念:从“排序”变成“两两对比”

1. 为什么不能直接用排名训练? 奖励模型(RM)的本质是一个打分器,它学的是“A比B好”这种相对关系,而不是“A排第1,B排第2”这种绝对名次。所以,我们需要把人类给出的整体排序,拆解成无数个两两对比(Pairwise Comparison),这样才能喂给模型训练。

2. “k choose 2”是什么意思? 这是组合数学里的一个公式:从k个东西里选2个,有多少种选法?

  • 计算公式:C(k, 2) = k × (k-1) / 2
  • 如果有4个回复(k=4),就能拆出 C(4,2) = 6 对对比数据。

3. 举个具体例子(您原文中的案例) 假设人类标注员给4个回复(A、B、C、D)排了个名次:

A < C < D < B

(符号“<”表示“不如”,即 B最好,D次之,C第三,A最差

那么,我们从这个排名中可以提取出所有可能的“谁比谁好”的对比对:

对比对 含义(前者不如后者)
A < C C比A好
A < D D比A好
A < B B比A好(B最好,当然比A好)
C < D D比C好
C < B B比C好
D < B B比D好

一共 6对,正好是“4选2”的组合数。


为什么要这么做?(工程意义)

原因 解释
数据量暴增 标注员只做了1次排序(排4个回答),但我们能生成 6条 训练样本,效率翻倍。
符合RM的训练范式 奖励模型本质上是一个二分类器,它需要不断学习“A赢B输”的模式,两两对比是它的“母语”。
减少标注偏差 单次排名可能因为标注员心情有误差,但多对对比能让模型学到更稳健的偏好边界。

一张图帮你记住这个逻辑

text

人类标注:一次排序(4个回复排个1234名)
    ↓
数学展开:C(4,2) = 6 对“谁赢谁输”
    ↓
喂给RM:模型学的是“在这6对里,赢家总是比输家分数高”
    ↓
最终效果:RM看到一个没见过的新回复时,能秒懂“这个比那个更讨人喜欢”

gpt vs lamma的差异

这段文字是在解释Llama 2如何改进其奖励模型(Reward Model)的训练方式,相比于之前的InstructGPT。我来分步骤拆解:


1. 数据收集方式的差异

  • InstructGPT:每个标注员在每一轮标注中,会看到 4-9 个模型对同一提示(prompt)生成的回答,然后对这些回答进行排序(比如 A > B > C)。
  • Llama 2:每个标注员在每一轮只看到 2 个回答(A 和 B),并从中选出更好的一方(二元比较,A < B 表示 B 更好)。

2. Llama 2 的新增内容 —— “边际(margin)”标签

除了简单的“哪个更好”之外,Llama 2 还要求标注员给出一个边际评分,用来衡量两个回答之间的优劣差距有多大。这个评分是有等级的,比如:

  • “明显更好”(significantly better)
  • “稍微更好”(slightly better)
  • “几乎无差别”(negligibly better)

这个 margin 值会被编码成一个离散函数 m(r),并在训练损失函数中使用。


3. 损失函数的演进

  • InstructGPT 的损失函数(基于交叉熵的排序损失):

    loss=−log⁡(σ(rθ(x,yc)−rθ(x,yr)))loss=−log(σ(rθ*(*x*,*yc)−rθ*(*x*,*yr)))

    简单来说,就是让被选中的回答(y_c)的奖励分数尽量高于被拒绝的回答(y_r),差距越大越好。

  • Llama 2 的改进: 他们在损失函数中加入了 margin 参数 m(r),变成类似:

    loss=−log⁡(σ(rθ(x,yc)−rθ(x,yr)−m(r)))loss=−log(σ(rθ*(*x*,*yc)−rθ*(*x*,*yr)−m(r)))

    这里的 m(r) 取决于标注员给出的差距等级。


4. 这个 margin 起到了什么作用?

  • 如果标注员认为两个回答差距很小m(r) 较大),那么公式中的差 (r_c - r_r - m(r)) 就会变小,sigmoid 的输出会接近 0.5,导致 loss 变大
  • 较大的 loss 会产生更大的梯度,在后续的策略梯度(policy gradient)更新中,模型参数的变化幅度会更大

换句话说:

更高的 margin(表示差距小) → 更大的 loss → 更大的梯度 → 模型更新更激进

这样做的好处是:让模型更关注那些标注员觉得“难以区分”的样本,因为这些样本才是真正需要精细优化边界的地方,而不是那些明显优劣分明的样本。


5. 总结一句话

Llama 2 不仅让标注员选出更好的回答,还量化了“好多少”,并通过在损失函数中增加一个 margin 项,使得模型在训练奖励模型时,对那些差距不明显的对比样本给予更高的学习权重,从而提升奖励模型的判别精度和泛化能力。

进阶阅读:

LLM Training: RLHF and Its Alternatives