微信扫码
添加专属顾问
我要投稿
这篇论文揭示了大模型自我检测和自我修正的新方法,彻底革新了传统依赖人工标注的范式。核心内容:1. 论文动机:解决大模型在复杂推理中的自我审查和验证问题2. 主要创新点:同时训练模型解决问题和自我验证的强化学习框架3. 显著结果:模型在解题正确率和自验证准确率上的大幅提升
❝一句话概括,这篇论文教大模型左右互搏,自己出题自己改,改不好还要挨板子,堪称精神分裂式学习法。
此阶段是介绍阶段不要引入公式和符号,使用自然语言描述
这篇论文讨论的是在大语言模型(LLM)做复杂推理时,如何让模型不仅能“算对答案”,还能够“自我审查”和“自我验证”。目前一种常见的强化学习方案是给模型一个“可验证的奖励”(verifiable reward),即当模型的答案是可程序化判定对错的时候(如数学、编程题),用答案对错来指导模型学习。但作者发现,现有做法往往会导致模型出现“表面式的自我检查”,即模型可能能答对题,但并没有真正学会严谨地反思或验证自己的结论。
为此,作者提出了一个新的思路:在同一个强化学习过程中,同时教会模型“怎么解决问题”和“怎么评判自己的答案是否正确”。他们将这两件事整合到一个统一的训练流程中,并在每一次训练迭代中,都让模型现学现用地先解题,再对自己的解题结果做自我打分,然后再一起更新模型参数。这样做的动机是让“解决问题”和“自我验证”在训练时就紧密关联,从而促使模型形成更真实、更有效的自我检查机制,而不是只学到表面形式。
简单地说:“要让模型既会解题,又会当裁判”,并且这两个能力还要在同一个强化学习循环里一起进步。
论文声称的主要创新点可以总结为:
同时训练解题和自验证的强化学习框架以往的做法常常是先让模型学会解题,然后再“另起炉灶”去学怎么验证;或者只在解题过程中简单引入一些自我反思的文本提示。作者这里强调的是,“解题”和“验证”都在同一个在线强化学习过程里互相反馈和提升。
利用可验证的奖励来给出解题和验证双方的监督他们将原本给正确解答的二元奖励(1 或 0)也同时用于判断模型的验证输出是否和真实判定吻合。因为既然我们能判断一个解是否正确,也能对“预测分数”(模型自验证时的打分)是否准确做出真假判定。如此,模型不仅被强化学习去做对答案,还被强化学习去“验对”答案。
显著提高了自验证能力,并带来了更可靠的推理表现在实验中,作者展示了他们的方法能让模型在“解题正确率”和“自验证准确率”两个指标上都得到大幅提升。此外,自验证能力也能在推理推断时帮到自己,带来最终结果的稳健性提升。
支撑这些创新的关键技术在于将“解题”和“验证”两个过程整合到单一的在线强化学习循环中,并为这两个过程都设计了基于“可验证结果”的奖励机制。这意味着模型在同一次学习迭代中,既要为生成正确的答案而努力,也要为准确地评估自己答案的正确性而努力,两者通过共享的奖励信号和策略更新机制相互促进。
论文中最显著或最有意义的结果包括:
要深入理解这篇论文,读者需要抓住以下关键概念或方法:
可验证的奖励(Verifiable Reward)不同于传统人工打分或人类偏好打分,这里的奖励是可以自动判断的对错信号。比如在数学题中,如果模型的最终答案和标准答案一致,奖励就是 1,否则是 0。这个机制既适用于检测“解题”也适用于检测“自验证是否正确”。
在线强化学习与“自我验证”同时进行论文提出的核心在于:把生成答案的过程和随后自验证的过程都纳入同一条强化学习轨迹。这种“同时训练”的思路和“先生成再检验,检验完再更新”的过程需要仔细理解。
自验证如何反过来帮助解题论文中不只是训练了一个验证器,还强调训练后模型内在地学会了边解题边反思。它在推理过程中会更倾向于产生对自己思路的检查,而不是简单地按照提示输出。
最具挑战性的部分或读者最容易感到抽象的地方在于:
通过以上分析可以发现,“如何将解题和自验证融入同一个在线强化学习框架”,这一点是整篇论文最具新意、同时也是最不直观的核心概念。具体来说有两点:
结合上面的分析,读者需要先知道什么是可验证的奖励以及它和传统强化学习奖励的区别,才能理解为什么自验证也能被“打分”。在此之上,需要理解什么是在线强化学习过程:模型每次都要先解题、再验证、再一起更新策略参数。最后是自验证在推理时带来的影响:它如何改变模型的内在推理策略。
一个合适的切入点是: 先介绍可验证的奖励 → 再介绍在线强化学习怎么把解题和自验证都纳入一个循环 → 最后让读者知道这个自验证学到的策略还能作用在推理里,带来更好的解题表现。
此阶段重点是引入比喻并将比喻和公式符号联系在一起
让我们以“学生在考试中既要答题,也要给自己打分”来做比喻。
假设有一名考生小明,他参加了一场数学测验。测验形式很特殊:
小明会根据自己答题+自评的表现拿到一定的分数,分数包含两部分:
由于这个考试是“在线学习”的形式,小明在每一轮测验后都会根据系统打出来的分数(解题分 + 自评分)来反思、改进自己的解题策略和打分策略;然后继续下一轮的测验。
这个场景中,小明做题的过程就对应了解题生成,而小明给自己打分对应了自验证。那个自动判卷系统就像论文里提到的“可验证的奖励”,它可以不需要人工干预、直接判断对错,从而给出清晰的分数。
“小明做题” ↔ “模型在生成解题答案(problem-solving trajectory)”
“小明给自己打分(自评)” ↔ “模型对自己生成的答案做验证(self-verification trajectory)”
“自动判卷系统” ↔ “outcome verifier(可验证的奖励信号)”
“拿到总分后,下一轮会改进策略” ↔ “PPO等强化学习算法,对解题策略+验证策略做同时更新”
这个比喻之所以合理,是因为它很好地体现了论文所说的“在线自验证”:解题和验证在同一个过程中,相互影响,统一地被奖励信号所更新,而不是把验证拆成一个独立的后处理模块。
在上面的比喻基础上,我们接下来用论文中的关键数学公式和算法术语,来解释这个“同时训练解题和自验证”的强化学习机制。读者可以对照比喻,先把抽象的数学符号映射到“考生答题”的场景。
(一)政策梯度公式(Policy Gradient)
原始数学形式:
符号替换版本:“为了让小明拿到更高总分,我们要沿着会让小明分数上升的方向调整小明的答题策略。假设小明对每道题每一步写下的答案片段(token)都有一个概率。我们就不断地微调这些概率分布,让那些导致分数变高的行为更容易被执行,让导致分数变低的行为更不容易被执行。”
其中,是题目信息,是模型的完整回答序列,是模型参数。 而可以理解为“小明的脑海中对答题的所有可能写法的偏好分布”。
关键点在于(优势函数),“优势函数”就代表“在这个时刻输出这一步,究竟比平均表现好多少”。如果比平均值好,就要更多地增加它的概率;反之则要抑制它。
(二)优势函数(Advantage Function)
原始数学形式:论文里给出的优势函数常见形式是:
或者在实践中会使用带基线或其它估计方法(比如GAE),简化后可记为:
其中是每一步的TD残差。
符号替换版本:“某个回答步骤的价值(优势) = 这道题最后拿到的总奖励 - 大家在类似题目上通常拿到的水平”。 例如:将 "A_i = (r_i - mean(r))/std(r)" 替换为 "某个尝试的优势值 = (这次尝试的奖励 - 所有尝试的平均奖励)/所有尝试奖励的波动程度" (此示例为通用优势函数概念,论文中具体实现可能略有不同,但核心思想一致)
当为正时,表示“写下这个步骤”好过一般,应该提升写下它的几率;反之则减少。
(三)可验证奖励(Verifiable Reward)
原始数学形式: (论文中没有直接给可验证奖励的统一数学公式,而是描述其机制)
符号替换版本:“如果小明既答对了题,也正确地判断自己做对没,那么解题奖励 + 自评奖励两部分都能拿到好处;反之要么丢掉解题奖励,要么丢掉自评奖励。”
这样一来,每条“回答轨迹”就不仅包含了答题动作的token序列,也紧跟着包含验证动作的token序列。最后在同一个 RL 算法里,把答题奖励和验证奖励都加进来,就得到一个总的奖励信号。
(四)PPO(Proximal Policy Optimization)在这里的作用
原始数学形式: (PPO核心目标函数简化版)
其中,即新旧策略的比值。
符号替换版本:“我们要让小明每次根据上次考试策略和这次考试策略之间的差别,适度地修正自己的答题偏好,不能一下子大幅度改头换面(通过一个‘裁剪’操作限制变化幅度),以免走极端。”
论文中主要使用的是 PPO 算法,把上面那些奖励值、策略概率等信息组合到一起进行更新。PPO 有一些控制更新幅度的技巧,比如 clip 操作或 KL 惩罚,核心思想是在保证策略不会走太大的极端更新的同时,让解题策略和验证策略都朝着“更高分”的方向前进。
比喻帮助我们将抽象的强化学习概念(如策略、奖励、优势函数、PPO更新)具象化为学生考试、评分和学习改进的过程,使得理解“在线同时训练解题与自验证”这一核心机制变得更加直观。
真实的强化学习会有许多超参数、细节实现,比如学习率、价值函数更新方式、熵正则化等,而在“小明考试”的场景中就没有呈现得那么复杂。但至少这个比喻帮助读者理解了“在同一次答题过程中,如何同时对解题和自评给分并更新”。
通过“小明既要答题又要给自己打分,再由自动系统做客观判卷”的生活场景,比喻了论文中“解题 + 自验证 + 可验证奖励 + 在线RL训练”的核心机制。
我们可以看到:
这个对应关系帮助我们把复杂的强化学习框架和自验证思路形象化。等读者明白了这个流程,就很容易理解为什么把“解题”和“自验证”放在同一个训练循环中,可以让模型学到更真实、有用的“自我审核”技能。最关键的数学原理——策略梯度,就像小明根据每次考试的“优势”(做得比平时好还是差)来调整自己“解题和自评的习惯(策略)”,PPO则保证这种调整是稳健的。
该论文的核心方法是一个在线强化学习框架,用于同时训练大语言模型的“解题(生成)”和“自验证(验证)”能力。整个流程可以被拆解为以下几个主要阶段:
这样就能保证模型在训练时,解题与自验证是“绑定”在同一条 RL 轨迹里:模型输出答案后立刻要对自己答案做打分,并且能同时获得相应的奖励或惩罚信号。
下面我们把整个流程展开得更细致一些,尤其关注输入和输出的衔接:
准备输入
模型生成解题答案(Generation Phase)
外部判定器计算“解题奖励”
构造“验证问题”并让模型做自验证
外部判定器计算“验证奖励”
将“解题轨迹”和“验证轨迹”合并成一个RL更新批次
重复迭代
上述流程已经保证了这一点。例如:
为了让读者能“照着就能写”,下面给出一段简化的伪代码,体现上面描述的关键逻辑。可以将其视作论文中算法流程的概括版:
# 假设我们使用PPO为主干RL方法
initialize policy $\pi_\theta$ and value function $V_\phi$ with model parameters
for iteration in range(num_iterations):
# Step 1: 采样问题
problem_batch = sample_problems(batch_size) # (问题列表)
generation_trajectories = [] # 用于存储 (问题, 解答序列, 解题奖励, 解题log_probs, 解题values)
verification_trajectories = [] # 用于存储 (验证提示, 验证序列, 验证奖励, 验证log_probs, 验证values)
# Step 2 & 3: 生成阶段并获取解题奖励
for problem_prompt in problem_batch:
# 在当前策略下,采样多条解答 (rollouts)
for _ in range(num_generation_rollouts):
# generated_solution_tokens: list of tokens
# log_probs_gen: log probability for each token
# values_gen: value estimate for each state (token prefix)
generated_solution_tokens, log_probs_gen, values_gen = $\pi_\theta$.generate_with_logprobs_values(problem_prompt)
generated_solution_text = detokenize(generated_solution_tokens)
# 使用外部判定器评估
reward_for_solution = outcome_verifier(problem_prompt, generated_solution_text) # e.g., 0 or 1
# 记录解题轨迹相关信息
generation_trajectories.append({
"prompt": problem_prompt,
"solution_tokens": generated_solution_tokens,
"reward": reward_for_solution,
"log_probs": log_probs_gen,
"values": values_gen
})
# Step 4 & 5: 自验证阶段并获取验证奖励
for gen_traj_data in generation_trajectories:
problem_prompt = gen_traj_data["prompt"]
solution_text = detokenize(gen_traj_data["solution_tokens"])
actual_solution_correctness = (gen_traj_data["reward"] == 1) # True if solution was correct
verification_prompt = make_verification_prompt(problem_prompt, solution_text)
for _ in range(num_verification_rollouts):
# verification_output_tokens: list of tokens
# log_probs_ver: log probability for each token
# values_ver: value estimate for each state (token prefix)
verification_output_tokens, log_probs_ver, values_ver = $\pi_\theta$.generate_with_logprobs_values(verification_prompt)
verification_output_text = detokenize(verification_output_tokens)
# 判定自验证是否准确
# parse_verification_assessment: extracts model's belief (e.g., True if model thinks solution is correct)
model_assessment_is_correct = parse_verification_assessment(verification_output_text)
reward_for_verification = 1.0 if (model_assessment_is_correct == actual_solution_correctness) else 0.0
verification_trajectories.append({
"prompt": verification_prompt,
"verification_tokens": verification_output_tokens,
"reward": reward_for_verification,
"log_probs": log_probs_ver,
"values": values_ver
})
# Step 6: 拼接轨迹做RL更新(使用PPO的方式)
# combined_trajectories 将 generation_trajectories 和 verification_trajectories 的数据
# 按照PPO的要求(如计算GAE优势、格式化)进行整合
# 然后执行一次或多次PPO优化步骤
# 注意:在PPO更新时,解题轨迹和验证轨迹是分别计算其优势函数和损失的,
# 但它们都贡献于同一个策略网络 $\pi_\theta$ 的梯度。
ppo_update_step(policy=$\pi_\theta$, value_function=$V_\phi$,
generation_data=generation_trajectories,
verification_data=verification_trajectories)
# end for
在这个伪代码里:
outcome_verifier
负责计算解题对错的奖励。make_verification_prompt
根据问题和解答构造验证任务的提示。parse_verification_assessment
从模型的验证输出中解析出模型对原解答的判断(例如,模型认为原解答是“对”还是“错”)。ppo_update_step
代表了PPO算法的核心更新逻辑,它会使用收集到的所有轨迹数据(包括解题和验证两部分)来计算损失并更新策略网络 和价值网络 。等到最后,训练好的策略就具备了更强的解题能力,并且在回答问题时更善于做自我批判、知道什么时候自己很可能答错。
完整示例:一道数学题从输入到输出
输入
模型解题 (Generation Phase)
problem_prompt
。generated_solution_tokens
,可能输出:["2", "+", "2", "=", "5", ",", "最", "后", "答", "案", "=", "5"]
(detokenized: "2+2=5,最后答案=5")log_probs_gen
和 values_gen
。外部判定器计算“解题奖励”
outcome_verifier("Question: 求 2 + 2 的值。", "2+2=5,最后答案=5")
返回 reward_for_solution = 0
。generation_trajectories
添加此条目。构造“验证问题”并让模型做自验证 (Verification Phase)
make_verification_prompt("Question: 求 2 + 2 的值。", "2+2=5,最后答案=5")
生成:"以下是对问题 'Question: 求 2 + 2 的值。' 的解答:'2+2=5,最后答案=5'。请判断此解答是否正确 (输出 '正确' 或 '错误') 并说明理由。"
verification_prompt
,生成 verification_output_tokens
,可能输出:["这", "个", "解", "答", "是", "错", "误", "的", "。", "2", "+", "2", "应", "该", "等", "于", "4", "。"]
(detokenized: "这个解答是错误的。2+2应该等于4。")log_probs_ver
和 values_ver
。外部判定器计算“验证奖励”
parse_verification_assessment("这个解答是错误的。2+2应该等于4。")
返回 model_assessment_is_correct = False
(模型认为原解答错误)。actual_solution_correctness
在此例中是 False
(因为原解答"2+2=5"是错的)。model_assessment_is_correct == actual_solution_correctness
(False == False),所以 reward_for_verification = 1.0
。verification_trajectories
添加此条目。PPO 更新
ppo_update_step
使用 generation_trajectories
和 verification_trajectories
中的数据(包括tokens, rewards, log_probs, values)来计算优势和损失,并更新模型参数 和 。reward_for_solution = 0
,模型会学着减少生成 "2+2=5" 这种错误答案的概率。reward_for_verification = 1.0
,模型会学着增强其正确判断 "2+2=5是错误的" 这种验证行为的概率。通过大量此类迭代,模型最终便能更稳定地输出“2+2=4”,同时也能很准确地给自己输出答案打分,从而形成一个既会做题又会审阅自己答案的“自洽”策略。
本文题目:Reinforcing Reasoning with Self-Verification: Leveraging Verifiable Rewards for On-Policy Generation and Verification
欢迎Deep Learning同好与我交流、讨论、合作!
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-05-23
Reasoning模型蒸馏实践:用大模型提升小模型能力
2025-05-23
OpenAI 重磅推出!核心API新增MCP功能,智能体开发迎来翻天覆地的变化
2025-05-22
如何让 Agent 规划调用工具
2025-05-22
如何为你的AI战略选择最佳云模型
2025-05-22
AI工程技术栈
2025-05-21
CursorRules:AI编程助手规则调优实战
2025-05-21
可以将任何符合OpenAPI规范的接口转 MCP Server吗?
2025-05-21
深度剖析 MCP SDK 最新版: Streamable HTTP 模式正式发布,为你实测揭秘
2025-02-04
2025-02-04
2024-09-18
2024-07-11
2024-07-09
2024-07-11
2024-07-26
2025-02-05
2025-01-27
2025-02-01