想象你是一位顶尖私立学校的校长,手下有一批天赋异禀但做题思路天马行空的学生。你的目标,是让他们在“国际数学奥林匹克竞赛”中拿金牌。 你首先采用RLHF(基于人类反馈的强化学习)作为“素质教育”——你花钱请了一批资深阅卷老师,让他们坐在学生旁边,观察学生的每一步推导,然后在“推理过程是否有条理、是否清晰、是否像一个聪明人”这个维度上打分。这种方式很好,但有一个致命问题:请老师太贵了,而且每个老师的口味还不一样。 于是,你引入了一套RLVR(基于验证器的强化学习)机制——就像建立了一个标准化的“自动判卷机房”。每当学生给出答案,机器立刻对照标准答案进行校验。对了就奖励一块“代币”,错了就罚他没收。这个自动判卷机器不知疲倦、标准统一,唯一的缺点是:它只关心最终的答案对不对,完全不关心学生的思考过程是否优雅。 现在,作为校长,你的大智慧在于把两种教育模式结合起来:先请真人老师帮学生建立良好的“解题品味”(RLHF阶段),再把他扔进自动判卷机房进行海量刷题(RLVR阶段)。前者保证了学生不会变成一个“只会猜答案的赌徒”,后者保证了学生能通过大量练习,真正掌握通往正确结果的推理路径。这就是 o1、o3 等推理模型的训练秘密。

岗位关联

对 AI 从业者而言,理解 RLHF 与 RLVR 的衔接,意味着你掌握了下一代推理模型训练的核心方法论,这将直接决定你能否跟上 OpenAI o1 系列的技术演进,并在推理能力优化这一前沿领域占据一席之地。

目录
  1. 可视化演示
  2. 双轨制总览
  3. 偏好对齐阶段
  4. 验证器信号设计
  5. 两阶段衔接策略
  6. 训练数据构造
  7. 稳定性控制术
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示RLHF三阶段对齐训练与RLVR验证器奖励训练流程,交互切换查看两种方法及其结合训练的核心指标。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RLHF三阶段对齐训练流程 SFT监督微调让模型学会遵循指令格式 RM奖励模型学习人类偏好排序信号 r(x,y)=w·φ(x,y) PPO利用RM奖励优化策略使输出更符合人类偏好

双轨制总览

想象你管理的这所学校,有两套截然不同的考核体系。RLHF 就好比“综合素质评价”——由资深教师(人类标注者)从整体上判断“这个学生的解题风格像不像一个成熟的竞赛选手”,涵盖条理性、逻辑性、创造性等方方面面。而 RLVR 则是“标准化考试机器”——一个自动判卷系统,它不看过程,只看最终答案与标准答案是否一致。两者的评判维度不同、反馈频率不同、成本更是天差地别。作为校长,你的核心智慧在于:先用贵而准的“素质教育”塑造品格,再用廉而多的“题海战术”强化能力。

从技术视角看,这两种范式对应着强化学习中两种不同的奖励信号来源。RLHF 的奖励来自一个学习人类偏好的奖励模型(Reward Model),它能给出连续的、细粒度的分数;而 RLVR 的奖励来自一个验证器(Verifier),它给出的是客观的、可核验的离散信号(通常是对/错)。o1、o3 等前沿推理模型正是站在两者的交汇处,先用 RLHF 完成“人类风格对齐”,再用 RLVR 大幅度提升“推理准确率”。

在实际工程中,这两者并非简单的二选一,而是存在清晰的流水线式衔接关系。

回到学校管理的比喻:RLHF 阶段确定学生“做什么像什么”,RLVR 阶段确定学生“做什么成什么”。一个高水平的推理模型,既需要前者的“风骨”,也需要后者的“实战能力”。如果跳过 RLHF 直接使用 RLVR,模型虽然正确率可能很高,但输出格式和推理风格会变得机械、不自然;如果只使用 RLHF 而不进入 RLVR,模型则缺乏足够的推理深度,难以解决真正复杂的数学和代码问题。

最终策略=RLHF(SFT 模型)→冷启动RLVR(RLHF 后模型)\text{最终策略} = \text{RLHF}(\text{SFT 模型}) \xrightarrow{\text{冷启动}} \text{RLVR}(\text{RLHF 后模型})
公式解读:推理模型先经过监督微调(SFT)学习基础解题格式,然后用 RLHF 对齐人类偏好,最后用 RLVR 强化推理正确性。三个环节像接力棒一样依次传递。
  1. SFT 模型先通过模仿学习让模型学会“像个聪明人一样说话、思考”的初始格式。这个过程好比新生入学先学习校规校纪。
    SFT 模型=arg⁡max⁡θE(x,y)∼Ddemo[log⁡πθ(y∣x)]\text{SFT 模型} = \arg\max_\theta \mathbb{E}_{(x,y)\sim \mathcal{D}_{\text{demo}}}\left[\log \pi_\theta(y|x)\right]
  2. RLHF 对齐在 SFT 基础上,用人类偏好数据训练奖励模型,再用 PPO 优化策略,使模型输出“人类更喜欢”的答案。这如同请名师指点解题风格。
    RM=Bradley-Terry 拟合(人类偏好对)\text{RM} = \text{Bradley-Terry 拟合}(\text{人类偏好对})
  3. RLVR 强化将对齐后的模型丢进“自动判卷机房”,用验证器给出的确定性奖励信号驱动 PPO 继续优化。这类似用大量标准化试题高强度训练。
    RLVR: max⁡θEx∼D,y∼πθ(⋅∣x)[rverifier(x,y)]\text{RLVR: } \max_\theta \mathbb{E}_{x\sim\mathcal{D}, y\sim\pi_\theta(\cdot|x)}\left[r_{\text{verifier}}(x,y)\right]

偏好对齐阶段

回到我们的学校。在“素质教育”阶段(RLHF),你需要聘请一个由资深教师组成的“评审团”(奖励模型)。这些教师并不直接给学生打分,而是做两两比较:同一道题,学生 A 的解答和学生 B 的解答放在一起,教师只需要回答“你更喜欢哪一个?”。收集成千上万个这样的偏好对之后,我们用数学方法拟合出一个“口味函数”——这就是奖励模型(RM)。RM 学会了人类的偏好后,就能对任意一个回答给出量化分数了。

奖励模型的训练,本质上是在解决一个排序问题。给定同一个问题 $x$,模型生成了两个答案 $y_A$ 和 $y_B$,人类标注者给出偏好标签 $y_A \succ y_B$。我们的目标是学习一个打分函数 $r_\phi(x, y)$,使得“更受偏好的答案得分更高”。常用的数学工具是 Bradley-Terry 模型,它通过 logistic 函数将分数差转化为偏好概率:

有了训练好的奖励模型 $r_\phi$,我们就可以用强化学习(通常是 PPO 算法)来优化策略模型 $\pi_\theta$。此时,策略模型的“答题总分”由 RM 给出,而 PPO 算法的职责是:不断调整模型的参数,使得模型输出的答案在 RM 上获得越来越高的分数。

值得注意的是,RLHF 的优化方式决定了它擅长捕捉“人类整体偏好”——流畅度、安全性、风格一致性等。这正是 o1 系列模型保持“人味儿”的关键一招。但 RLHF 的奖励模型有一个无法回避的短板:它无法验证事实性正确性。人类偏好“流畅漂亮的错误答案”的情况屡见不鲜。这就需要我们的“自动判卷机房”——RLVR 出场了。

p(yA≻yB)=exp⁡(rϕ(x,yA))exp⁡(rϕ(x,yA))+exp⁡(rϕ(x,yB))=σ(rϕ(x,yA)−rϕ(x,yB))p(y_A \succ y_B) = \frac{\exp\left(r_\phi(x, y_A)\right)}{\exp\left(r_\phi(x, y_A)\right) + \exp\left(r_\phi(x, y_B)\right)} = \sigma\left(r_\phi(x, y_A) - r_\phi(x, y_B)\right)
通俗理解:两个候选答案的得分差异越大,人类偏好其中之一的概率就越高。这就像两位教师分别给两个答案打分(比如 8 分和 6 分),分差越大,选择 8 分答案的“概率”就越接近 100%。
  1. 得分差计算两个答案在奖励模型下的分数之差,这是决定偏好概率的核心量。好比两位教师打分后相减的差值。
    Δ=rϕ(x,yA)−rϕ(x,yB)\Delta = r_\phi(x, y_A) - r_\phi(x, y_B)
  2. Sigmoid 映射将实数域的分差 $\Delta$ 压缩到 0 到 1 之间的概率值。分差为正且越大,结果越接近 1;分差为负,结果趋于 0。这就把“差多少分”转化成了“更喜欢的胜率”。
    σ(Δ)=11+e−Δ\sigma(\Delta) = \frac{1}{1 + e^{-\Delta}}
  3. 最大似然估计在全部偏好对上最大化真实偏好的对数概率,等价于最小化以下负对数似然损失:
    LRM=−E(x,yA,yB)∼D[log⁡σ(rϕ(x,yA)−rϕ(x,yB))]\mathcal{L}_{\text{RM}} = -\mathbb{E}_{(x, y_A, y_B)\sim\mathcal{D}}\left[\log \sigma\left(r_\phi(x, y_A) - r_\phi(x, y_B)\right)\right]

验证器信号设计

现在,我们来到这篇文章的重头戏——RLVR 的奖励信号设计。想象你的“自动判卷机房”里有三种不同的判卷方式,每一种都对应一种奖励信号:

第一种是格式奖励(Format Reward)。它检查学生的答案是否遵循了规定的格式要求——比如“每题必须包含 <thought> 标签和 <answer> 标签”、“代码必须能通过语法检查”。这类信号最容易实现,就像检查考卷的卷面是否整洁、姓名是否填写,答案的“长相”正确就能得分。在 o1 系列中,格式奖励确保了模型输出具备完整的推理链结构。

第二种是结果奖励(Outcome Reward)。由验证器对照标准答案,检查最终结果是否正确。对于数学题,就是判断 $x = 5$ 是否得 5 分;对于代码题,就是判断生成的代码能否通过测试用例。这类信号客观、确定、信息量大,是 RLVR 的核心推动力。但它有一个潜在问题:稀疏性。一道难题的推理链有 20 步,如果只有最后一步能确定对错,中间 19 步的“好坏”信号就被平均化了,模型的更新效率会大打折扣。

第三种是过程奖励(Process Reward)。它尝试对推理链中的中间步骤进行逐步判断,而不是只等最终答案。这就像竞赛教练在训练中逐行批改学生的推导过程,指出“这里跳步了”或“这一步因式分解有误”。过程奖励能提供更密集的监督信号,但其难点在于如何自动构造每个中间步骤的标签——这通常需要额外的推理模型或手工规则来定义。

回到学校的比喻,一个好的奖励信号设计,就是一套科学的“计分规则”。如果只按结果计分(纯 RLVR),学生会变成“疯狂刷题、最终答案对就行、过程潦草”的应试机器;如果只按过程计分(纯过程奖励),学生可能“每个步骤都有模有样,但最终答错”——这在竞赛中是拿不到分的。o1 系列的精明之处在于:用格式奖励约束输出结构,用结果奖励保证最终正确率,再用过程奖励作为辅助补充,三者共同构成一个立体的判卷体系。

r总=λfmt⋅rformat⏟格式分+λout⋅routcome⏟结果分+λproc⋅rprocess⏟过程分r_{\text{总}} = \underbrace{\lambda_{\text{fmt}} \cdot r_{\text{format}}}_{\text{格式分}} + \underbrace{\lambda_{\text{out}} \cdot r_{\text{outcome}}}_{\text{结果分}} + \underbrace{\lambda_{\text{proc}} \cdot r_{\text{process}}}_{\text{过程分}}
公式解读:三种信号按权重加和构成最终奖励。格式奖励像“印象分”,结果奖励像“正确答案分”,过程奖励像“步骤分”。调节三个 $\lambda$ 的比值,相当于调整“素质教育”与“应试教育”的配比。
  1. 格式分$\lambda_{\text{fmt}}$ 控制格式奖励的权重,通常设为一个固定值(如 0.1),确保模型优先保证输出格式规范。
    rformat=I[输出包含有效推理格式]r_{\text{format}} = \mathbb{I}[\text{输出包含有效推理格式}]
  2. 结果分$\lambda_{\text{out}}$ 控制结果奖励的权重。这是 RLVR 训练的主信号,通常取 1.0。对于可验证的数学题与代码题,结果分只有两个取值:答对得 +1,答错得 -1 或 0。
    routcome=I[标准答案校验通过]r_{\text{outcome}} = \mathbb{I}[\text{标准答案校验通过}]
  3. 过程分$\lambda_{\text{proc}}$ 控制过程奖励的权重,通常处于探索阶段,用于那些难以从结果信号中获得梯度的问题。每个中间步骤的正确概率可以由一个专门的 PRM(Process Reward Model)来估计。
    rprocess=1T∑t=1TPRM(st)r_{\text{process}} = \frac{1}{T}\sum_{t=1}^{T} \text{PRM}(s_t)

两阶段衔接策略

作为校长,你面临一个实际的排课问题:素质教育(RLHF)和题海战术(RLVR)应该按什么顺序、什么比例安排? 一个常见的方案是:第一学期做 SFT 冷启动(新生入学的入学教育),第二学期做 RLHF(名师指点解题风格),第三学期再做 RLVR(海量刷题)。这里的核心逻辑是:RLVR 的有效性依赖于模型已经具备一定的出题模板、推理格式和语言组织能力。一个完全没有经过 SFT 和监督训练的模型,直接扔进 RLVR,只会产生大量毫无意义的乱码文本——这就像你让一个幼儿园小朋友直接去做高考数学模拟卷,他连“解”字都写不对,更别提做出正确答案了。

具体到 o1 的技术报告中,这一流程被描述为:首先使用高质量的思维链数据做 SFT(冷启动),让模型学会“在 <thought> 中逐步推理”的格式;然后用 RLHF 做偏好对齐,让模型的推理风格符合人类对“清晰、有条理”的期待;最后进入 RLVR 阶段,用大规模可验证问题(数学、代码)驱动模型自行探索推理路径。值得注意的是,RLVR 阶段不再依赖人类标注的偏好对,而是依靠验证器自动生成的奖励信号,因此可以以极低的边际成本进行海量采样。

一个关键的技术挑战是分布偏移(Distribution Shift):当 RLVR 更新策略后,模型的输出分布可能逐渐偏离 RLHF 阶段“校准”过的人类偏好分布,导致模型“越优化越不像人”。这就像学生在刷题过程中逐渐摸索出一套“专攻机器判卷”的狡黠技巧——格式标准、答案正确,但推理过程的风格和逻辑连贯性却大不如前。为了应对这一问题,o1 团队采用了 渐进式过渡:在 RLVR 阶段初期,KL 惩罚系数设置得较大,限制策略偏离参考模型(即 RLHF 后的模型)的速度;随着训练推进再逐步放松。

在两阶段的衔接中,有一个经验法则是:RLHF 阶段产出的模型,其“风格锚点”越牢固,RLVR 阶段可以容忍的探索空间就越大。这就像一位学生如果已经形成了稳定的、优秀的学习习惯(RLHF 风格锚点),你给他布置大量高难度的练习题(RLVR 探索),他不太容易“学坏”;反之,如果学生的基本学习习惯还没养成,直接高强度刷题,很可能会走火入魔。

RLVR 目标函数=Ey∼πθ[rverifier(x,y)]−βKL⋅DKL(πθ(⋅∣x)∥πref(⋅∣x))\text{RLVR 目标函数} = \mathbb{E}_{y\sim\pi_\theta}\left[r_{\text{verifier}}(x, y)\right] - \beta_{\text{KL}} \cdot D_{\text{KL}}\left(\pi_\theta(\cdot|x) \| \pi_{\text{ref}}(\cdot|x)\right)
公式解读:RLVR 的优化目标由“从验证器拿高分”和“不偏离参考策略太远”两部分组成。$\beta_{\text{KL}}$ 越大,模型越保守;越小,模型越激进地追求验证器高分。
  1. 奖励期望第一项是验证器奖励的期望值。模型通过采样输出 $y$,计算验证器评分,再反传梯度更新策略。采样越多,估计越准确。
    Ey∼πθ[rverifier(x,y)]≈1N∑i=1Nrverifier(x,y(i))\mathbb{E}_{y\sim\pi_\theta}\left[r_{\text{verifier}}(x, y)\right] \approx \frac{1}{N} \sum_{i=1}^{N} r_{\text{verifier}}(x, y^{(i)})
  2. KL 散度约束第二项是 KL 散度惩罚。它衡量当前策略 $\pi_\theta$ 与参考策略 $\pi_{\text{ref}}$(RLHF 阶段产出的模型)之间的分布距离,防止策略更新幅度过大、彻底“忘本”。
    DKL(πθ∥πref)=Ey∼πθ[log⁡πθ(y∣x)πref(y∣x)]D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}}) = \mathbb{E}_{y\sim\pi_\theta}\left[\log \frac{\pi_\theta(y|x)}{\pi_{\text{ref}}(y|x)}\right]

训练数据构造

好的训练数据,就是好的“题库”。在 RLVR 阶段,我们要为“自动判卷机房”准备高质量的可验证问题集——每个问题都必须有确定的标准答案,否则验证器无法工作。这听起来简单,实际上约束极大:开放性问题(如“写一篇关于人工智能的随笔”)无法进入 RLVR 训练集,因为没有客观标准判断写得好不好。因此,o1 系列在 RLVR 阶段主要使用数学题、编程题、逻辑推理题等“有唯一确定答案”的领域数据。

构建训练数据时,一个核心的流程是采样与筛选。首先从问题池中抽样一个批次问题 $x$,让当前策略模型并行采样多个候选答案 $y \sim \pi_\theta(\cdot|x)$;然后交给验证器进行判断。如果我们只保留“验证器判定为正确”的样本,并丢弃所有错误样本,这种策略称为拒绝采样(Rejection Sampling)。它虽然简单粗暴,但能有效提升训练数据的质量密度。

另一个视角是数据配比。不同领域的难度曲线不同:数学题存在明显的难度梯度,适合做多轮课程式学习;代码题依赖编译器和单元测试,更加客观;逻辑推理题则介于两者之间。在 RLVR 训练中,通常需要控制不同领域数据的比例,避免模型在某类问题上过拟合而同质化。此外,还需要引入课程学习(Curriculum Learning)的思想:前期用简单问题让模型建立正确率基线,后期逐步引入高难度问题,推动模型探索更复杂的推理路径。

回到校长视角:拒绝采样就是“只把做对的题收集起来,画进教科书”。这个“教科书”并不追求覆盖所有犯错案例,而是集中展示“什么是好的解答”。模型在下一轮训练中,就从这些“优质例题”中模仿、强化,逐步形成稳定的正确解题路径。值得注意的是,这种数据构造方式天然具有自增强性——模型越强,采样出的正确样本越多,教科书的质量越高,下一轮强化效果越好,形成正反馈循环。

DRLVR={(xi,yi,ri)∣ri=I[Verifier(xi,yi)=Pass],ri=1}\mathcal{D}_{\text{RLVR}} = \left\{(x_i, y_i, r_i) \big| r_i = \mathbb{I}\left[\text{Verifier}(x_i, y_i) = \text{Pass}\right], r_i = 1\right\}
公式解读:RLVR 训练集由(问题、答案、验证结果)三元组构成,并且只保留验证结果为“通过”的样本。这相当于从学生的练习册中筛选出做对了的题目,作为下一轮学习的例题。
  1. 问题集$x_i$ 来自高质量的问题池,覆盖数学、代码、逻辑推理等多个领域。每个问题必须满足“存在客观标准答案”这个前提条件。
    xi∼Dquestion poolx_i \sim \mathcal{D}_{\text{question pool}}
  2. 采样答案$y_i$ 由当前策略模型 $\pi_\theta$ 采样生成,通常对每个问题采样数十个候选答案,以保证足够的覆盖率。
    yi∼πθ(⋅∣xi),i=1,…,Ny_i \sim \pi_\theta(\cdot|x_i), \quad i = 1, \dots, N
  3. 验证器筛选$r_i$ 是验证器给出的二元标签。只有 $r_i = 1$ 的样本进入最终训练集。这个过程本质上是一个经验回放缓冲区(Replay Buffer),用历史最优样本来学习,有助于训练稳定性。
    DRLVR={(xi,yi)∣ri=1}\mathcal{D}_{\text{RLVR}} = \{(x_i, y_i) | r_i = 1\}

稳定性控制术

带过学生的老师都有体会:如果一个学生的基础不稳定,你给他上再多的难题,他也可能在某次考试中崩盘。同样地,RLVR 训练的“崩盘”形式是策略坍塌(Policy Collapse)——模型在某次更新后,开始大规模输出重复、无意义的推理文本,或者只选择性地回答简单问题、回避难题。为了避免这种情况,研究者总结了一套“稳定性控制术”,包括三个关键武器。

第一个武器是 KL 散度约束(我们在第二节已经介绍过)。它将策略锚定在 RLHF 产出的参考模型附近,防止优化过程中策略飞得太远、失去人类偏好的“底色”。第二个武器是熵正则化(Entropy Regularization)。它鼓励策略模型保持一定的随机性,不要过早地“锁死”在某一种解题模式上——就像老师要求学生不要死记硬背单一解题套路,而要保持灵活的思路。强化学习中的熵正则项通常是在目标函数中加入期望熵的惩罚:

第三个武器是经验回放(Experience Replay)。在经典的 PPO 算法中,每一轮迭代采用一批新的采样数据更新策略,一轮更新后这批数据就被丢弃了。但在 RLVR 场景下,验证器正反馈非常稀疏(大量采样都是错的),直接丢弃数据非常浪费。经验回放将过去若干轮采样得到的(问题、答案、验证结果)放入一个缓冲区,训练时从缓冲区中混合采样,从而平抑单轮采样的高方差:

回到学校管理的比喻,稳定性控制术就像是学校的“心理健康辅导体系”——KL 散度约束是“校规底线”,防止学生行为出轨;熵正则化是“兴趣培养课程”,鼓励学生保持多样化的思维方式;经验回放是“错题本制度”,让学生在复习中巩固记忆,而不是在单一考试中一锤定音。三者结合,保证了学生在长期高强度的冲刺训练中,既不会“学傻了”,也不会“学偏了”,更不会“学到崩溃”。

Jstable=JRLVR+α⋅Ex∼D,y∼πθ[H(πθ(⋅∣x))]J_{\text{stable}} = J_{\text{RLVR}} + \alpha \cdot \mathbb{E}_{x\sim\mathcal{D}, y\sim\pi_\theta}\left[\mathcal{H}\left(\pi_\theta(\cdot|x)\right)\right]
公式解读:缓冲区中保留最近 $K$ 轮的训练样本。这种“旧题新做”的策略,能有效防止模型在某一轮分布异常的采样上过度拟合,保证训练曲线的平滑性。
  1. 滑动窗口只保留最近 $K$ 轮的数据,$K$ 通常取 3-5。$K$ 太大会使缓冲区样本过于陈旧,与当前策略分布不匹配;$K$ 太小则失去了“平滑”的效果。
    T−K≤t≤TT-K \leq t \leq T
  2. 混合采样从缓冲区中均匀随机采样一个 batch 进行策略更新。这打破了单轮数据之间的时间关联性,降低了梯度估计的方差。
    batch∼Uniform(Buffer)\text{batch} \sim \text{Uniform}(\text{Buffer})

AI 应用场景

场景 1:数学解题模型的自动化训练

阶段:RLVR 训练与数据回注

解决的问题:传统数学推理模型的训练依赖人工标注的思维链数据,成本高昂且标注一致性差。手工标注一道复杂竞赛题的完整推理链可能需要 10-20 分钟,且不同标注者的解法思路差异巨大,导致模型学会“平均风格”而非“最优策略”。RLVR 无需人工标注推理链,仅需问题有标准答案,验证器自动评分,从而将训练成本降低 1-2 个数量级。

具体案例:某教育科技公司要开发一个“AI 数学竞赛教练”。他们先使用数千道历史竞赛题(含标准答案)构建可验证问题集;然后用 RLHF 对齐后的基座模型对题目进行大规模采样(每题 64 次),用验证器判断最终答案对错;收集正确样本后作为正反馈数据,使用 PPO 进行 RLVR 强化训练。经过 3 轮迭代,模型在 AIME 竞赛题上的准确率从 32% 提升到 71%。

场景 2:代码生成模型的单元测试驱动强化

阶段:RLVR 验证器设计

解决的问题:代码生成模型的传统评估方式依赖人工审查或 BLEU 分数,两者都与“代码是否能正确运行”脱节。RLVR 将单元测试通过与否作为验证器信号:给定自然语言编程任务描述,模型生成代码,验证器运行预设的测试用例,全部通过得正奖励,任何失败则得负奖励。这让模型的优化目标与真实工程需求完全对齐。

具体案例:一家 AI 编程助手的开发团队构建了一个包含 10 万道编程题目的训练集,每道题配有一组隐藏单元测试。他们先用 RLHF 让模型学会“代码风格清晰、注释规范”,再进入 RLVR 阶段,用单元测试结果作为奖励信号进行 PPO 训练。最终,模型在 HumanEval 基准上的 pass@1 从 48% 提升至 82%,同时保持了代码可读性。

场景 3:科研发现中的可验证假设推理

阶段:过程奖励与结果奖励组合

解决的问题:在科学发现场景(如药物分子设计、材料发现)中,模型需要推理出可验证的假设。RLHF 只能保证假设在“语言层面”合理,但无法判断其科学正确性。RLVR 允许我们将实验室进行的物理、化学验证视为“验证器”——模拟或实验验证的结果就是奖励信号。

具体案例:某生物制药团队使用 RLHF+RLVR 训练一个“分子设计推理模型”。模型在推理链中先提出候选分子结构,然后 RLVR 验证器通过分子动力学模拟预测其结合能。模拟结果优于阈值则给出正奖励,反之负奖励。结合两个阶段的训练,模型提出候选分子的验证通过率从 21% 提升至 45%,显著减少了需要湿实验验证的候选数量。

Python 演示

python99 行
import randomimport math # ---------------------------# 简化版 RLHF + RLVR 训练循环# 演示:先人类偏好对齐,再用验证器强化# --------------------------- class DummyPolicy:    """玩具版策略模型,用词表概率分布模拟。"""    def __init__(self, vocab_size=10):        self.vocab_size = vocab_size        self.logits = [0.0] * vocab_size  # 均匀初始化     def sample(self):        """按 softmax 概率采样一个 token。"""        probs = self._softmax(self.logits)        r = random.random()        acc = 0.0        for i, p in enumerate(probs):            acc += p            if r <= acc:                return i        return self.vocab_size - 1     def log_prob(self, token):        probs = self._softmax(self.logits)        return math.log(probs[token] + 1e-9)     def _softmax(self, xs):        m = max(xs)        exps = [math.exp(x - m) for x in xs]        s = sum(exps)        return [e / s for e in exps] class RewardModel:    """玩具版奖励模型:模拟人类偏好打分。"""    def __init__(self, preferred_token=5):        self.preferred_token = preferred_token     def score(self, token):        return 1.0 if token == self.preferred_token else 0.1 class Verifier:    """玩具版验证器:0-9 中偶数为正确,奇数为错误。"""    def check(self, token):        return 1.0 if token % 2 == 0 else 0.0 def generate_answer(policy, length=8):    """用策略模型生成一个回答(一串 token 序号)。"""    return [policy.sample() for _ in range(length)] def rlhf_train(policy, reward_model, steps=200, lr=0.1):    """RLHF 阶段:用奖励模型分数做梯度上升。"""    for _ in range(steps):        token = policy.sample()        score = reward_model.score(token)        grad = score * (1 - policy.log_prob(token))        # 简易梯度上升:拉高高分数 token 的概率        policy.logits[token] += lr * grad        norm = math.sqrt(sum(v * v for v in policy.logits))        policy.logits = [v / norm * 2.0 for v in policy.logits] def rlvr_train(policy, verifier, steps=200, lr=0.1, kl_ref=None):    """RLVR 阶段:用验证器信号 + KL 约束做优化。"""    kl_weight = 0.5    for _ in range(steps):        answer = generate_answer(policy, length=4)        final_token = answer[-1]        reward = verifier.check(final_token)        # KL 惩罚:与参考初始策略保持距离        # 这里简化:用当前策略的熵作为 KL 近似        entropy = -sum(p * math.log(p + 1e-9) for p in policy._softmax(policy.logits))        total_reward = reward + kl_weight * entropy        grad = total_reward * (1 - policy.log_prob(final_token))        policy.logits[final_token] += lr * grad def main():    random.seed(42)    policy = DummyPolicy(vocab_size=10)     # 阶段 1:RLHF    rm = RewardModel(preferred_token=5)    rlhf_train(policy, rm, steps=150)    print("RLHF 后采样 5 次:", [generate_answer(policy, 4) for _ in range(5)])     # 阶段 2:RLVR    verifier = Verifier()    rlvr_train(policy, verifier, steps=150)    print("RLVR 后采样 5 次:", [generate_answer(policy, 4) for _ in range(5)])     # 验证最终策略的行为偏向    final_counts = {i: 0 for i in range(10)}    for _ in range(500):        final_counts[generate_answer(policy, 4)[-1]] += 1    print("最终 token 分布(期望偏向偶数):", final_counts) if __name__ == "__main__":    main()
目的:用微型仿真演示 RLHF(奖励模型驱动)与 RLVR(验证器驱动)两个训练阶段如何依次改造一个策略模型的 token 分布。
  1. policy.logits用简单向量存储策略参数,模拟大模型的参数空间
  2. reward_model.score(token)模拟人类偏好评分,偏好 token 5 给高分,其余给低分
  3. verifier.check(token)模拟验证器,偶数为“正确”(得 1.0),奇数为“错误”(得 0.0)
  4. rlhf_train(...)RLHF 训练循环:根据奖励模型的分数调整策略 logits
  5. rlvr_train(...)RLVR 训练循环:引入熵正则项作为 KL 惩罚的简化近似
  6. generate_answer(policy, 4)模拟模型生成一条长度为 4 的“回答”

常见误区

误区“既然 RLVR 的验证器信号又便宜又客观,那 RLHF 还有存在的必要吗?直接用 RLVR 训练不就行了?”

正解RLVR 只能优化“可验证”的任务(数学、代码等),无法处理人类偏好中的主观维度——写作风格、安全性、有用性、对话的自然度。没有 RLHF 的“风格锚定”,RLVR 会像一位只刷题不读书的学生,虽然正确率拔尖,但推理过程机械、可读性差,在某些开放场景下甚至会出现“高分但有害”的输出。两者是“品格教育”与“应试训练”的关系,缺一不可。

为何常见:因为 RLVR 的效果直观可量化(准确率大幅提升),而 RLHF 的提升相对隐性(风格、自然度),初学者容易低估 RLHF 的价值。

误区“RLVR 中的验证器不就是检查一下输出有没有包含 `<thought>` 标签吗?这个很简单。”

正解格式奖励只是验证器信号中最浅层的一种。真正的核心是结果验证——判断最终答案在客观标准下是否正确(数学答案是否匹配、代码是否能通过单元测试)。没有结果验证,模型只会学会“看似在思考、实则乱编”的模式。o1 系列中格式奖励扮演的是“脚手架”角色,真正的强化信号来自结果验证器。

为何常见:由于公开的 technical report 中对格式奖励(<thought> 标签)的强调较多,初学者被这些工程细节吸引,忽略了大局。

误区“为了防止模型偏离 RLHF 阶段的风格,我应该把 KL 散度惩罚系数设置得很大,这样模型一定不会跑偏。”

正解KL 散度约束是把“双刃剑”。系数过大会导致模型几乎无法偏离参考策略,RLVR 的奖励信号无法有效传播,模型学不到新的推理模式;系数过小则策略漂移过快。正确的做法是动态调节:训练初期 $\beta_{\text{KL}}$ 较大以维持稳定,后期逐步减小以释放模型的探索能力——就像教练在比赛前收紧管理,比赛时放手让学生发挥。

为何常见:KL 散度是初学者最早接触的稳定性手段,容易产生“越大越安全”的直觉,而忽略了训练目标的本质是“在约束下最大化奖励”。

误区“只要不断投喂更多带标准答案的问题,模型的推理能力就会一直提升。”

正解RLVR 的效果瓶颈往往不在问题的数量,而在于问题的难度分布与多样性。如果题库里的题都是简单题,模型很快就能达到 95% 正确率,继续训练只是浪费算力;如果都是超难题,模型正确率可能长期为 0,奖励信号极度稀疏,策略几乎无法更新。实践中的做法是采用课程学习:从简单题入手稳定策略,再逐级递增难度,确保每个阶段都有有效的梯度信号。

为何常见:直觉上“更多数据 = 更好模型”在其他 ML 场景经常成立,但在强化学习场景中忽略了奖励信号密度这个关键变量。

误区“结果奖励太稀疏了,过程奖励给每一步都打分,肯定比结果奖励更高效。”

正解过程奖励看似“信息量更大”,实际上它的有效性高度依赖于如何构造中间步骤标签。如果使用手工规则标注中间步骤,误差可能较大;如果使用自动过程奖励模型(PRM),PRM 自身的错误会造成噪声放大——在长推理链中,错误会逐层累积。而结果奖励虽然稀疏,但信号是无偏的。实践中往往采用两者的混合方案,而以结果奖励为主干。

为何常见:直觉上“反馈越频繁越好”,忽视了反馈的可靠性问题。稀疏但准确的信号,经常优于密集但含噪的信号。

面试题

Q1. RLHF 阶段训练奖励模型时,最常用的人类偏好建模方法是?

单选题 · mid

  • A.基于 Bradley-Terry 模型的成对排序← 正确答案
  • B.基于均方误差的回归打分
  • C.基于交叉熵的多分类预测
  • D.基于聚类分析的标签分组

答案:A。RLHF 的奖励模型训练核心是从“二选一偏好”中学习打分函数。Bradley-Terry 模型通过 logistic 函数将两个候选答案的得分差映射为偏好概率,再通过最大似然估计拟合,这是最标准的做法。回归打分需要绝对分值标签(现实难以获取),多分类预测与“偏好对”的标注形态不一致,聚类分析更是与排序学习无关。

Q2. 在 RLHF 与 RLVR 的衔接流程中,“SFT 冷启动”的主要目的是?

单选题 · mid

  • A.让模型学会基础的推理输出格式与语言组织← 正确答案
  • B.用大规模无标注数据预训练语言模型
  • C.训练一个能识别标准答案的验证器
  • D.用人类偏好数据微调奖励模型

答案:A。SFT 冷启动是 RLVR 前的必要热身,让模型先学会“用自然语言写出结构化的推理过程”(如 <thought> 标签格式),从而保证后续 RLVR 的奖励信号有可附属的载体。无标注预训练属于基座模型阶段;训练验证器不在 SFT 阶段;偏好数据微调奖励模型属于 RLHF 内部环节。

Q3. 下列哪种奖励信号在 RLVR 中最不可靠?

单选题 · hard

  • A.格式奖励——检查输出是否包含必需的推理标记
  • B.结果奖励——用标准答案精确匹配
  • C.过程奖励——用自动 PRM 逐步打分← 正确答案
  • D.代码奖励——用单元测试结果代替人工评分

答案:C。过程奖励依赖自动 PRM 对中间步骤的评判,而 PRM 自身的训练数据往往不足或带噪,在长链推理中“误差逐层累积”问题显著。相比之下,格式奖励规则确定、结果奖励客观无偏、代码奖励由运行结果刚性判定,它们都满足“信号可核验”的要求。过程奖励的“软性打分”在可靠性上天然处于劣势。

Q4. RLVR 训练中,用于保障训练稳定性的方法包括哪些?

多选题 · mid

  • A.在目标函数中加入 KL 散度惩罚项← 正确答案
  • B.引入熵正则化鼓励策略多样性← 正确答案
  • C.使用经验回放缓冲区平抑采样方差← 正确答案
  • D.增大学习率加速收敛

答案:ABC。KL 散度约束防止策略过度偏离参考模型;熵正则化鼓励探索、避免策略坍塌;经验回放利用历史数据降低单轮采样的高方差。增大学习率通常只会加剧训练不稳定性,甚至导致奖励函数在 reward hacking 上进一步外推,因此 D 不是稳定性措施。

Q5. 在推理模型的训练流程中,RLHF 与 RLVR 的正确顺序是?

单选题 · easy

  • A.先 RLVR,后 RLHF
  • B.先 RLHF,后 RLVR← 正确答案
  • C.两者并行同时训练
  • D.顺序可以任意调整

答案:B。RLHF 为 RLVR 提供高质量的“风格锚点”(参考策略),使模型在后续 RLVR 的探索过程中保持语言表达的自然性和人类偏好。如果先 RLVR 后 RLHF,模型在无约束的情况下可能朝向“高验证器分数但低人类偏好”的方向走偏,且最终的 KL 约束将锚定在一个偏的模型上,纠错成本极高。两者并行会让目标函数互相干扰。

Q6. 在 RLHF 的 Bradley-Terry 模型中,$p(y_A \succ y_B)$ 的计算公式所基于的核心假设是?

单选题 · hard

  • A.人类总是客观理性地选择正确答案
  • B.两个答案的得分差服从逻辑斯蒂分布← 正确答案
  • C.偏好概率只取决于格式长度与文本流畅度
  • D.奖励模型的输出是满足高斯分布的连续值

答案:B。Bradley-Terry 模型假设两个选项的效用值(reward score)之差经 sigmoid 函数映射后得到偏好概率,这等价于假设“效用之差服从逻辑斯蒂分布”。人类标注并非总是客观理性(选项 A 错),偏好概率的核心是“相对分差”而非格式与流畅度(C 错),奖励模型的输出也不需要高斯假设(D 错)。

Q7. 下列哪些问题类型适合作为 RLVR 训练数据?

多选题 · mid

  • A.数学证明题,有严格的标准答案← 正确答案
  • B.编程任务,可通过单元测试自动验证← 正确答案
  • C.文案写作题,按人类主观偏好打分
  • D.逻辑谜题,有确定答案← 正确答案

答案:ABD。RLVR 的核心前提是“存在客观、可自动验证的奖惩信号”。数学证明有标准答案、编程有测试用例、逻辑谜题有确定解,三者均满足要求。文案写作的主观性极强,无法用验证器自动判定优劣——这正是需要留给 RLHF 的范畴。

Q8. 在 RLVR 的目标函数中,KL 散度项 $\beta_{\text{KL}} \cdot D_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}})$ 的直观含义是什么?

单选题 · easy

  • A.鼓励模型远离参考策略
  • B.对模型偏离参考策略的行为施加惩罚← 正确答案
  • C.约束模型输出的最大长度
  • D.调整验证器的判断阈值

答案:B。KL 散度量化了当前策略分布与参考策略(RLHF 产出的模型)之间的偏移程度,乘上系数 $\beta_{\text{KL}}$ 后作为惩罚项,模型偏离越远,惩罚越大,从而抑制策略漂移。它不是鼓励远离(A 反了),与输出长度(C)和验证器阈值(D)没有关系。

Q9. 以下关于“拒绝采样”在 RLVR 中的作用的说法,正确的有哪些?

多选题 · hard

  • A.能有效提升训练集中正样本的比例← 正确答案
  • B.是替代 PPO 的一种独立的策略优化算法
  • C.引入了“只保留正确样本”的筛选机制← 正确答案
  • D.可以消除验证器本身的系统性偏置

答案:AC。拒绝采样从大量采样的候选答案中只保留验证器判定正确的样本,从而提高了训练集中“优质正反馈样本”的密度(A、C)。它只是数据预处理手段,不是策略优化算法(B 错)。如果验证器本身存在系统性偏置(如偏好某类格式),拒绝采样只会放大了这种偏置(D 错)。

Q10. 在 RLVR 中使用经验回放缓冲区,最主要的好处是?

单选题 · mid

  • A.减少 GPU 显存占用
  • B.降低单轮样本之间的时间相关性导致的梯度方差← 正确答案
  • C.增加模型的参数量以提升表达能力
  • D.替代 KL 散度约束的作用

答案:B。强化学习训练中相邻轮次采样的时间相关性较强,直接用于策略更新会导致梯度高方差与训练振荡。经验回放从历史样本缓冲区中混合采样,打破了时间先后关联,使更新更稳定。它不会减少显存(A 反而增加),不改变模型参数数量(C),也不承担约束偏离的作用(D)。