Skip to content

RRHF

Rank Responses to align Human Feedback

https://arxiv.org/abs/2304.05302

https://github.com/GanjinZero/RRHF

先为同一个问题准备多条候选回答,再让模型学会:人类更偏好的回答,应该有更高的生成概率。

它的核心不是像传统 RLHF 那样先训练奖励模型、再跑一轮 PPO,而是把“偏好对齐”改写成一个更直接的排序问题:

  • 对同一个提示词,收集多条候选回答;
  • 给这些回答打一个“偏好分数”;
  • 再让语言模型自己的分数顺序,尽量和这些偏好顺序一致。

好回答以后应该更容易被模型生成,差回答以后应该更不容易被模型生成。

论文把 RRHF 定位为一种比 PPO 更简单的对齐方法:它直接用条件对数概率给回答打分,再通过排序损失把这些分数和人类偏好对齐;训练时通常只需要 1 到 2 个模型,并且可以利用来自不同来源的候选回答。论文还指出,它和 PPO 相比在实现、模型数和超参数上都更简单。

为什么会有 RRHF

RRHF 的出发点并不是否定 RLHF,而是想解决一个很实际的问题:

PPO 路线虽然有效,但训练复杂、模型多、超参数也多。

原论文总结的几个痛点是:

  • PPO 训练通常需要策略模型、价值模型、奖励模型、参考模型等多个组件;
  • 训练过程对超参数比较敏感;
  • 对大模型来说,资源和工程负担都比较重。

RRHF 的想法是:

如果我们已经能拿到“哪条回答更好”这样的偏好信息,那是否可以不显式做强化学习,而是直接训练模型把好回答排在前面?

这就是 RRHF 的核心动机。

训练数据长什么样

对一个提示词 x,RRHF 不只看一条回答,而是看一组候选回答:

{y1,y2,,yK}

同时,还需要给每条回答一个外部偏好分数:

r1,r2,,rK

这里的 ri 可以来自:

  • 人类标注;
  • 奖励模型;
  • 更强模型提供的偏好信号;
  • 数据集中现成的 chosen / rejected 标签;
  • 不同来源混合出来的打分。

原论文特别强调,RRHF 的候选回答来源可以非常广:可以来自待训练模型本身、其他大模型(如 ChatGPT、GPT-4),也可以来自人工专家或现成数据集。

所以 RRHF 的一个重要特点是:

它不是只会从“当前策略在线采样”里学,而是能利用很多离线候选回答。

RRHF 如何给回答打分

RRHF 不再单独训练一个奖励头来打分,而是直接用语言模型本身的条件对数概率给回答打分。

对于回答 y,模型分数可以写成:

sθ(x,y)=1|y|logπθ(yx)=1|y|t=1|y|logπθ(ytx,y<t)

这里:

  • x 是提示词;
  • y=(y1,,y|y|) 是整条回答;
  • πθ(yx) 是语言模型给整条回答的条件概率;
  • |y| 做长度归一化,是为了避免模型天然偏向短回答。

论文把这个分数描述为“长度归一化的条件对数概率”。官方代码里还支持更一般的长度惩罚写法,即除以 |y|α;默认情况下相当于 α=1

RRHF 直接把“模型更愿不愿意生成这条回答”当作训练对象。

如果一个回答是人类更偏好的,那 RRHF 就希望它的 sθ(x,y) 更大。

RRHF 的核心目标:排序损失

现在,对于同一个提示词 x,我们已经有:

  • 一组候选回答 y1,,yK
  • 一组外部偏好分数 r1,,rK
  • 模型自己的分数 sθ(x,yi)

RRHF 的目标就是:

如果 ri>rj,也就是回答 yiyj 更受偏好,那么模型也应该满足

sθ(x,yi)>sθ(x,yj)

为了实现这个目标,可以写出一个很自然的排序损失:

Lrank=i,j1[ri>rj]max(0, sθ(x,yj)sθ(x,yi))

这条式子可以这样理解:

  • 如果 yi 本来就应该排在 yj 前面;
  • 但模型却给了 yj 更高分;
  • 那就产生损失;
  • 如果顺序已经对了,这一对就不再额外惩罚。

所以 RRHF 不是要求模型“记住绝对分数是多少”,而是要求模型学会相对顺序

论文把 RRHF 描述为“通过排序损失让模型分数与人类偏好顺序对齐”;官方实现里,这一项的核心逻辑也是:只对“偏好顺序和模型顺序不一致”的回答对进行惩罚。实现上对应的是把所有“外部分数更高、但模型分数更低”的样本对挑出来,再把它们的分数差拉回来。

如果你把每个回答看成考试里的候选答案,那么 RRHF 做的事不是让模型预测一个绝对分数,而是:

更好的答案,概率要更高;更差的答案,概率要更低。

这种做法的好处是:

  • 不一定需要一个标定得非常准的“绝对奖励值”;
  • 只要能比较谁更好、谁更差,就可以训练;
  • 而“比较”通常比“打绝对分数”更稳定。

这也是原论文为什么强调:RRHF 更关注不同回答之间的比较,而不是 PPO 那种直接优化绝对奖励值。

RRHF 不是只有排序损失

如果只做排序,模型可能会学会“相对关系”,但不一定能稳定模仿最好的回答。因此 RRHF 还会额外加一个类似 SFT 的交叉熵项。

先定义这一组回答里外部偏好最高的回答:

y+=argmaxiri

然后让模型显式提高这条“当前最好回答”的概率:

LSFT=logπθ(y+x)=t=1|y+|logπθ(yt+x,y<t+)

也就是:

  • 排序损失负责“把好回答和差回答拉开”;
  • SFT 项负责“直接学最好回答本身”。

RRHF 的总目标

把两部分放在一起,RRHF 的总目标可以写成:

LRRHF=Lrank+LSFT

如果用更完整的话说:

RRHF 一边要求模型模仿当前这组回答里最好的那条,一边要求模型把整组回答排出和人类偏好一致的顺序。

所以它既不像纯 SFT 那样只看 chosen answer,也不像 PPO 那样真的进入强化学习式的策略优化;它更像是一种带排序信号的监督微调

RRHF 的训练流程

RRHF 的训练流程可以概括成四步。

第一步:准备提示词

给定一批提示词 x

第二步:为每个提示词准备多条候选回答

这些回答可以来自:

  • 当前模型;
  • 初始模型;
  • 更强模型;
  • 人工回答;
  • 数据集已有的 chosen / rejected。

第三步:给候选回答打外部偏好分数

这个分数可以是人工偏好,也可以是奖励模型输出。

第四步:训练语言模型

训练时让模型同时做到两件事:

  • 最优回答要有更高概率;
  • 候选回答之间的概率顺序要和偏好顺序一致。

RRHF 通常是在训练前先把候选回答采样好,再进入训练,因此它不像 PPO 那样在训练过程中持续在线采样;另外,正因为采样和训练分离,RRHF 不再需要 PPO 里那种 KL 约束和价值模型。

RRHF 为什么比 PPO 简单

它不需要价值模型

RRHF 不做 advantage 估计,也不需要额外训练 value model。它不是问“这条回答比 baseline 好多少”,而是直接问“这组回答里谁更好”。

它不需要训练时的参考模型 KL 约束

PPO 路线里,参考模型常用于限制策略不要走太远;而 RRHF 采用的是“先离线采样,再训练排序”的方式,因此论文明确写到,PPO 里的 KL 项在 RRHF 里退化掉了。

它更像普通监督训练

RRHF 的目标函数本质上还是排序损失和交叉熵,工程形态更接近 SFT,而不是完整强化学习。RRHF 代码相对 SFT 只增加了很少的额外逻辑。

RRHF 学到的到底是什么

RRHF 并不是显式训练一个独立奖励模型,再拿奖励模型去指导策略。它直接让语言模型自己的条件概率承担两种角色:

  • 既是生成概率;
  • 又是“排序分数”。

训练后的模型既可以作为生成模型使用,也可以把其长度归一化对数概率当作评分函数使用。从这个意义上说,RRHF 把“生成模型”和“偏好打分器”部分合在了一起。

RRHF 的优点

训练更简单

它不需要完整 PPO 流程,也不需要价值模型。对很多实际工程场景来说,这会显著降低训练复杂度。

能利用多来源回答

它可以混合人工回答、当前模型回答、更强模型回答、数据集中已有回答。这个灵活性是 RRHF 的一个明显优势。

对“比较式偏好”很自然

如果数据本来就是 chosen / rejected,或者能排出一个相对顺序,那么 RRHF 的目标就很贴合。它天然适合“谁更好”这种监督信号。

RRHF 的局限

它非常依赖候选回答质量

RRHF 的效果和采样质量高度相关。 论文指出,训练后模型的奖励往往接近采样候选中的最好回答,这说明 RRHF 在某种意义上很像在学一种 best-of-n 行为。

这意味着:

  • 如果候选回答整体质量很低,RRHF 很难学得特别好;
  • 如果候选回答里没有真正优秀的答案,模型也不太可能学出远超这些候选的能力。

它更像离线对齐

RRHF 的训练数据通常先采样好,再用这些离线样本训练。因此它不像在线 RL 那样,在训练过程中不断根据新策略重新探索。

它优化的是“排序一致性”

RRHF 更擅长学会“把更好的答案排在前面”,但这不等于它显式学到了一个非常准确、可泛化的绝对奖励函数。它的强项是排序,不是标定。这个结论更像对方法本身的结构性理解:从目标函数上看,它主要优化的就是相对顺序。

总结

RRHF = 对同一个问题收集多条回答,让模型把人类更喜欢的回答排在更前面。

模型分数:

sθ(x,y)=1|y|t=1|y|logπθ(ytx,y<t)

排序损失:

Lrank=i,j1[ri>rj]max(0, sθ(x,yj)sθ(x,yi))

总目标:

LRRHF=Lrank+LSFT

RRHF 是一种把偏好对齐改写成“回答排序”的方法。它不再显式走“奖励模型 + PPO”那条复杂路线,而是直接用语言模型自己的长度归一化条件对数概率给回答打分,再通过排序损失让模型分数顺序尽量贴近人类偏好顺序。

为了避免只学相对顺序不学具体答案,它还会加入一个针对当前最好回答的 SFT 项。这样一来,RRHF 就变成了一种介于 SFT 和 RLHF 之间的方案:它保留了偏好优化的信号,但训练形式更接近监督学习,工程上也更简单。

WARNING

RRHF:先有一批候选答案和它们的偏好顺序,模型学“怎么把好答案排前面”。

GRPO:当前模型先自己生成一组答案,再根据这一组里的相对好坏做策略更新。