如何复现o1模型,打造医疗 o1?
如何复现o1模型,打造医疗 o1?
- o1 树搜索
- 一、起点:预训练规模触顶与「推理阶段(Test-Time)扩展」的动机
- 二、Test-Time 扩展的核心思路与常见手段
- 1. Proposer & Verifier 统一视角
- 2. 只看最终答案:Best-of-N、Best-of-N Weighted
- 3. 关注中间过程:引入过程奖励模型 (PRM)
- 4. 自改进(Self-Improve / Revision)的思路
- 三、小模型 + 大推理 VS. 大模型 + 普通推理
- 四、进一步:MCTS 与 AlphaZero-Like 搜索
- 五、PRM 在推理与训练中的多种用途
- 六、Self-Play 与 Self-Improve
- 七、OpenR 框架与综合视角
- 八、整体结论与思考
- 4 种解法拆解
- 子解法 A:纯增加推理计算量(“多样采样 + 验证”)
- 子解法 B:过程奖励模型(PRM)与搜索式推理(Beam Search / Lookahead / 等)
- 子解法 C:多轮 Revision / Self-Improve(自修正)
- 子解法 D:MCTS / AlphaZero-like 思路(结合自对弈 / RL 训练)
- o1 医疗:树搜索
论文汇总:https://github.com/hijkzzz/Awesome-LLM-Strawberry?tab=readme-ov-file
o1 树搜索
├── 1 总览【背景与动机】
│ ├── 1.1 预训练Scaling Law遇到瓶颈【描述问题】
│ │ ├── 语言模型尺寸增大收益渐减【模型规模扩展的困难】
│ │ └── 预训练算力投入与性能不再线性增长【性能触顶】
│ └── 1.2 转向推理阶段的潜能挖掘【提出新方向】
│ └── o1推理/推理优化方法出现【多种推理强化方案】
├── 2 Scaling LLM Test Time【在推理阶段扩展计算以提升性能】
│ ├── 2.1 概述【核心思路】
│ │ ├── 通过增加推理时间或算力来提升回答质量【Test-Time Scaling】
│ │ └── 对比单纯提升模型参数量【对照关系】
│ ├── 2.2 纯推理扩展方案 (Method a)【无需额外训练】
│ │ ├── Best-of-N / Rejection Sampling【多次采样后筛选】
│ │ ├── Self-Consistency (SC)【统计最常见答案】
│ │ └── 计算量与收益的取舍【并行采样可行性】
│ ├── 2.3 结合部分训练的推理扩展 (Method b)【非RL】
│ │ ├── Proposer & Verifier框架【提供过程与结果判别】
│ │ ├── Process Reward Model (PRM)与Outcome Reward Model (ORM)对比【过程奖励与结果奖励】
│ │ └── 多种搜索策略:Beam Search / Lookahead Search【基于PRM评分】
│ ├── 2.4 进一步结合Self-Improve (Method c)【推理与改写】
│ │ ├── Revision Model【对错误答案进行修正】
│ │ ├── 多轮迭代式Refine【输入分布动态改变】
│ │ └── 与并行采样融合【效率对比与收益】
│ ├── 2.5 小模型 vs. 大模型【计算量交换率】
│ │ ├── 何时“小模型+更多推理时间”能胜过“大模型贪心解码”【条件与难度】
│ │ ├── 简单/中等难度题:搜索可以弥补模型不足【搜索有效】
│ │ └── 高难度题:搜索收益有限【本身推理能力不足】
│ └── 2.6 小结【实验与结论】
│ ├── Test-Time算力可在中等难题上胜过贪心大模型【可行性】
│ └── 瓶颈仍在模型本身的推理水平【必须提高Reasoning能力】
├── 3 MCTS与LLM结合 (MCTS-LLM)【基于价值搜索的推理框架】
│ ├── 3.1 基础概念【背景】
│ │ ├── 强化学习 (RL)中的蒙特卡洛树搜索 (MCTS)【Value-Based方法】
│ │ ├── AlphaGo / AlphaZero启示【自博弈与搜索】
│ │ └── LLM中动作空间庞大导致难以直接迁移【技术挑战】
│ ├── 3.2 与LLM结合的思路【如何应用】
│ │ ├── 将LLM生成的每一步/每个token当作节点【步骤或令牌级动作】
│ │ ├── 使用Value或Reward模型 (PRM/ORM)评估节点质量【评估节点】
│ │ └── 探索-利用平衡:UCB或其变体【控制搜索分支】
│ ├── 3.3 工程实现难点【实践限制】
│ │ ├── 计算开销大【深度与广度搜索的FLOPs消耗】
│ │ └── KV Cache与Tree结构管理复杂【缓存与并行】
│ └── 3.4 典型方案【AlphaZero-Like Tree Search等】
│ ├── 在推理时做搜索【纯Inference】
│ └── 在训练时纳入搜索数据【结合PPO或自监督】
├── 4 Process Reward Model (PRM)【过程奖励模型】
│ ├── 4.1 定义与用途【区别于ORM】
│ │ ├── PRM对多步推理的中间步骤打分【信号更密集】
│ │ ├── 可用于剪枝或引导推理路径【搜索友好】
│ │ └── 适合数学、代码等有客观对错的过程【正确性判断】
│ ├── 4.2 数据标注方法【如何获得step-wise标签】
│ │ ├── 人工标注:Let’s Verify Step by Step【三分类(正确/错误/中立)】
│ │ ├── Math-Shepherd:基于Rollout估计Step正确率【自动标注】
│ │ └── OmegaPRM:二分搜索减少Rollout次数【提升标注效率】
│ ├── 4.3 PRM在推理中的应用【PRM-Search】
│ │ ├── Step-wise检测并剪枝【无效步骤判定】
│ │ ├── Best-of-N + PRM重打分【挑选最优回答】
│ │ └── Beam Search / Lookahead + PRM【扩展与剪枝结合】
│ └── 4.4 与RL训练的结合【可替代或增强传统ORM方式】
│ ├── 对每一步进行即时奖励【减小奖励稀疏问题】
│ └── AlphaZero风格中充当Value网络【鼓励正确中间过程】
├── 5 Reasoning能力提升【模型自身推理水平】
│ ├── 5.1 Self-Improve / Revision【自我改写与多轮推理】
│ │ ├── 通过将错误回答并入上下文促使模型修正【隐式/显式修改输入分布】
│ │ ├── 训练阶段可并行收集修正数据【SFT或RL】
│ │ └── 多轮迭代会大幅增加token消耗【效率与效果折中】
│ ├── 5.2 STaR【Self-Taught Reasoner】
│ │ ├── 自动生成Rationale并判断正确性【可持续优化】
│ │ └── 正确解答反向加入训练数据【自举式训练】
│ ├── 5.3 SCoRE【Self-Correction via RL】
│ │ ├── 多回合回答 (y1, y2…) 的奖励对比【修正前后】
│ │ └── 采用PPO与reward shaping【阶段式优化】
│ ├── 5.4 Self-Critique / CriticGPT【引入批评者角色】
│ │ ├── 额外LLM作为批评器【对生成过程显式指出错误】
│ │ └── 将批评信息整合到生成模型【改进下一轮答案】
│ └── 5.5 Consistency & Verification【一致性和自验证】
│ ├── 引入多种思路提升稳健性【Best-of-N, Majority Vote, 等】
│ └── Step-Aware或Token-Level验证【颗粒度更精细】
├── 6 Self-Play与对抗式生成【数据自洽与迭代提升】
│ ├── 6.1 概念与动机【AlphaGo Zero启示】
│ │ ├── 不依赖人类标注,模型相互博弈产生数据【自对弈】
│ │ └── 适用于游戏/棋盘类任务,也可扩展到复杂推理【自生成数据】
│ ├── 6.2 rSTaR / Mutual Reasoning【小模型互相审查】
│ │ ├── 采用预先设计动作集简化搜索【避免巨大token空间】
│ │ └── 迭代判断一致答案或修正答案【提高结果可信度】
│ └── 6.3 OpenR等开源实践【结合MCTS与Self-Play】
│ ├── 训练阶段:利用MCTS和PRM标注产生数据【数据增广】
│ ├── 推理阶段:利用Beam/Tree Search或Best-of-N【组合策略】
│ └── 尚存大规模计算与工程优化挑战【Speculative Decoding等】
└── 7 结论与展望【知识收敛与下一步方向】
├── 7.1 Scaling Test-Time与模型自身能力需结合【双管齐下】
├── 7.2 小模型+推理搜索可在中等难度题上节省参数但难解高难度【取舍】
├── 7.3 自动化PRM标注与MCTS为解决复杂多步推理提供思路【过程监督】
├── 7.4 自我改写、对抗自博弈、多模型协同将成未来趋势【不断迭代】
└── 7.5 工程落地尚需优化大规模计算与搜索开销【并行化与缓存管理等】
一、起点:预训练规模触顶与「推理阶段(Test-Time)扩展」的动机
-
预训练规模的瓶颈
- 以 Llama 等模型为例,随着参数规模增大,预训练在通用语料上的收益递减,预训练的 Scaling Law(规模定律) 面临“天花板”。
- 这驱动了研究者将关注点从“如何进一步放大预训练”转向“如何在**推理阶段(Test-Time)**投入更多算力来提升模型表现”,即 Scaling LLM Test-Time(推理阶段扩展)。
-
“推理阶段扩展”意味着什么?
- 传统的推理:给定一个提示(prompt),模型一次性或顺序地生成答案,往往用 贪心(Greedy)或少量 Beam/Search 采样等常规方法,一次性地生成答案。
在这种模式下,你主要依靠的是“模型本身的巨大知识与能力”来一次性就把问题解对。
推理阶段扩展(Scaling Test-Time) 则不再止步于“一次性”生成答案,而是允许更多计算、迭代、搜索或验证:
- 多路并行采样(Best-of-N):对同一个问题,让模型尝试生成 N 个不同的结果,然后通过某种评分标准(可能是一个验证器/判题器/外部测试)选出最优解。
- 带验证器(Verifier)的搜索:先生成不同候选答案,用一个内置或外部的验证模块对这些候选答案进行打分筛选,不断迭代改进。
- 自改进(Self-Improve):模型自己对自己的输出进行评估与反思,再次修改答案,如“先答一版,再根据反馈或自检做第二、第三轮修改”。
与其把更多算力用在“训练/模型规模”上,不如把算力放到“推理时的搜索/迭代过程”上,也许可以在某些(尤其是难度中等或较简单)任务上取得与“大模型+一次性推理”相当的效果。
“推理阶段扩展”简单来说就是:让模型在测试/推理时不仅做“一次性解码”,而是可以多轮生成、搜索、筛选、验证,或者配合其他外部工具(如判题器、编译器、搜索引擎等)迭代改进答案。
二、Test-Time 扩展的核心思路与常见手段
在推理阶段“增加算力/改进策略”的做法,核心是**Proposer(提议者) & Verifier(验证者)**框架下的各种搜索/重排策略。
-
Proposer(提议者)
- 主要指大模型本身(或多模型体系中的“生成”部分)。
- 负责在每一步“提出”一个可能的推理步骤或整个最终答案。
-
Verifier(验证者)
- 可以是一个外部模块(Reward Model / 评分模型 / 判题器 / 符号检查器 / 真实环境执行器 等),也可以是另一个语言模型或同一模型在不同模式下对答案进行评估。
- 用来评价 Proposer 的输出质量,打分或给出“对/错”判断。
- 不仅可以对“最终结果”打分,也可对“中间过程”进行逐步评估。
这一框架能够把许多不同的推理阶段增强方法,统一到“(Proposer)做生成 + (Verifier)做评价+筛选”的闭环中去。
整体我们可以用“Proposer & Verifier”这一统一视角,将不同方法分为:
- 只关注最终结果 (ORM / Outcome Reward Model) 的策略
- 关注中间过程 (PRM / Process Reward Model) 的策略
- 自改进 (Self-Improve) 这一更迭代化的策略
1. Proposer & Verifier 统一视角
- Proposer(提议者):通常是语言模型本身,负责“生成”可能的答案路径;若是多步推理任务,就会依次生成步骤 (step by step)。
- Verifier(验证者):对已有生成进行打分或判断,必要时回退错误步骤或筛选最优答案。
- ORM (Outcome Reward Model):“结果级别”的打分模型,只关心最终答案对不对/好不好。
- PRM (Process Reward Model):“过程级别”的打分模型,可对推理过程中每个步骤给出奖励信号。
2. 只看最终答案:Best-of-N、Best-of-N Weighted
Best-of-N(或 Rejection Sampling):一次性采样 N 条回答,用一个判别方式(如奖励模型或统计一致性)选出最优。
-
做法:
- 从同一个提示 (prompt) 出发,令 Proposer 并行或快速生成 N 条候选答案。
- 用 Verifier (通常只对最终答案做判分) 选出一个最高分 / 最优解输出。
-
优势:
- 易实现:只需做 N 次推理,然后统一打分或做简单判别/投票。
- 可并行:多条候选的生成基本上可以并行进行,不耽误时间。
- 对简单中等难度任务有效:多次随机采样往往能找到相对更好的解。
-
劣势:
- N 增大时收益递减:当 N 较小时,能显著提高正确率,但再大时边际收益不明显。
- 无法对过程中的“局部错误”进行精细纠正:只能在最终结果里挑优,没有指导生成过程的机制。
Best-of-N Weighted:不仅只选最高得分的单条,还可做多条候选分数的加权或投票来决定最终输出。
-
做法:
- 生成 N 条答案后,不是只选最佳,而是对每个答案进行评分,根据分数做加权融合(例如投票、概率加权)来得到最终答案。
-
典型场景:
- 当答案可以用某种“统计方式”集合(例如多次采样得到多个自然语言解释,再做少数服从多数的融合)。
- 或者在抽象问答、情感分析任务中,把多条候选的预测结果加权后得到更可靠的输出。
-
优劣:
- 类似普通 Best-of-N,但在决策时可能更精细;需要有合适的“融合”方法,且并不适用所有需要精确唯一解的任务(如数学题往往只有一个正确解)。
3. 关注中间过程:引入过程奖励模型 (PRM)
- 为什么需要 PRM
- 结果级别(ORM)常见问题:只在最终答案对/错时给反馈,反馈可能过于粗糙不精细;对复杂多步推理来说,不知道哪个步骤出了问题。
PRM (Process Reward Model) 的优势:
-
能对推理过程中的每个步骤给出更细粒度的打分,从而在搜索时“及时纠偏”。
-
有助于在多步生成阶段筛选错误路径,保留正确路径,从而大幅减少无效探索。
PRM 数据如何标注?
- 人工标注 (OpenAI “Let’s verify step-by-step” 风格):让人对每步推理做“正确 / 错误 / 可接受”打分,用于训练 PRM。
- 自动化标注 (Math-Shepherd 思路):用蒙特卡洛采样/rollout 来估计当前 step 之后能走向正确答案的概率(reward-to-go)。
用 o1 Pro 生成 step-by-step 的标注:
- 二分搜索式高效标注 (OmegaPRM):在每条解题链上二分查找首个错误 Step,减少大量 rollouts。
传统的方法标注太多了,每个 step 都需要 N 次 rollout。
做了一个假设:如果答案是对的,那么之前的过程就是对的; 如果当前步骤答案是错的,后面的步骤都是错的。
rollout 就像树搜索中的“向前模拟”,用于判断从当前状态(某一推理步骤)出发,最终能否得到正确答案、可能的奖励是多少。
在推理过程中从某个中间步骤继续往后生成完整解答、并评估结果的过程。
因此,在 OmegaPRM 中,为了找出“最先出错的具体步骤”,我们可以用“二分查找”的方式反复进行“部分推理 + rollout 验证”。
之所以这么做,是为了减少对整个解题链做全量多次生成的开销,用更少的测试就能定位问题出在哪一步。
论文:Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters
PRM 在推理时的常见搜索
-
Best-of-N + PRM: 仍是并行地生成 N 条不同推理链,但这次对于每条链不只看最终结果,而是可以用 PRM 对过程评分,最终选出过程分数最高的链。
-
Beam Search + PRM: 逐步扩展束宽,每一步都要用 PRM 给每个分支打分,然后保留 top-k 路径继续扩展,直到生成完整解;再选最高分作为最终答案。
-
Lookahead Search: 类似 Beam Search 的前瞻式搜索,也是一种“多步后评估”的策略。
- 可以在每一步都做前瞻式多分支扩展、估算后续可能的最高得分,挑选最优走向。
- 这种方法在推理层面更像 MCTS(蒙特卡洛树搜索)思路,过程奖励就像模拟中棋局评分一样。
适用场景与优劣
-
适合:
- 多步推理、过程可能非常冗长的复杂任务(数学题、程序生成、逻辑推导等)。
- 需要在中间就能识别关键错误,避免浪费大量计算在错误路径上。
-
挑战:
- 需要有一个可靠的过程奖励模型,如果 PRM 自己也经常误判,就会把搜索带到错误方向去。
- 训练 PRM 的高质量数据通常获取成本也不低。
4. 自改进(Self-Improve / Revision)的思路
为什么需要 Self-Improve?
语言模型单次输出容易埋下局部错误,加上缺乏中间纠偏环节,导致在复杂任务上难以保证答案正确性。
- 单纯依赖搜索,若模型本身推理能力有限,还是无法触及高难度问题的真正正确解。
- 搜索策略更多是“从头到尾”进行多次生成和筛选;
- 自改进则偏向在生成后对已有答案进行后续修订或重写。
- 有时模型一次性产物并不是“完全错误”,而是局部有 bug,借由“再思考 / 再校正”可以修正。
- 自改进也可以看做是:反复调用 Proposer,每轮输入都带着前一次的输出与错误信息,让模型“对症下药”地修改答案。
人类做复杂决策时倾向于“分阶段测试+迭代修正”,而非一次性给出终极答案;这种模式可不断聚拢正确解。
高难度任务对“局部错误的容忍度”极低。
一旦多步链式推理中任何关键节点出错,就会导致后续推导全面崩溃;如果没有后续改正机制,最终结果几乎必然出错。
语言模型在一次性推理中难免犯下局部错误,高难度任务对错误的容忍度又极低;只有通过多轮修订与验证,才能在实践中有效地将正确率推高。
数据采集 & 训练
- 有时要专门训练一个 “Revision Model”,学习如何在给定“错误回答”的上下文下进行改写或修正。
- 输入是“初版答案 + (可选)错误标注 + 原始问题”,输出新的改进答案。
采集数据可结合并行 (parallel) 与顺序 (sequential) 的多次生成,筛出最优修正答案,用于 SFT 或 RL 训练。
- 让模型生成多条答案(可能包含错误)。
- 收集人类或自动判题器对错误点的反馈。
- 将 “(初版答案, 错误点, 原题)” -> “(正确答案)” 这一过程作为监督训练样本。
- 或者在 RL 场景下,通过多次探索与修正,以逐步提高最终得分。
- 优点:
- 克服小模型的“记忆不足”:如果它在第一版输出中体现出了部分思路,后续可以保留正确片段、修正错误处。
- 相同推理 FLOPs 下,往往比单纯多路采样 (Best-of-N) 效果更好:因为 Revision 是有针对性地修补错误,而不是纯粹随机多次输出。
- 缺点:
- 工程复杂度更高:需要有合适的“反馈机制”告诉模型哪里错了(Verifier 筛选规则),以及如何把旧答案嵌入新上下文再生成(如何将错误答案融入新 Prompt);“多轮对话式”场景更适用,但实现需要更好的 Prompt 设计和场景管理。
- 对高难度任务仍有瓶颈:如果问题本身需要远超模型容量的大量知识或高级推理能力,即使能不断修订,小模型也可能反复出错、难以真正摸到正确解。
三、小模型 + 大推理 VS. 大模型 + 普通推理
-
引入 Exchange Rate
- 为了公平比较“小模型 + 增加 k 倍推理算力”与“大模型 + 普通推理”,需要给预训练和推理分别计入 FLOPs,求解“相同总计算量”下两者的表现差异。
-
结论
- 对“中低难度”的题目:小模型只要投入足够多的推理算力(多次生成+验证+搜索+修正),可以逼近甚至超过大模型的贪心解码水平。
- 对“高难度”题目:小模型的“推理阶段扩展”收益大幅下降;本身的推理能力不足时,完全堆叠推理算力仍无法弥补先天差距。
四、进一步:MCTS 与 AlphaZero-Like 搜索
当我们谈到“树搜索”在 LLM 推理中的应用时,会联想到下列主题:
-
蒙特卡洛树搜索 (MCTS)
- 在围棋(AlphaGo、AlphaZero)中,MCTS 能基于“状态、动作、价值估计”等机制高效搜索。
- 若把多步推理问题视为“从空白状态开始,一步步产出文字(动作),直到答案状态”,理论可引入 MCTS。
-
AlphaZero-Like Tree Search 与 LLM
- 不同之处在于语言生成的动作空间极大(往往是 Token 级别),导致计算代价极高;可能需做Step 级搜索或人工限制动作空间。
- 也可结合 PRM (过程价值估计) 取代围棋中的价值网络;在推理中进行搜索回溯、剪枝。
- 若再做 RL 训练 (PPO/Policy Gradient) + MCTS,就对应“AlphaZero-LLM”的思路(比如 OpenR 框架、AlphaMath 等)。
-
工程挑战
- 超大动作空间的并行搜索需要精心的缓存管理(KV-Cache)、加速解码(Speculative Decoding)等。
- 算力投入非常庞大;更多处于学术前沿或大厂内部探索阶段,尚未广泛普及。
复现 o1 的方案:
借助 MCTS 来在推理阶段搜索最优解答,并通过一个“Value 模型(或称 PRM/Reward/价值头)”对生成进行打分。
这与“AlphaZero-Like Tree Search”非常相似。
AlphaZero-Like MCTS + 一个Critic值模型,只不过将“围棋局面”换成了“LLM 逐步生成的文本状态”,把“赢/输”换成了正确/错误或reward。
MCTS(Tree Search) + (过程)价值模型来进行多步推理搜索。
五、PRM 在推理与训练中的多种用途
-
推理阶段
- PRM + Beam Search、Best-of-N、MCTS 等,用来实时筛选“下一步生成”或最终答案;精细化过程监督比只看最终结果更可靠。
-
训练阶段 (替换 RLHF 中的 ORM)
- 传统 RLHF 用人类偏好数据训练一个 Outcome Reward Model (ORM),对完整回答打分。
- PRM 则提供每个中间步骤的奖励,更像强化学习里的 dense reward,有时能加速收敛并减少“错误信息的回传延迟”。
-
数据合成
- 通过 PRM 对大量采样进行打分,把得分高的中间推理轨迹当作训练数据(自监督或 RL),实现自动数据增广。
- 相比人工逐步标注正确/错误,自动化方法可 Scale,但需要可靠的自动标注(如 Math-Shepherd / OmegaPRM / 结合外部执行器等)。
六、Self-Play 与 Self-Improve
-
自我对弈 (Self-Play)
- 类 AlphaGo-Zero:没有人类棋谱数据,完全通过模型自己对自己对弈产生数据并迭代训练。
- 对 LLM 而言,“自我生成问题 + 自我解答”或“多模型交互”,可在代码/数学等有确定性检验场景中滚雪球式地产生训练数据。
-
自我修改 (Self-Improve / Revision)
- 更聚焦“拿到错误回答后,如何在新 Prompt 中集成这些错误提示或思路,进而得到正确答案”;
- 可以不使用 RL,而在推理时多轮迭代生成(修正),或专门训练“Revision Model”。
七、OpenR 框架与综合视角
链接:https://github.com/openreasoner/openr
- OpenR:一个开源的 LLM 高级推理研究框架,尝试把“过程奖励(PRM)+ 搜索 + 自我迭代训练”结合起来。
- 训练阶段:
- 用 MCTS / PRM 做数据增广(收集每个 step 的“正确性/成功率”),得到更多高质量步骤级监督;
- 训练出 PRM (value function);
- 对语言模型则可采用 PPO/Policy Iteration,在搜索生成的数据基础上进一步训练。
- 推理阶段:
- 也可以结合 PRM 指导“哪条解题路径”继续扩展;
- 对于最终多条候选答案,则可用 Majority Vote / RM-MAX / RM-Vote 等方式选出最佳。
八、整体结论与思考
- Test-Time 扩展(搜索、并行采样、迭代修正) 对中等难度问题能带来显著收益,甚至可在相同 FLOPs 下让“小模型 + 大推理”超过“大模型 + 贪心”。
- 纯推理扩展的极限:若任务过难,模型本身的推理能力不足时,光靠推理阶段搜索/修正也无法弥补差距。
- 过程奖励(PRM) 在数学、代码、程序执行等确定性场景有显著优势,极大提升了搜索的效率和可靠性;但需要精巧的数据标注或自动标注方案来支持。
- MCTS/AlphaZero-Like 思路虽然在理论上令人兴奋,但在自然语言生成中动作空间极大,真实落地面临高昂算力和工程难度,需要探索各种加速/剪枝/并行技术。
- 自改进(Self-Improve / Self-Play) 是另一条重要路径:借助迭代式或多模型交互,用自生成数据不断细化模型推理能力,摆脱对人工监督的强依赖。
- 从研发角度看,这些方法通常既可用于推理阶段(提升场上表现),也可用于训练或数据增广(提升模型本身实力),两者往往结合更佳。
4 种解法拆解
┌── 子解法 A: 并行采样 (N 条候选)
│ ↓
用户问题 --> 语言模型 --> 验证/打分 (ORM/PRM) --> 选出最优回答
│ \
│ └─> ① Step-wise Beam Search + PRM (子解法 B1)
│ / \
│ / \ Lookahead Search or其他剪枝 (B2)
│ ↓
│ 得到若干条多步路径(选最优)
│
└── 子解法 C: 多轮revision自修正
↓
(可结合 A、B 的采样或搜索,进行多次迭代修正)
[可选] 子解法 D(MCTS/AlphaZero-like Search + 自对弈/强化训练)
- 训练时:搜索结合价值/策略网络,不断迭代
- 推理时:执行 MCTS 进行深度扩展
从整体来看,“解法”可概括为:在预训练规模触顶时,通过「在推理阶段(Test Time)对语言模型进行多种扩展和改进」来提升复杂推理能力。
为便于拆解,我们将这个大解法拆成以下四大子解法(每个子解法又可以再细化成更小的子步骤,直到不可继续拆解):
子解法 A:纯增加推理计算量(“多样采样 + 验证”)
- 对应特征:依赖现成的大语言模型,不重新训练或只做极少量微调;主要通过在生成时多次采样、然后用验证器筛选结果,来提高正确率。
- 核心思路:一次提问时,从同一个 Prompt 并行生成 N 条答案(常称为 Best-of-N 或 Rejection Sampling),然后利用判别模型(Verifier)选出最优回答。
- 为什么可行:
- 语言模型的输出分布是随机的,多生成若干候选后,总有一部分答案可能更接近正确解。
- 验证模型(例如基于 Outcome Reward Model/Process Reward Model 的打分)可以帮助挑出更优回答。
- 进一步细分:
- Best-of-N / Rejection Sampling:生成 N 条完整答案,只在最后一步用奖励模型挑选。
- Self-Consistency:采样多条 Chain of Thought 答案,再统计投票出现频率最高的最终结论。
- Best-of-N Weighted:不仅看哪个答案得分最高,也可以看答案族的“加权”或“平均得分”来选出最后答案。
- 举个例子:做一道数学题,设置 N=16 并行解码,最后仅将 16 条解答都传给一个判分器(ORM 或 PRM 的最后一步分数)来打分,最高分的就是最终回答。
进一步的子级拆解:
- Proposer(提议者):语言模型本体负责生成。
- Verifier(验证者):可以是 Outcome Reward Model (ORM) 或 Process Reward Model (PRM)。
- 如何聚合:
- 只看最后一步打分(Last-step 的奖励);
- 或者看整条推理链各步奖励之和,再挑出累计最高者。
子解法 B:过程奖励模型(PRM)与搜索式推理(Beam Search / Lookahead / 等)
- 对应特征:在多步推理中,每一步都可能对最终正确性产生影响,需要更密集的“过程级”奖励来指导搜索。
- 核心思路:
- 将问题拆解为多步解答,每步解答都用 PRM 来打分(即对当前解答步骤的“合理性”/“正确性”进行二分类或多分类),分数越高表示这一步走得更正确。
- 利用搜索(如 Beam Search、Lookahead Search),在每一步都根据 PRM 分数筛选或扩展最优路径。
- 为什么可行:
- 对于复杂推理而言,最终答案的对错并不足以指导整条推理链;过程中若走偏,最后一刻才给奖励会导致搜索开销大。
- 过程奖励可以让我们“剪枝”掉错误或不靠谱的中间步骤,缩小大规模搜索空间。
- 进一步细分:
- Beam Search + PRM:每个搜索层保留 top-k 条高分 partial 解答再往下展开,直到抵达终止。
- Lookahead Search:在当前步先 rollout k 步,得到未来 k 步的价值,再用该价值回传到当前节点决定扩展方向。
- OmegaPRM:针对如何自动化给每一步打标注的效率改进(如二分搜索找“首个错误步”)等。
- 举个例子:数学题共 5 步推理,每一步都可并行采样 3 个子分支,然后用 PRM 打分,保留得分最高的若干条分支继续生成,最后在所有完整路径中再选出分数最高的一条做输出。
子解法 C:多轮 Revision / Self-Improve(自修正)
- 对应特征:同一个模型在推理阶段就能自我质疑、修正错误,逐轮迭代地提高输出质量;或借助外部提示来修改回答。
- 核心思路:
- 先生成一个初步答案 (y₁),如果判定不够好,就把 (x, y₁) 作为新的输入上下文,再次调用模型生成修正后的答案 y₂;
- 这一修正过程可以多次叠加,每一轮都基于前一轮回答中暴露的错误信息来 refine。
- 若配合训练(如 SFT 或 PPO)让模型学会“如何读懂自身错误并改进”,则称为 Self-Improve (或 self-correction)。
- 为什么可行:
- 二次以上回答使得模型可以显式或隐式地“改变输入分布”,减少重复错误;
- 在一定程度上模拟了人类做题时的“回看、反思、再改写”的流程。
- 进一步细分:
- Sequential Revision:先顺序产生多轮回答 y₁ → y₂ → … → yₖ,每一轮都依赖上一轮答案。
- Parallel + Iterative:可并行产生多条解答链,各链再进行多轮自修正,然后用 Verifier 选最优结果。
- Self-Critique / CriticGPT:将“批评角色”与“生成角色”在对话里拆分,由批评者显式标注错误原因,生成者再修正。
- 举个例子:如果第一次回答漏考虑某个约束条件,模型在第二轮就可以从“第一轮答案+提示错误点”出发,做针对性改写。
子解法 D:MCTS / AlphaZero-like 思路(结合自对弈 / RL 训练)
- 对应特征:借鉴 AlphaGo、AlphaZero 这种“搜索 + 神经网络”范式,模型既可在训练时用自我博弈(Self-Play)不断迭代变强,也可在推理时先使用蒙特卡洛树搜索(MCTS)来决定最优路径。
- 核心思路:
- 将问题的多步推理视为一棵树,状态为“已生成的部分答案”,动作为“继续生成的下一步解答”。
- 借助 MCTS 的“多次模拟 + 价值回溯 + 策略更新”找到高价值路径。
- 在训练期间,模型策略网络(Policy)与价值网络(Value 或 PRM)互相促进;在推理阶段则执行若干次树搜索来提升精确度。
- 为什么可行:
- MCTS 在复杂决策空间里能有效探索,并避免局部贪心;
- 过程奖励或价值网络可以像 AlphaGo-Zero 一样提供“当前状态的胜率估计”,从而有效扩展优质节点。
- 进一步细分:
- AlphaGo 式:先基于外部示例(相当于人类棋谱)做初步监督,再在搜索中逐渐优化;
- AlphaZero 式:纯自对弈起家,多轮迭代增强;
- rSTaR / OpenR:实际工程实现中往往需要减少动作空间(比如只在“step”级别进行搜索,而非“token”级别)。
- 举个例子:给定一个推理任务可以走 5 步;每步可以选 3 种思路(动作)。MCTS 反复模拟→ 回溯更新每个节点的价值 → 最终选出在搜索树中综合价值最高的整条推理路径。这种自对弈式数据还可继续拿来做 RL 训练,让策略网络更“懂”如何选对分支。
- 子解法之间的逻辑链条与结构
整体上,这四类子解法更像一个“网络”式的选择树,而不只是单线的链式流程。
- 子解法 A(纯增加并行采样 + 最终挑选)是最直观、最容易上手的做法;
- 子解法 B(PRM + 搜索)实际上可以接在子解法 A 之后,用更精细的过程级验证来剪枝不良路径;
- 子解法 C(多轮 Revision)则可与 A、B 并行或结合,即既能在每一轮生成中多样采样,也能对每一步做 PRM 评估,并在不满意时再回到模型进行“修正扩展”;
- 子解法 D(MCTS / AlphaZero-like)则可视为在子解法 B 的搜索思路上,进一步引入 RL 和自对弈来迭代强化模型本身。
- 分析是否有隐性方法(关键步骤没有直接被命名,但在解法中扮演重要角色)
在以上所有子解法中,往往会出现一些**“并未在文献标题或常规名词”中直接出现,但确实起重要作用的做法**。
这里列举几个常见的“隐性方法”:
-
动态 Prompt 改写
- 在子解法 C(Self-Improve)中,第二轮生成时并不仅仅是简单地“在旧回答后再写一句”。往往我们会对 Prompt 进行更有针对性的改写,如明确提示上一轮错误原因或让模型自我思考应该如何修正。这种提示工程(Prompt Engineering)往往是隐含的。
-
Answer Aggregation 策略
- 当 N 条答案相似度很高时,如何合并成一个最终答案?可能会用“加权投票”或“只要大多数一致就选这一项”之类,这些聚合步骤在论文中常常是一两句话带过,但对实际应用很重要。
-
解码加速手段
- 大规模并行的 Best-of-N、Beam Search、或 MCTS 都对推理速度有额外开销。实际落地时,可能会用到像 Speculative Decoding、分块 KV-Cache 复用、或者 VLLM 等库来加速大批量解码。很多时候这些工程手段在论文里并未详述,但在大规模部署中至关重要。
-
过程标签的自动化生成
- 比如 Math-Shepherd / OmegaPRM 中,利用蒙特卡洛 Rollout 或二分搜索去估计每一步正确率,这些自动标注步骤(用不同配置的并行采样)往往非常繁琐,但在文章中却被一两句概括为“自动得到 step-wise label”。这是一个典型“隐形方法”。
- 分析是否有隐性特征(不在问题或条件中,而是解题中间才显露)
许多“特征”只有在对推理链进行观察、或在搜索过程中看到某些现象时才会被我们意识到:
-
推理难度分级
- “题目难度”其实并非题面直接告诉我们,而是通过大量采样发现:LLM 对某些问题 100 次采样都无法答对,才推断这是模型所定义的“难题”。这可被视为一个“隐性特征”:它并不写在问题描述里,而是通过多次试错才显露。
-
路径一致性
- 在过程奖励模型 (PRM) 的多步验证里,如果第 k 步就出现了明显矛盾,后续步骤也大概率出错。这在搜索空间中是“隐性剪枝特征”:不在明面条件(比如题目)出现,却在生成过程中发现“已矛盾应终止扩展”。
-
PRM/ORM 对输入的敏感性
- 有时同一道问题,不同形式的提示(例如额外的解释文本、不同格式的中间步骤)会显著改变 PRM/ORM 的打分。这些差异并非题目本身的显式设定,而是推理中间过程对模型分数产生的“隐性影响”。
-
方法可能存在哪些潜在局限性
-
计算/资源开销大
- Best-of-N、Beam Search、MCTS 都会增加推理时的 Token 级生成量。一旦 N 或搜索深度很大,推理延迟和 GPU 算力都会成倍增加。
-
收益递减
- 对特别难的任务,纯粹堆叠推理算力(子解法 A 或 B)也未必能显著提升准确率;若模型本身 Reasoning 能力不足,再多采样也可能都错。
-
标注或验证器质量
- 如果使用 PRM,需要训练过程级奖励模型;但过程级别标注本就十分昂贵或难以自动化(虽然有 Math-Shepherd/OmegaPRM 等技巧,也依旧很耗时)。标注质量不足,会导致 PRM 无法准确筛选。
-
Prompt 稳定性
- 自修正 (Self-Improve) 强烈依赖模型对自己错误的“觉察力”,有时可能出现“越改越糟”或再次重复同类错误的情况。Prompt 稍微改写,可能导致答案完全变动。
-
策略空间过大
- MCTS/AlphaZero-like 方法如果直接在 token 级展开,会面临天文数字的分支,必须要做降维或动作空间离散化,否则搜索难以进行。
综上所述,“Scaling LLM Test Time + 搜索式推理 + 自修正 + RL 训练”构成了一个大的“多路并行”网络解法,不同子解法之间可以组合、互补或为对方提供数据和反馈。
- 子解法 A(纯多样采样 + 验证)最易上手,但在复杂推理上潜力有限;
- 子解法 B(PRM + 多种搜索)可更精准筛选,但需要过程奖励建模;
- 子解法 C(Revision / Self-Improve)提高了模型在推理阶段的动态纠错能力;
- 子解法 D(MCTS / AlphaZero)将以上方法进一步放大,允许训练和推理的搜索循环结合,构造自对弈式迭代进化。
在实际应用中,我们往往会综合这些思路,并辅以必要的“隐性方法”(如 Prompt 改写、解码加速、自动标注等),来根据任务的规模与难度做取舍。
每种方法也都伴随着相应限制,主要集中在算力、标注和搜索空间规模这三大方面。
o1 医疗:树搜索
论文:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning
DeepSeek-R1 所谓“慢系统”,本质是让模型自然写出超长推理链 (因为 RL 回合数够多,Reward 主要看最终对错+格式),相当于一种纯后验策略:一边生成 COT,一边计算结果能不能通过,让模型在训练中逐渐形成了“先多想一会再回答”的习惯。
过程里会自然涌现出非常长的 CoT、reflection、检测错误等高级推理特征。
其训练方式不依赖过程级别奖励 PRM,也不做 MCTS + Value 的自我搜索(上文方法)。
- 训练思路与适配度
- DeepSeek-R1 与 HuatuoGPT-o1 均属于“让模型直接学习多步推理链”的思路,前者靠大规模 Outcome-based RL,后者靠“生成正确思路+Verifier”的多阶段监督与RL。
- Baichuan-M1-14B 强调的是“多阶段数据+ELO/TDPO/PPO”全流程优化,通过分段式的训练与对齐,从语言通识到医学进阶,层层递进并注重思维链优化,是更“系统化”的多步推理实现。
- O1 Replication 偏向“推理时增强”,适合直接拿已有较强模型做少量改动,快速提升答案质量;若底层模型弱,就收效有限。
- MCTS+过程价值 理想最优,但几乎没有大规模工业化先例,且对医疗数据、搜索框架、实时评估等要求过高。
- 数据需求与实现难度
- DeepSeek-R1 最依赖大规模、可自动判对错的数据,且需要庞大算力来支撑RL反复训练。
- HuatuoGPT-o1 与 Baichuan-M1-14B 均在可控规模的医疗数据上即可(几万~十万量级),但需保证数据或偏序对(preference pairs)质量、训练流程成熟。
- O1 Replication 在训练上几乎“零改动”,但基础模型需要先有足够的医疗知识。
- MCTS+过程价值 在定义过程Reward与搭建搜索系统上,难度极高。
- 推理性能与可解释性
- DeepSeek-R1 若训练充分,推理性能可极高;但需要保证自动判分“对错”足够准确。
- HuatuoGPT-o1 已在多项医疗基准测试中表现不俗,一次生成的长链思路也易于解释;在真实诊断场景中有一定可行性。
- Baichuan-M1-14B 通过多阶段的思维链优化与偏好对齐,兼顾推理的连贯性和用户偏好;在通用与医疗场景都有较好表现,且仅 14B 参数就能体现较强效果,推理效率和可解释性兼具。
- O1 Replication 多次抽样投票虽能提升准确率,但推理时开销上升,长思路的合理性也要看底层模型能力。
- MCTS+过程价值 理论上可最优且过程可解释,但在医疗复杂度和实现难度面前,尚难大规模落地。