【Reasoning】Improve Mathematical Reasoning in LanguageModels by Automated Process Supervision

Improve Mathematical Reasoning in LanguageModels by Automated Process Supervision

arxiv: https://arxiv.org/abs/2406.06592

问题背景

COT和SC-COT对于模型推理能力的提升仍然有效,已有研究提出用一个验证器去帮助LLM提升推理能力。采用ORM结果验证器岁可以对最终结果生成一个信号,但是不能去奖励或者惩罚中间步骤。采用PRM可以对中间步骤在更细粒度的视角下,对中间步骤进行奖励或者惩罚。受到AlphaGo Zero的启发,本文提出了一个分而治之的蒙特卡洛树搜索算法OmegaPRM,来有效的收集高质量过程监督数据。

本文方法

这篇论文提出了一种名为OmegaPRM的新型分治风格蒙特卡罗树搜索(MCTS)算法,通过引入二分搜索算法来高效识别COT中的第一个错误快速定位错误位置,用于自动收集高质量的过程监督数据。

(1)蒙特卡洛过程标注方法

已有的方式是构建了一个『完成者』策略,接受一个问题q和一个包含前t步骤 x 1 : t x_{1:t} x1:t的前缀解决方案,并输出后续步骤的完成度。
在这里插入图片描述
在图里的(a)中,对于解决方案的任何步骤,可以使用更完备的策略从该步骤随机抽样k个rollout。然后,将这些rollout后得到的最终答案与正确答案进行比较,评估出一个前缀步骤的『正确性等级』,公式如下:

在这里插入图片描述
这种方式计算了从步骤t开始后所有rollout里得到正确答案的比例情况,这种方式需要从头到尾执行每个步骤的rollout,需要大量的调用,开销过大。

为了优化标注效率,本文提出了一种基于二分搜索的蒙特卡洛的方法。当解决方案中出现了第一个错误步骤时,这种数据就足以用来训练PRM。基于这种想法,本文的目标是有采用有效的方式定位第一个错误。主要是通过重复划分解决方案和执行rollout来实现这一点。

  • 二分搜索定位错误大致流程:
    假设我们的目标数据是真负例,首先从中点步骤m将其拆分,然后对前半步骤1:m执行rollout,当 c m > 0 c_m>0 cm>0时,表示前半步骤中至少有一个步骤是正确的可以得到正确的答案,错误步骤在后半部分。当 c m = 0 c_m=0 cm=0时,说明前半部分中很有可能有错误步骤,因为从该步骤往后进行rollout后的结果中没有一个是正确的。

以此方式不断迭代定位错误,直至到达停止条件(该解过程足够短,视为单个步骤)。从而将时间复杂度从O(kM),缩短至O(klogM)。

(2)蒙特卡罗树搜索

在实践中,需要为一个问题收集多个PRM训练样例(即问题、部分解和正确性标签的三元组)。与每次从头开始不同,本文在过程中存储所有的rollout,并在需要收集新例子时,从这些rollout中的任何一个执行二分搜索。这种方法允许使用具有相同解决方案前缀,但补全后续步骤和不同错误位置的三元组。

考虑一个正式的station-action树的表示:

  • 状态s:包含问题和先前所有的推理步骤
  • 动作a:特定状态下潜在的后续步骤。
  • 根状态 r r o o t = q r_{root}=q rroot=q是没有任何推理步骤的初始问题。
  • 策略 π ( a ∣ s ) = L M ( a ∣ s ) \pi(a|s)=LM(a|s) π(as)=LM(as)
  • 状态转移函数: s ′ = C o n c a t e n a t e ( s , a ) s'=Concatenate(s,a) s=Concatenate(s,a),简单地将前面步骤和动作步骤进行拼接。

传统的MCTS的动作空间为有限空间,但是语言模型具有无限的动作空间,在实践中本文采用temperature采样为prompt生成固定数量k的补全,将k动作视为近似的动作空间。OmegaPRM的MCTS算法如下:

树结构

节点:每个节点代表部分CoT解决方案的状态,包含问题q、前缀解决方案 x 1 : t x_{1:t} x1:t和所有之前的模拟结果。每个边 (s, a) 是从节点s开始的单个步骤或连续步骤的序列。每个节点存储一组统计信息:

在这里插入图片描述

包括访问次数(N(s))、蒙特卡罗估计(MC(s))和state-rollout值函数(Q(s, r)),这个值函数与树遍历的选择阶段选择rollout的机会相关。具体来说:
在这里插入图片描述

其中, α , β ∈ ( 0 , 1 ] 和 L > 0 \alpha, \beta \in (0,1] 和 L>0 α,β(0,1]L>0是常数超参数。len® 是以token个数表示的rollout长度。Q表示每次迭代选择rollout的可能性,公式中第一部分目的是让MC(s)接近于1解能尽可能的大,第二部分是惩罚过长的rollouts。目标是定义一个启发式方法,选择最有价值的rollout进行搜索。文中建议在选择过程中优先考虑『被认为是正确的错误答案』。『被认为是正确的』表示蒙特卡罗估计MC(𝑠)接近于1的状态,但最终答案是错误的。 作者期望PRM可以学习到如何检测出这种『高MC值但结果是错误的』这一类rollout错误问题,这对于纠正策略所犯的错误方面很有用。

选择阶段

池管理:维护一个满足条件的模拟结果池,这些模拟结果的MC(s)值在0到1之间。
选择策略:在每次选择期间,根据树统计数据 ( s , r ) = a r g m a x ( s , r ) [ Q ( s , r ) + U ( s ) ] (s,r)=argmax_{(s,r)}[Q(s,r)+U(s)] (s,r)=argmax(s,r)[Q(s,r)+U(s)]选择执行一个rollout,使用PUCT算法的变体:
在这里插入图片描述

其中 c p u c t c_{puct} cpuct是一个决定探索水平的常数,U(s)是一个探索因子,用于平衡探索和利用。

二分搜索

错误定位:在选定的模拟结果中进行二分搜索,以识别第一个错误位置。模拟结果中MC(s)值在0到1之间的部分被添加到选择候选池中。在第一个错误之前的所有分割和rollout位置都成为新的状态。
新状态生成:所有在第一个错误之前的划分和模拟位置成为新的状态。

维护阶段

统计更新:在二分搜索后,更新树的统计信息(N(s)、MC(s)和Q(s, r))。具体来说,对于所选的(s, r),N(s) 会被加一,MC(s)和Q(s, r)都针对二分搜索中采样的新rollout进行更新。这个阶段和AlphaGo的backup阶段类似,但更简单,不需要从叶子结点到根的递归更新反向传播。

树构建

迭代过程:通过重复上述过程,构建一个state-action树。当搜索次数达到预定限制或池中没有更多的模拟候选时,构建结束。

(3)训练PRM

在构造的状态-动作树中,每个具有单步动作的边(𝑠,𝑎)都可以作为PRM的训练示例。它可以使用标准分类损失进行训练:

在这里插入图片描述

y ^ \hat y y^是正确标签,𝑦 = PRM(𝑠, 𝑎) 是PRM的预测分数。
三种方式:

  • 软标签: y ^ = M C ( s ) \hat y=MC(s) y^=MC(s)
  • 硬标签: y ^ = 1 [ M C ( S ) > 0 ] \hat y=1[MC(S)>0] y^=1[MC(S)>0]
  • 最小化PRM预测值与参考Bradley-Terry模型的标准化配对偏好值之间的交叉熵损失。

实验设置

  • 生成数据
    • 数据集:使用MATH数据集,划分出12K训练集和500测试集。
    • 超参数:𝛼 = 0.5, 𝛽 = 0.9, 𝐿 = 500, c p u c t c_{puct} cpuct = 0.125。限制搜索步骤为100步,共产生了150万个过程监督标注数据。
  • 基座模型
    Gemini Pro策略模型:通过在数学指令数据集上蒸馏Gemini Ultra的知识,微调Gemini Pro得到的一个策略模型。该策略模型在MATH数据集上准确率为51%。
  • 指标和基线
    • 基线数据集:PRM800K、Math-Shepherd
    • 评估指标方式:基于多数投票得到结果

实验结果

(1)MATH数据集评测结果

在这里插入图片描述

图给出了在不同过程注释数据集上训练的PRMs的性能比较。OmegaPRM始终优于其他数据集。经过微调的Gemini Pro使用OmegaPRM加权多数投票在MATH数据集上达到69.4%的准确率。

(2)步数分布

过程监督的一个重要因素是解决方案中的步骤数和每个步骤的长度。以前的方案是使用基于规则的策略将解决方案分解为步骤,例如,使用换行符作为分隔符。本文提出了一种更灵活的步骤划分方法,将解中『任何连续token序列』视为有效步骤。作者观察到Math-Shepherd中的许多步分在一定程度上缺乏语义连贯。因此,作者假设语义显式切割对于训练PRM是不必要的。
在这里插入图片描述

在实践中,首先检查PRM800K和Math-Shepherd中每个解决方案的步骤数分布,如图图所示,注意到大多数解决方案的步骤少于20个。在二分搜索中,文中的目标是将一个完整的解分成16个部分。为了计算期望的步长,我们将平均解的长度除以16。当步长小于此值时,二分查找终止。得到的OmegaPRM和其他两个数据集的步长分布如图图所示。这种灵活的分割策略产生的步长分布类似于基于规则的策略。
在这里插入图片描述

(3)RPM训练目标

在这里插入图片描述

PRM可以使用多个不同的目标进行训练。文中使用MATH测试集中分割的问题构造了一个小的过程监督测试集。分别使用逐点软标签、逐点硬标签和成对损失来训练PRM,并评估它们对每步正确性的分类准确率。表中给出了不同目标的对比,发现点式软标签是其中最好的,准确率为70.1%。

局限性

自动过程注释存在噪声。由于假阳性和假阴性引入了一些噪声,但实验表明它仍然可以有效地训练一个PRM。

### ReAct框架在语言模型中的协同推理与行动 ReAct 是一种旨在增强语言模型能力的框架,它通过允许模型执行动态推理来创建、维护并调整行动计划,从而实现更高效的决策过程[^2]。具体来说,在 ReAct 的设计中,模型被赋予了两种核心功能:**推理(Reasoning)** 和 **行动(Action-taking)**。 #### 推理模块的功能 推理模块负责分析当前环境状态以及历史交互数据,生成高层次的战略规划或中间目标。这种推理可以基于输入上下文进行复杂逻辑推导,并预测可能的结果。例如,当面对复杂的多步任务时,推理部分会分解整个流程为若干子任务,并制定初步方案。 #### 行动模块的作用 一旦制定了策略或者明确了下一步方向之后,就需要采取实际行动去改变外部世界的状态或者是获取更多信息以便进一步优化后续步骤的选择。因此,行动模块依据来自推理层给出的具体指示完成实际操作——这可能是查询数据库、调用API接口亦或是物理机器人移动等不同类型的动作表现形式。 #### 动态反馈机制 值得注意的是,ReAct 并不是一次性地决定所有的行为序列;相反,它是持续监控每一步的效果并通过观察新产生的结果来进行自我修正的过程。这意味着即使最初的假设存在偏差甚至完全错误的情况下,该系统也能够及时发现这些问题所在之处并对原定计划作出相应修改直至达成最终目的为止。 ```python def react_framework(environment_state, history): while not goal_achieved(): reasoning_output = perform_reasoning(environment_state, history) action_to_take = determine_action(reasoning_output) new_environment_state, feedback = execute_and_observe(action_to_take) update_history(history, reasoning_output, action_to_take, feedback) def perform_reasoning(state, hist): # Complex logic to derive insights from state & history. pass def determine_action(insights): # Map derived insights into actionable steps. pass def execute_and_observe(action): # Execute an action and observe its effects on environment. pass def update_history(hist, r_out, a_taken, fbk): # Update internal records with latest information. pass ``` 上述伪代码展示了 ReAct 框架的一个简化版本工作流。其中包含了循环结构用于不断迭代直到满足终止条件即达到预定的目标位置;每次循环内部先做思考再付诸实践最后收集经验教训准备下一轮尝试。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰阳星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值