游乐游手机版
首页/AI热点日报/热点详情

OpenAI o1整体框架初探:Test-Time Scaling Law提升逻辑推理能力

类型:热点整理2026-06-26
前阵子OpenAI推出的o1模型,在逻辑推理方面表现格外亮眼,迅速成为业界焦点。大家自然开始深挖它背后的训练策略。o1的官方介绍和演示细节这里不再赘述,直接查阅官网即可——其实内容很精简,因为核心技术被很好地封装了起来。不过,最近在研究o1的训练方法时,你一定会频繁看到以下几个关键词: Test I

前阵子OpenAI推出的o1模型,在逻辑推理方面表现格外亮眼,迅速成为业界焦点。大家自然开始深挖它背后的训练策略。o1的官方介绍和演示细节这里不再赘述,直接查阅官网即可——其实内容很精简,因为核心技术被很好地封装了起来。不过,最近在研究o1的训练方法时,你一定会频繁看到以下几个关键词:

  • Test/Inference-time scaling law:将计算资源投入到推理阶段,从而增强模型的推理能力
  • Post Training:通过后训练来进一步优化模型
  • PRM/ORM:基于过程或结果的奖励模型
  • CoT:思维链(Chain-of-Thought)
  • 强化学习、self-play与MCTS(蒙特卡洛搜索树算法)

这些术语单独理解并不难,但组合在一起就容易让人困惑。而且每个词背后的原理,比如“什么是test/inference-time scaling law”?为什么说把算力花在推理阶段?这样做为什么能产出更好的结果?它和post training又有什么关系?很难在脑海中形成一个清晰的流程图。

在梳理与o1相关的研究时,我接触到了不少资料,发现它们大致可以归纳为两类:

  • 框架类研究成果:可以理解为o1训练算法背后更宏观的框架,引入了Test/Inference-time Scaling Law等基础思想,并给出了一些简单通用的实践方案。
  • 细节变种类研究结果:在框架之内,或者受框架启发而衍生出的算法变种(发表时间不一定晚于框架)。说白了,各家有各家的具体做法。

本文重点解读框架类研究成果,筛选出两篇具有代表性的框架文章:

  • Let's Verify Step by Step (OpenAI)

    • Hunter Lightman, Vineet Kosaraju, Yura Burda, Harri Edwards, Bowen Baker, Teddy Lee, Jan Leike, John Schulman, Ilya Sutskever, Karl Cobbe
  • Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters (Google DeepMind)

    • Charlie Snell, Jaehoon Lee, Kelvin Xu, A viral Kumar

本文以第二篇文章为主线,穿插第一篇文章的核心内容进行讲解。后续会单独写一篇解读Let's Verify Step by Step。再往后,我会挑选一些有趣的细节变种类研究结果(比如与o1相似的算法),结合源码(如果有的话)做深入分析。

这两篇文章的大框架不难理解,但细节上不太好把握。所以我尽量根据自己的经验对细节加以解读,力求还原训练过程的方方面面,同时重新拆解了原始论文,从一个【框架】的角度来阐述。另外,在阅读本文之前,建议先看OpenAI o1技术报告中输出结果的demo,了解什么是“模型的思考过程”。

一、什么是Test/Inference-time Scaling Law

设想一下:我们手里有一个基础模型(称为generator),但它的逻辑推理能力(比如解数学题)比较差,该如何改进?再具体一点,不考虑数据集成本,假设手头的GPU算力(FLOPs)有限,该怎么使用它,才能让模型最终推理出更好的结果?

一个比较直接的想法是:把算力花在pretrain阶段,给模型注入更多数理逻辑的预训练知识。比如使用更好、更多的代码和数学数据,或者扩大模型参数规模。这个做法源于大家熟悉的scaling law(准确说是pretrain-time scaling law)。

但阅读OpenAI o1技术报告时发现,它把算力更多地用在了两个地方:

  • 用在了RLHF训练上(post training)
  • 用在了模型的推理阶段(Test/Inference)

详情可以参考o1报告中的这张图:

  • 以前为了提升逻辑推理能力,把算力都花在pretrain阶段,由此诞生了pretrain scaling law。
  • 现在已有产品证明,把算力花在post training和inference上,推理能力提升更大,也就是说存在一个Test/Inference scaling law。
  • 正如pretrain scaling law受模型参数和训练数据影响一样,Test/Inference scaling law也必然受某些因素影响。这些因素是什么、如何影响,就是本文要探索的内容。

不过等等,你肯定会问:

  • 问题1:一般来说模型效果由训练阶段决定。pretrain或post training能提升推理能力可以理解,但inference阶段是怎么提升的?把算力用在inference阶段到底是什么意思?
  • 问题2:post training和inference是两种独立的提升方法吗?可以结合使用吗?

下面我们来循序渐进地回答这两个问题。

把算力用在inference阶段,就是说在不动已训练好的模型的情况下,只靠优化推理方法来提升生成效果。这又分为两种情况:优化推理输入和优化推理输出。

1.1 优化推理输入:prompt

这个方法大家都很熟悉。比如原来模型吃一个问题直接吐出答案,现在想让模型像人类一样「步步思考后再回答」,也就是生成结果里包含思考步骤+答案。我们可以在prompt里给例子,或者通过多轮对话引导模型think step by step。相关论文:

  • Chain-of-Thought Prompting Elicits Reasoning in Large Language Models (Jason Wei等)

prompt越详细,多轮引导越多,模型就越有可能产出更好的结果。更多的token意味着推理阶段需要更多算力,这就是「把算力花在推理阶段」的具体体现之一。

1.2 优化推理输出:revise output distribution

但优化输入还不够直接——难道每个问题都要精心设计prompt或手动诱导?能不能让模型吃下问题后自动做CoT?

也就是说,我们希望模型吃下一个问题后能自主产出这样的输出:

attempt1 -> attempt2 -> attempt3 -> ... -> attempti -> answer

每个attempt包含多个中间步骤steps和最终答案,模拟人类思考:先做一个attempt,发现问题,再做另一个attempt,直到找到答案。

怎么让模型做到这一点?直观的做法是:如果有带标签的数据:

problem -> attempt1 -> ... -> attempti -> answer

不就能直接训练了?训练方法有:

  • 解法1:直接做SFT,把最正确的attempt放在输入序列最后当label训练
  • 解法2:用类似RLHF的方法,先训练一个奖励模型,能对每个思考步骤做评估,然后指引模型步步搜索,每一步找到最佳思考步骤,最后找到答案

这两种解法从训练方法上都算post training,也就是把算力花在post training上来提升逻辑推理能力。

但本文的标题是「把算力花在inference上」,inference体现在哪里?再仔细分析两种解法:

  • 假设用解法1或解法2 post training好了模型,现在做推理。模型吃问题产出中间结果和答案,但你能保证这些结果一定是最好的吗?
  • 如果有一个能评估中间步骤好坏的verifier(比如解法2中的奖励模型),那么在使用post training过的模型做推理时,就能用它指引模型步步产出更好的结果。比如对一个问题采样多个attempts链,从中找出最好的;或者在单个attempts中找到最好的attempt。
  • 或者说,在post training阶段就用verifier指导模型自动化产生高质量训练数据(这是inference步骤),基于这些数据做对齐,那么或许就能直接信任post training的结果。

所以,「优化推理输出」部分,既可以把算力全部花在post training上,也可以花在post training+inference上。从o1技术报告看,它选择了后者,同时post training选了某种基于强化学习的方法(o1在pretrain阶段应该也有变动,后文会通过实验数据给出猜想)。至此,问题1和问题2都回答清楚了。

基于这些理解,我们大概可以勾勒出【框架】的样子:

  1. 首先,引导模型从「只产生结果」变成「同时产生中间步骤和结果」,这个过程叫做post training。可以基于强化学习,也可以只做SFT微调。可以只关注格式(是否产出中间结果),也可以同时关注格式+中间结果的质量。
  2. 其次,训练一个能评估中间结果的verifier,这算post training的一部分。verifier既可以用在基于强化学习的post training中(但不一定是唯一价值评估模型),也可用在第3步的inference阶段引导搜索。
  3. 接着,设计一种搜索方法,根据verifier返回的中间结果评估分数,在推理阶段指引模型步步搜索,使得每一步都最优化。如果在post training阶段只关注了格式,那么在inference阶段应用搜索方法就能更好地指引搜索结果;如果已经关注了格式+质量,这种方法也能更上层楼。同时注意,如果在post training阶段用了强化学习,这种搜索方法也能用在模型生产「经验数据」的阶段,从而自动化筛选高质量数据集再做对齐(避开人工标注,这不是必须的,但做得好时inference可能只需要在post training阶段使用,目的是筛选高质量数据,之后就不再需要了)。

有了对框架的理解,我们来看DeepMind基于此做的两种方案:

  • 方法一:利用PRM(Process-supervised Reward Model)指引搜索
    • post training:只引导模型对齐格式 + 训练基于过程的verifier(PRM)
    • inference:使用PRM指引搜索
  • 方法二:通过SFT直接改变模型的输出分布(Revise proposal distribution)
    • post training:通过SFT引导对齐格式 + 保障中间结果基本质量 + 训练PRM(这里直接用方法一的PRM)
    • inference:使用PRM指引搜索

方案一着重探讨训练PRM的一般方法和搜索过程设计。方案二给出了SFT型post training的例子。如果只看原始论文,容易把这两种方案理解为Test/Inference scaling law的两个方面。但在我们总结出的【框架】基础上,可以发现它们讲的是同一件事,只是描述侧重点不同。

【注⚠️⚠️:本节打破了原始论文的逻辑结构,含有大量主观理解,请选择性阅读】

二、方法一:利用PRM指引搜索

这种方法的主要目的是训练一个能评估过程数据的奖励模型(Process-supervised Reward Model,PRM,与之相对的是基于结果评估的ORM),来引导模型在推理阶段搜索出最佳答案。具体步骤:

  • 格式训练:先对模型做SFT,使其能产出带过程数据的结果
  • 训练PRM:训练一个能评估过程的verifier,称为PRM
  • 使用PRM指导搜索过程:利用训练好的PRM,引导模型搜索出最佳答案

我们来详细看看这三点。

2.1 格式训练

对于一个不做任何处理的基础模型,喂一个问题,它通常直接吐出答案。现在我们要引导模型在给出答案前花更多时间「思考」,也就是按照「思考步骤+回答」的格式返回。具体方法:

  • 自生产数据:在prompt中添加格式例子,引导模型按想要的格式产出结果。比如让模型按一个思考步骤(step)一行的方式输出(正如Let's Verify Step by Step论文中所说的)。将这些结果加入SFT数据集。
  • SFT:用这批自动化构建的SFT数据集微调模型,使其之后回答问题都能按照「思考步骤+回答」的方式生成。

注意,这个SFT过程只侧重于格式对齐,并不关注思考步骤的质量。质量是后续要考虑的事情。

2.2 训练PRM

现在模型已经能产出「思考步骤」数据了。我们需要训练一个能评估这些steps的奖励模型:PRM(Process-supervised Reward Model)。

有“supervised”就需要带label的数据,即对每个step给出真值评分。根据预算的不同(超级有钱人、有钱人、一般有钱人),有不同的构造方法。

(1)【超级有钱人】

  • 直接调用格式微调后的模型,喂问题产出一波「steps+回答」数据(量级庞大)
  • 让人工对steps打label(例如positive/negative/neutral)

这种方法除了贵和耗时,没有别的缺点。

(2)【有钱人】

能不能通过某种方式筛选,只把有价值的数据送给人工标注?

  • 调用格式微调后的模型,喂问题产出一波「steps+回答」数据(量级不大)
  • 过滤掉含有无效回答的数据(无法解析的latex公式等)。注意,无效不等于错误
  • 让人工对steps打label
  • 用标注好的数据先训练一轮PRM
  • 决定如何用PRM结果对“steps+回答”做整体打分,例如:
    • 连乘式(prod):PRM对每个step打分(离散标签下得分表示概率),所有steps得分相乘表示整体分数
    • 最小式(min):取所有steps的最小得分作为整体得分。直觉上某一步出错,整个逻辑链就可能出问题,所以取最坏情况
    • 最后一步式(last step):训练PRM时不是把单个step喂给它,而是把全部steps一起喂,拥有上下文关系。取last step的得分可以反映整体得分。DeepMind用的就是last step。

    prod和min是OpenAI在《Let's Verify Step by Step》中探索过的方法。方法之间没有绝对的好坏,取决于训练过程的设计。这里只强调需要制定一种规则,将PRM的单步打分映射成整体打分。

  • 再次调用模型,产出一波数据。用当前PRM按整体打分规则对“steps”整体打分。特别筛选出convincing wrong answer数据(整体得分高但答案错误),只把这些数据送人工标注。这种带有bias的数据对当前PRM具有迷惑性。
  • 重复上述过程,迭代式训练PRM。

总结:需要人工标注,但通过筛选把钱花在刀刃上。

(3)【一般有钱人】(重点关注)

完全不需要人工标注数据,每个step价值的真值label也通过自动化方法估计出来。具体做法:

  • 调用格式微调后的模型,喂问题产出一波「steps+回答」数据(量级按需)
  • 更具体:对每个问题采样N个samples(DeepMind设置N=16,一个sample就是一个steps+回答)
  • 过滤掉包含无效回答的数据
  • 通过N Monte-Carlo rollouts来预估每个step的价值。DeepMind文章没有给出具体的操作方法,根据经验可能的思路:
    • 假设某个sample为"step1 -> step2 -> step3 -> answer”,想分别估计step1~step3的价值
    • 以step1为例,以它为起点(问题+step1),继续采样N个samples,模拟N种“从step1出发到产出回答”的方案
    • 计算能得出正确answer的方案比例,作为step1的预估价值label(soft label)
    • 对step2和step3同理估算
  • 有了自动化模拟的step soft label,就可以用来训练PRM模型。DeepMind设置中PRM仍然是二分类模型,但计算loss时真值标签是非离散的。

2.3 使用PRM指导搜索过程

到了这一步,我们已经拥有以下模型:

  • 能按格式产出中间思考步骤的模型(generator),但中间步骤的质量没有保证
  • 能对中间思考步骤进行评估的奖励模型PRM(verifier)。再次强调,评估时不是只喂单个step,而是喂完整的「问题+steps」数据,因为逻辑思考步骤间有上下文关系。

现在我们要做的是:如何在不对generator继续训练的情况下,用verifier引导它搜索出最佳的「steps+answer」?也就是把算力花在推理阶段,用更长更复杂的推理流程(表现在generator上就是“思考”时间变长),让generator找到最佳答案。

接下来详细介绍和分析三种常用的搜索方案。 下图是概览,然后我们依次详解实现细节并分析效果。

额外提一句:PRM训练好后,需要制定规则函数,把单步打分映射成整体得分(DeepMind用last step,后面默认使用这种方式)。

(1)Best-of-N

Best-of-N因为简单直观,其答案准确率经常被当作baseline。方案:

  • 对一个问题采样N个samples(每个sample=steps+answer)
  • 调用PRM对N个samples的中间步骤整体打分(prod式、min式或last step式)
  • 选整体得分最高的那组steps+answer作为输出

还有一种改良的加权版Best-of-N weighted(DeepMind介绍得比较模糊,包含一些猜想):

  • 对一个问题采样N个samples
  • 检查这些samples的answer,假设共给出了x,y,z三类答案,每类分别有a,b,c个answers
  • 对答案是x的sample,最终得分 = (a/N) * PRM整体得分

(2)Beam Search

  • 对一个问题先并行采样N个step1(例如N=4)
  • 将每个“问题+step1”送入PRM获取step1得分
  • 取得分top M的step1
  • 对筛选出的step1继续生成,每个step1下再产出N个step2,重复上述步骤(评估step2分数时传入问题+step1+step2),直到达到搜索停止条件

(3)Lookahead Search

  • 对一个问题先并行采样N个step1(例如N=4)
  • 先不急着用PRM对step1们打分。而是对每个step1,让它继续往下生成K个step,再将最后一个steps送PRM打分,选分数最高的top M结果,返回其对应的step1。这些step1才是最终筛选的结果。
  • 从这些step1出发,重复上述步骤,直到达到搜索停止条件。

不难看出,lookahead search的核心是每一步筛选时先「向前看K步」,用K步后的收益来评估当前步骤的结果。所以beam search可看作lookahead search的K=1版本。

值得一提的是,如果你了解过MCTS(蒙特卡洛搜索树算法),会发现lookahead search和它在广义上非常相似。MCTS中同样是搜索最佳路径(策略),在搜索过程中使用随机因子通过多探索(explore)来预估每一步的价值,进而学习价值函数。而lookahead search + PRM中,训练好的固定PRM替代了MCTS中的explore过程,lookahead search只负责利用(exploit)。所以,lookahead search + PRM从广义上看就是一种MCTS方法。关于MCTS,我们后续文章会详细讲解。

2.4 如何选择最佳搜索方法

有这么多种搜索方法,该如何选择才能得到最好的搜索效果(即模型推理效果最优)?

直觉上猜想,影响搜索效果的主要因素:

  • 搜索预算(generation budget):采样数量N,即对一个问题做多少条并行采样。考虑N是因为GPU算力有限。
  • 问题难度(difficulty):简单问题可能不需要复杂的搜索方法,复杂问题则更需要设计好搜索方法来引导思考。

根据这两个直觉,作者做了两组实验:

(1)搜索预算对搜索效果的影响

先看左图,探究搜索预算对模型推理效果的影响。橘色代表best-of-N weighted,是基线。从图中可以观察到:

  • 当搜索预算较小时(并行采样N较小),beam search > best-of-N > lookahead
  • 当搜索预算较大时(并行采样N较大),best-of-N > beam search > lookahead,同时在beam search的M超参合理时,效果约等于best-of-N
  • 最复杂的lookahead搜索方法,表现基本垫底

直觉上的一些解释(论文说得比较模糊,包含主观理解):

  • 当N较小时,并行采样的N个结果可能很难直接命中最佳答案。这时通过更复杂的搜索策略(如beam search),从一次性采样变为步步精心选择,可能取得更好结果。N较大时同理可推。
  • PRM训练得足够好的情况下,搜索的每一步可以更关注利用当前信息(exploit),而不是探索未来(exploration)。正如前文所说,探索的本质是寻找更好的价值函数,但风险是随机性较强。所以复杂的lookahead方法在此场景下表现不佳。

(2)问题难度对搜索效果的影响

再看右图,探究问题难度的影响。bin1~5表示从易到难,每个bin下面有4根柱子,代表不同的搜索预算(4,16,64,256)。由于之前lookahead表现不佳,且beam search本身就能代表一种lookahead,作者剔除了lookahead。实验发现:

  • 中上难度(难度3、4):beam search > best-of-N
  • 简单问题(难度1、2):best-of-N > beam search(或略好)
  • 最难问题(难度5):两者表现都不好
  • 具体波动还会受到搜索预算的限制,可以细看实验图

直觉上的解释(含主观解读):

  • 在简单问题上,模型在pretrain阶段的知识已经能大概率正确回答,随机sample出的N个结果中大概率包含正确答案,没有必要引入复杂的搜索方法以及PRM做步步评估(评估过程是链式的,一个step评估错误可能带来连锁负面效果)。复杂问题同理可推。
  • 当问题特别困难时,「PRM+某种搜索方法」的后处理模式可能无法单独适用,或许需要提升模型在pretrain阶段的预训练知识。这让人想起OpenAI o1——它在复杂数学推理上效果很好,虽然官方说在inference阶段增加了算力(含强化学习的后处理方式),但可能也对base模型做了处理,比如增加了代码、数理逻辑知识的比例,或者改变了比例重新训练base模型。

(3)对搜索方法的小结

  1. 搜索效果(即模型推理效果)受搜索预算和问题难度限制,我们需要在这些限制下选择合适的方法。
  2. 当搜索预算较小、问题较难时,更适合使用beam search,注意调整超参。
  3. 当搜索预算较大、问题较简单时,更适合使用best-of-N。
  4. PRM训练得足够好时,更复杂的搜索方法(如lookahead search)表现可能不好。
  5. 当问题特别困难时,test-time scaling law的作用有限,可能需要重新审视pretrain阶段,通过增加/调整数据比例、扩展模型规模等方法,给pretrain模型注入更多相关知识。

三、方法二:直接改变模型的输出分布

刚才我们介绍了「PRM+搜索方法」的模式,使用PRM引导模型的步步推理过程来找到最佳答案。现在来看另一种提升推理准确率的方法:直接改变模型的输出分布(refining the proposal distribution)

在之前的模式中,我们通过SFT训练模型按照给定格式(步步思考)生成结果,这个步骤只起到了格式对齐的作用,并不对思考质量负责。那么你肯定会想:如果我使用高质量思考步骤的数据直接SFT模型,不也能达到同样的效果吗?这样的模型一旦训练完成,在推理阶段吃进一个问题后,就会自动开始步步思考,不需要搜索方法,也不需要PRM,只利用生成能力,就像下图这样:

如上图所示,模型吃问题后经过多次attempt,逐步逼近正确结果。

训练这样一个模型,SFT过程本身没什么好说的,关键是高质量SFT数据如何收集。除了本文提供的训练方法外,最近在OpenAI o1热搜中高频看到的STaR、Quiet-STaR也可以大致归为这一类(Quiet-STaR有些特殊,包含了更多巧思),后续我们会结合源码再来看。

3.1 收集SFT数据

如何用最少的成本生成高质量的、涵盖中间思考步骤的SFT数据?我们来看作者的做法:

  • 首先,我们有「问题+答案」这种有监督数据,只缺少中间过程。我们希望模型模拟人类思考,通过尝试各个attempt逐步逼近正确答案。
  • 然后,使用同样的方法先对模型做格式微调,使其能够产出「中间结果+答案」(注意是单个attempt,而不是多个attempt)。这一步只负责格式,不负责质量。
  • 接着,利用模型对每个问题并行采样N个attempt(单个attempt=中间结果+答案,N=64),过滤掉包含无效答案的attempt(无效不等于错误)。
  • 由于每个attempt都包含答案并且有标签,我们可以知道哪些attempt是正确的。
  • 现在希望为每个正确的attempt匹配若干错误的attempts,作为一条训练数据:形式是「问题+若干错误attempts+正确attempt」,让模型模拟人类从步步错误中推出正确的模式。具体做法:
    • 从0~4均匀采样一个数字x。对于每个正确回答,匹配x个错误回答。
    • 先从所有错误回答中根据编辑距离找到与正确回答最相似的一个。
    • 再从剩下的不正确回答中随机采样x-1条。
    • 一条正确回答按照 (问题, 随机不正确回答x-1, 最相似的不正确回答, 正确回答) 组成一条经验数据(trajectory),用来做SFT。正确回答是模型要预测的部分,之所以选择一条相似的错误回答,是为了让模型知道自己是在不断纠正错误中【学得更好】。
  • 同时注意,当某次采样的x<4时,需要将采样分布调整为0~x再进行下一次采样。这样做的目的是确保trajectories尽可能涵盖不同数量的非正确-正确答案组合。

审视这个收集方法,可能会觉得有改进的地方,比如:只是答案正确就认为attempt正确?中间步骤可能有错,可能是false positive。所以一种改进办法是依然引入训练好的PRM对中间步骤做评估,更有利于选择尽可能正确的attempt。举这个例子是为了说明,本文只提供了一种可能的数据收集方法,并不是标准。实际研究中还有很多可以探索的地方,核心都是【自动化】收集supervised数据。

3.2 模型训练的停止时间

用上面的数据进入SFT训练后,怎么判断可以停止?

  • 使用评估集loss来判断。期望评估集loss逐步变小,当观察到上升时往往表示开始过拟合,一般在此前早停。
  • 但在本实验中,作者观察到评估集loss上升很久后模型依然表现得非常好。因为评估集数据是off-policy的,模型在不断更新,评估集的数据分布已经赶不上模型,所以loss并不能真实反映训练情况。
  • 最终作者选择在发现过拟合现象后的一段时间再停止训练。

3.3 如何选择最佳生成方法

正常来说,如果SFT模型训练得足够好,喂给它一个问题,只需让它源源不断生成attempt直到,然后取最后一个attempt就可以了。但事实上可能会有问题:

  • 不能保证最后一个attempt一定是正确的,可能中间产出了正确的又被修错了。
  • 不能保证只生成一个回答(一个attempts链)中就一定有正确的attempt。

所以理论上可以使用SFT模型,但为了取得更好的效果,实际中依然需要配合「verifier+搜索方法」来做推理。这里写成verifier而不是PRM,是因为verifier不一定是基于过程的,也可以是基于结果的(ORM)。来看架构图:

  • 【左侧-parallel sampling】:说明了parallel sampling如何做,但没有告诉选择哪个结果。parallel sampling表示对一个答案生成多个attempts链(每个链包含若干attempt)。
  • 【左侧-sequential revisions】:最naive的推理方式,生成单个attempts链包含多个attempt,只阐述过程,不讲选择方案。
  • 【右侧-parallel best-of-N】:开始讲选择方案,引入verifier。模型并行采样多个结果(每个结果是一串attempts链条),借助verifier选出得分最高的attempts链条。
  • 【右侧-sequential revisions】:引入verifier按顺序生成多个attempts,但最后一个不一定正确,所以用verifier判断在这个链条中应该选哪个attempt。
  • 【右侧- combing sequential/parallel】:同时生成多个链,每个链里包含若干attempt。先在每条链内通过verifier找到最佳attempt,然后所有最佳attempt放在一起,再通过verifier找到最优。

作者同样通过实验,在搜索预算(采样数量N)和问题难度限制下决定用哪种生成方法。实验内容不详细展开,直接给出结论:

  1. 在简单问题上,sequential生成(在单个attempts链中找最佳attempt)效果更好
  2. 在复杂问题上,sequential+parallel合并效果更好,但需要选择合适的超参

四、Pretrain还是Inference?

上面介绍了两种把算力集中在inference/post training阶段来提升模型推理效果的方法(正如前言所说,这算是两种框架,具体做法只是例子,实践中可以有很多变种)。了解这些方法后,你一定想知道:在inference scaling law指引下的结果,能比pretraining scaling law指引的结果好多少?换句话说,给inference和pretrain分配相同的算力,它们表现会怎样?

论文中作者简单给出了一些建模指标和说明。我曾尝试从更细节的角度去理解,但论文描述存在歧义和模糊之处,以目前的能力无法给出自洽的解释。所以这一节直接放出实验效果图,从直观上大致解释pretrain VS inference的问题:

左右两幅图分别对应【利用PRM指引搜索】和【直接改变模型输出分布】两种方法。两者的实验方法一致,只看一幅即可。实验中:

  • 横轴:算力(FLOPs)
  • 纵轴:模型推理效果
  • 不同颜色的曲线:不同问题难度
  • 带圆点的曲线:算力全部用于inference时的模型效果
  • 每条虚线:算力在pretrain和inference中的交换比例。星号表示当这部分算力以一定比例给pretrain时模型的最终推理效果(不能完全换给pretrain,因为pretrain继续训练后本身也需要算力来做推理)

从中可以发现,对于较简单的问题(难度1~3),星号普遍在圆点之下,也就是说这部分固定算力全部用于inference时表现更好;对于较复杂的问题(难度4~5),星号普遍在圆点之上,意味着复杂问题还是需要依赖预训练知识的更新。



来源:https://www.53ai.com/news/finetuning/2024101120345.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。