663 字
2 分钟
Verify Step by Step 论文解读:过程监督让数学推理更强
大型语言模型在做复杂数学题时经常”一本正经地胡说八道”。OpenAI 的 Verify Step by Step 论文系统比较了结果监督和过程监督,证明了**过程监督(Process Supervision)**能够显著提升模型的推理可靠性。
本文将详细解读这篇论文的核心发现和技术方案。
本文要点
- 结果监督(ORM)vs 过程监督(PRM)
- 过程监督的标注方案
- 主动学习在过程监督中的应用
- MATH 数据集的表现
一、背景:数学推理的可靠性问题
1.1 LLM 推理的错误模式
flowchart TB
A["LLM 数学推理的典型错误"] --> B["1. 推理跳跃"]
A --> C["2. 计算错误"]
A --> D["3. 错误假设"]
A --> E["4. 幻觉式推理"]
A --> F["示例"]
B --> B1["看似对但中间步骤省略关键推导"]
C --> C1["4 × 7 = 26(正确是 28)"]
D --> D1["假设某个条件成立但实际不成立"]
E --> E1["看似合理但逻辑不连贯"]
F --> F1["鸡兔同笼问题: 鸡 12 只,兔 23 只"]
F --> F2["验证: 12+23=35 , 12×2+23×4=92 ≠ 94 "]
style A fill:#f44336,color:#fff
1.2 两种监督信号
# 结果监督(Outcome Supervision / ORM)class OutcomeSupervision: """ 只看最终答案是否正确 不关心推理过程 """ def reward(self, solution, final_answer, ground_truth): return 1.0 if final_answer == ground_truth else 0.0
# 过程监督(Process Supervision / PRM)class ProcessSupervision: """ 评估每个推理步骤是否正确 提供细粒度反馈 """ def reward_per_step(self, steps, ground_truth): rewards = [] for i, step in enumerate(steps): # 判断当前步骤是否正确 is_correct = verify_step(step, steps[:i], ground_truth) rewards.append(1.0 if is_correct else 0.0) return rewards二、核心对比:ORM vs PRM
2.1 监督信号对比
flowchart LR
subgraph 结果监督 ORM
A1[推理步骤 1] --> A2[推理步骤 2] --> A3[推理步骤 N] --> A4[最终答案]
A4 --> B1[/]
end
subgraph 过程监督 PRM
C1[推理步骤 1] --> D1[/]
C2[推理步骤 2] --> D2[/]
C3[推理步骤 N] --> D3[/]
D1 --> C2
D2 --> C3
end
style B1 fill:#f44336,color:#fff
style D1 fill:#4caf50,color:#fff
style D2 fill:#4caf50,color:#fff
style D3 fill:#4caf50,color:#fff
2.2 标注成本对比
flowchart TB
A["ORM vs PRM 标注对比"] --> B["结果监督 ORM"]
A --> C["过程监督 PRM"]
A --> D["OpenAI 的方案"]
B --> B1["只需要标注最终答案"]
B --> B2["标注成本低"]
B --> B3["但无法指出错误发生在哪一步"]
C --> C1["每个中间步骤都需要标注"]
C --> C2["标注成本高"]
C --> C3["但能精确定位错误"]
D --> D1["使用主动学习减少标注量"]
D --> D2["只标注最有价值的步骤"]
style B fill:#ff9800,color:#fff
style C fill:#4caf50,color:#fff
2.3 效果对比
# OpenAI 的对比实验
results = { "ORM": { "solve_rate": "70%", # 能解决多少问题 "step_accuracy": "85%" # 步骤准确率 }, "PRM": { "solve_rate": "78%", # 显著提升 "step_accuracy": "95%" # 步骤更可靠 }}三、技术方案:PRM800K 数据集
3.1 数据集构建
class PRM800KDataset: """ PRM800K:80 万步骤级人类反馈标注 用于训练过程监督奖励模型 """
def __init__(self): self.annotations = []
def add_annotation(self, problem, solution, step_feedback): """ 添加一个标注样本 problem: 数学问题 solution: 逐步解答 step_feedback: 每一步是否正确的标注 """ self.annotations.append({ "problem": problem, "solution": solution, "step_feedback": step_feedback })3.2 主动学习策略
class ActiveLearning: """主动学习减少标注成本"""
def select_samples(self, model, unlabeled_problems): """ 选择模型最不确定的样本进行标注 """ uncertainties = []
for problem in unlabeled_problems: # 让模型生成解答 solutions = model.generate_solutions(problem, n=10)
# 计算答案的一致性 answers = [sol.final_answer for sol in solutions] agreement = max(set(answers), key=answers.count) / len(answers)
# 一致性低 = 不确定 = 值得标注 uncertainties.append((problem, 1 - agreement))
# 选择最不确定的样本 uncertainties.sort(key=lambda x: x[1], reverse=True) return [p for p, _ in uncertainties[:self.batch_size]]3.3 奖励模型训练
class ProcessRewardModel: """过程监督奖励模型"""
def __init__(self, base_model): self.model = base_model self.reward_head = nn.Linear(hidden_size, 1)
def forward(self, problem, solution_steps): """ 输出每一步的奖励分数 """ rewards = [] hidden = self.model.get_input_embedding(problem)
for step in solution_steps: step_embedding = self.model.encode_step(step, hidden) reward = self.reward_head(step_embedding) rewards.append(reward) hidden = self.model.update_hidden(hidden, step_embedding)
return rewards
def compute_loss(self, problems, solutions, step_labels): """ 计算过程监督损失 step_labels: 每一步的人类标注(正确/错误) """ rewards = self.forward(problems, solutions)
# 每一步的交叉熵损失 loss = 0 for reward, label in zip(rewards, step_labels): loss += F.binary_cross_entropy_with_logits( reward, torch.tensor(label) ) return loss四、实验结果
4.1 MATH 数据集表现
bar-chart
title "PRM vs ORM 在 MATH 测试集的表现"
x-label "监督方法"
y-label "问题解决率 %"
data: ORM: 78.0, PRM: 85.0
4.2 主动学习的效果
flowchart TB
A["主动学习效率对比"] --> B["随机采样 vs 主动学习"]
B --> C["达到 80% 准确率所需的标注量"]
C --> D["随机采样: ~500K 标注"]
C --> E["主动学习: ~200K 标注(减少 60%)"]
F["结论:主动学习显著减少标注成本"]
D --> F
E --> F
style A fill:#4caf50,color:#fff
4.3 不同规模模型的表现
# 过程监督对不同规模模型的效果
model_sizes = ["1B", "7B", "13B", "175B"]
results = { "ORM": { "1B": 45, "7B": 62, "13B": 71, "175B": 78 }, "PRM": { "1B": 52, "7B": 73, "13B": 82, "175B": 85 }}
# PRM 在所有规模上都优于 ORM五、为什么过程监督更有效?
5.1 原因分析
flowchart TB
A["PRM 优势分析"] --> B["1. 更精确的信用分配"]
A --> C["2. 更好的可解释性"]
A --> D["3. 符合人类教学直觉"]
A --> E["4. 避免错误累积"]
B --> B1["ORM 难以确定错误发生在哪一步"]
B --> B2["PRM 直接标注每一步的对错"]
C --> C1["能指出具体哪一步出错了"]
C --> C2["便于人类理解和调试"]
D --> D1["人类教学也是一步一步指导"]
D --> D2["反馈应该针对具体步骤"]
E --> E1["ORM 可能因为中间步骤错但结果对而错过错误"]
E --> E2["PRM 确保每步都正确"]
style A fill:#4caf50,color:#fff
5.2 训练曲线对比
line
title "ORM vs PRM 训练曲线"
x-label "训练步数"
y-label "MATH 准确率 %"
data: ORM: [50, 60, 68, 73, 76, 78], PRM: [50, 65, 75, 80, 83, 85]
六、影响与局限
6.1 对后续工作的影响
flowchart
A["Verify Step by Step"] --> B["GPT-4 数学能力"]
A --> C["MathVista"]
A --> D["更多过程监督研究"]
6.2 当前局限
| 局限 | 说明 |
|---|---|
| 标注成本高 | 需要步骤级标注 |
| 只适用数学 | 难以扩展到开放域推理 |
| 标注主观性 | 步骤正确性的判断可能因人而异 |
常见问题 FAQ
Q1:过程监督和结果监督哪个更好?
A:在数学推理任务上,论文证明过程监督(PRM)显著优于结果监督(ORM),能提升约 7% 的问题解决率。
Q2:为什么过程监督更有效?
A:过程监督提供更精确的信用分配,能明确指出错误发生在哪一步,避免错误累积和误导性监督信号。
Q3:主动学习是如何减少标注成本的?
A:主动学习选择模型最不确定的样本进行标注,避免标注大量模型已经能正确处理的简单样本,从而用更少标注达到相同效果。
Q4:过程监督适用于所有任务吗?
A:不一定。过程监督需要能够清晰定义”步骤”的任务。数学证明、代码调试等有明确步骤的任务最适合。
小结
Verify Step by Step 证明了过程监督在数学推理中的重要性:
flowchart TB
A["Verify Step by Step 核心总结"] --> B["核心发现"]
A --> C["技术贡献"]
A --> D["影响"]
B --> B1["过程监督(PRM)显著优于结果监督(ORM)"]
B --> B2["MATH 数据集提升 7%(78% → 85%)"]
B --> B3["主动学习减少 60% 标注成本"]
C --> C1["PRM800K 数据集(80 万步骤标注)"]
C --> C2["主动学习标注策略"]
C --> C3["过程监督奖励模型训练方法"]
D --> D1["推动了数学推理研究"]
D --> D2["启发了更多过程监督工作"]
style A fill:#4caf50,color:#fff
参考资料
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
Verify Step by Step 论文解读:过程监督让数学推理更强
https://blog.souloss.com/posts/machine-learning/llm-paper-history/verify-step-by-step-process-supervision/ 部分信息可能已经过时
相关文章 智能推荐
1
Superalignment 论文解读:弱到强泛化,监督超级 AI
AI 深度解读 Superalignment 论文——OpenAI 如何研究用弱模型监督强模型,为未来超级 AI 的对齐问题提供解决方案。
2
WebGPT 论文解读:让语言模型学会上网搜索
AI 深度解读 WebGPT 论文——OpenAI 如何训练 GPT-3 使用浏览器进行信息检索和问答。
3
Chain of Thought:让大模型学会推理
AI 深度解读 Chain of Thought 论文(2022)——通过中间推理步骤提示,大幅提升大语言模型在算术、常识、符号推理任务上的表现。
4
Transformer-XL 论文解读:让 Transformer 学会"记忆"更长上下文
AI 深度解读 Transformer-XL 论文——如何通过段级递归机制和相对位置编码解决固定长度上下文限制,让 Transformer 能够处理超长序列。
5
Toolformer 论文解读:让语言模型学会使用工具
AI 深度解读 Toolformer 论文——Meta 如何让语言模型通过自监督学习掌握使用外部工具的能力。






