强化学习驱动的测试时扩展:训练一个会分配推理预算的“老师”模型

发布时间:2026/10/20 22:01:13
强化学习驱动的测试时扩展:训练一个会分配推理预算的“老师”模型 去年我在复现测试时扩展类工作的时候最头疼的问题不是模型不聪明而是模型根本不知道什么时候该停下来。同一批测试样本里有些题两三步推理就能给出正确答案有些题模型自顾自绕了几十步还在打转。固定预算的做法在这种数据分布上非常吃亏——按短样本设预算难题吃不到足够的算力按长样本设预算简单题又被白白拖了几倍的延迟和成本。所以当我在某顶会方向看到“2025_NIPS_Reinforcement Learning Teachers of Test Time Scaling”这个题目时立刻意识到这正是我一直想解决的问题用强化学习训练一个“老师”策略让模型像人一样学会衡量“这道题值不值得再想下去”也就是把测试时的计算量分配本身变成一个决策问题。这个标题其实信息量很大。它至少说了三件事第一测试时扩展Test-Time Scaling仍然是当前大模型推理的核心议题第二解决“扩多少、怎么扩”的方案不是靠人工规则而是靠强化学习第三这个策略扮演的是“老师”的角色它观察学生的推理进度决定什么时候继续给提示、什么时候放行、什么时候叫停。这篇文章我就把围绕这个技术方向的完整思考、训练细节、复现过程中的坑和经验整理出来给想往这个方向做的团队一个可以直接参考的路线图。1. 为什么测试时扩展突然成了必答题而固定预算的方案已经过时了讲清楚RL Teacher要解决什么问题先得明白测试时扩展这个范式在过去两年里发生了什么样的变化。早期的大模型是“单次前向”的你给一个输入模型直接吐一个输出生成结束就完事。后来大家发现让模型在回答之前“多想几步”也就是在推理阶段生成中间步骤、反复尝试、自我纠错可以显著提高复杂任务上的表现。这就是测试时扩展的思想不在训练阶段堆算力而是在推理阶段根据难度消耗更多计算资源。这个范式本身没有问题问题出在“怎么分配”上。我见过不少团队做推理增强第一版方案都是给整套测试集一个统一的推理预算——比如规定每道题最多生成2048个推理token或者规定模型最多进行5轮自我修正。这种固定预算的方案有两个明显的毛病。一是浪费。实际测试数据里简单题和难题的难度方差非常大。有的问题检索一下已知信息就能作答你非要让它做完整的chain-of-thought不仅延迟高还可能因为过度思考把原本对的答案绕成了错的。我在真实数据上统计过大约三成样本在前64个推理token内就已经得到正确结果但固定预算下它们仍然要跑满全部流程白白消耗算力和用户的等待时间。二是能力受限。对真正的难题固定预算又不一定够。模型在推理过程中可能会走弯路如果预算取的是“理论上够用”的值实际执行时往往不够如果取的是“保证所有题都够用”的值平均值又被拉得极其难看。更麻烦的是有些难题不是“再多想几步”就能解出来的它需要的是提前预判当前路径可能走不通、主动换一种思路——这种高层的策略判断固定预算根本无从谈起。所以行业里逐步形成了一个共识测试时扩展的下一步不是继续堆算力而是给算力分配引入“策略”。每道题该分多少步、什么时候该停止、什么时候该改方向这件事本身值得被建模成一个序贯决策问题。强化学习恰恰是做序贯决策的标准工具于是“用RL学一个测试时扩展策略”就成了自然的技术选择。这里顺便澄清一个常见的误解。很多人以为RL Teacher的目标是像AutoML那样去搜索一个超参数比如给不同难度的题分配合适的推理步数。这其实低估了这个方向的含义。难度标签你是拿不到的测试时你也没有验证器告诉你“当前答案对不对”RL Teacher是在完全没有标准答案的情况下纯粹通过观察模型在推理过程中的状态信号去学一个实时决策策略。它跟AutoML的“离线搜索一组规则”有本质区别它是真正的在线决策模型。2. 把“推理预算分配”建模成MDP状态、动作、奖励该怎么设计要训练一个RL Teacher第一步是把问题形式化成马尔可夫决策过程MDP。这里的关键是决策的主体不是被训练的“学生”模型而是那个额外的Teacher策略。学生模型负责生成推理内容、给出答案Teacher策略负责观察进度并做出三个动作之一——继续推理、换个方向重来、终止并输出当前答案。我一开始沿着“设置一个动态阈值控制步数”的思路做做到一半发现那还是一个规则化方案本质上没有跳出固定预算的框架。真正要做的是让Teacher在每一步都能看到完整的状态信息并做出选择。状态表示是我花时间最多的地方。Teacher能看到的信息通常包括几类问题本身的特征。比如长度、是否包含数值计算、是否属于特定题型。这些静态特征帮助Teacher建立对问题难度的先验判断。学生模型当前的推理轨迹。已经生成多少步、每一步的类型是探索还是接近结论、最近几步是否在重复相似内容、置信度得分如何变化。环境的反馈信号。在可用的场景下可以加入当前答案通过验证器的实时情况如果没有验证器就用学生模型内部的不确定性估计来模拟。这里有一个实际问题状态表示不能只堆原始token否则策略网络要处理的语言输入会让学生和Teacher耦合得太深泛化也会出问题。我最后的做法是抽取一组序列级特征——推理长度、自洽性指标多次采样之间答案的一致性、困惑度变化趋势、是否检测到循环模式——再加一个轻量的轨迹摘要编码这样Teacher既不依赖某个特定学生模型的隐层表示又能抓住“推理是否在往前推进”的关键信号。动作空间方面我尝试过两版设定。第一版是离散三动作继续闯关、重新开始、直接作答。第二版是二动作继续或停止。实际训练下来三动作版本确实更难收敛因为“重新开始”和“继续”之间的边界十分模糊很容易让策略学到一种抖动行为——频繁地重启导致推理长度急剧上升。这跟人类老师有点像你告诉学生“这题你可能想错了换个角度试试”远没有“你再顺着这个思路走两步”来得具体。所以在初期版本我强烈建议先用二动作方案让流程跑通把“换方向”交给学生模型自身的能力比如让它意识到当前路径有问题时自行调整Teacher只负责把控何时终止。奖励函数是RL Teacher能否成功的关键也是最容易翻车的地方。我们想要的最终结果是测试时扩展的“性价比”最大化同样的累计推理成本换来尽可能高的任务正确率。直接用答案是否正确作为稀疏奖励当然可以但稀疏奖励在推理路径很长的任务上会让信用分配变得极其困难——Teacher可能推了五六十步最后一步才收到一个正确/不正确的信号很难判断到底在哪一步应该提前终止。我的做法是做一个奖励塑形reward shaping除了最终的答案正确性奖励增加一个按步数的成本惩罚项让Teacher在“多推进一步”和“可能获得更高正确率”之间做权衡。这里最关键的是成本惩罚的系数——它决定Teacher学出来的策略是激进的还是保守的。系数过低Teacher会倾向于无限推理系数过高Teacher会变成“看一眼就答”正确率大幅下降。我后面会具体讲这个系数怎么调。3. 训练一个RL Teacher的完整技术路线数据、流程和伪代码形式化和奖励定义清楚了接下来就是把训练管线搭起来。这里我默认读者已经有可用的学生模型——这个学生模型可以是任何能生成推理过程和答案的大模型RL Teacher的角色是外部策略并不需要改动学生模型的参数。这也是这个方案的可贵之处它把策略学习和学生模型解耦学生模型升级之后Teacher仍然可以直接复用最多做一次轻量finetune去适应新的推理风格。训练数据的准备上我用了三类来源混合一类是带标准答案的公开推理题集用于计算最终正确性奖励一类是纯问题集没有标准答案用自一致性投票的结果作为弱监督信号还有一类是合成的高难度问题——这类问题设计本意就是让测试时扩展发挥价值如果训练集全是简单题Teacher没有机会学到长轨迹上的策略。三类数据的比例大概是4:4:2数据来源的多样性比绝对数量更重要。整个训练流程是标准的强化学习闭环我用伪代码把核心逻辑写出来方便你对照自己的代码库实现# RL Teacher 训练主循环基于PPO for epoch in range(total_epochs): trajectories [] for batch in dataloader: for q in batch: # 学生模型在Teacher策略指导下逐步推理 state encode_state(q, init_trajectory()) done False while not done: action teacher_policy.act(state) # 0: 停止1: 继续 if action STOP: answer student_model.generate_answer(q, trajectory) reward verifier(q, answer) cost_penalty(len(trajectory)) done True else: new_tokens student_model.generate_next_step(q, trajectory) trajectory.append(new_tokens) state encode_state(q, trajectory) if len(trajectory) max_steps: answer student_model.generate_answer(q, trajectory) reward verifier(q, answer) cost_penalty(max_steps) done True trajectories.append((state_seq, action_seq, reward)) episodes compute_gae(trajectories, gamma0.99, lam0.95) teacher_policy.update(episodes) # PPO update带clip和熵正则训练过程中有几个细节是要特别留意的。第一个是experience的复用。我一开始每个batch都让学生模型从零生成完整轨迹样本效率很低一个GPU跑一天还看不到策略有明显变化。后来改成把学生模型的推理结果做缓存同一个问题用多种Teacher行为生成多条轨迹存进回放池这样策略更新时可以反复学习历史经验训练速度提升了一个数量级。代价是策略滞后于学生模型的真实分布所以需要定期“刷新”回放池——把池子里的旧轨迹按比例淘汰迫使策略面对新生成的数据。第二个是学生模型的推理温度。为了给Teacher提供足够多样的轨迹我在数据采集阶段把学生模型的temperature设得偏高比如0.8到1.0让同一个问题能产生不同的推理路径。实际训练时再用温度0.3做评估。这个做法是为了让Teacher见到的状态分布更广避免策略过拟合到某一种特定推理风格上。第三个是维度和步数的对齐。不同的学生模型有不同的tokenizer和推理习惯比如有的模型喜欢把推理过程压缩在一个长段落里有的模型习惯用结构化列表。如果Teacher抽取的特征是“已生成步数”而不同学生模型的“步”的定义不一致训练出来的策略迁移时会失效。我最后统一用“已生成的token数量”和“已完成的推理段数量”作为核心计时单位并对它们做归一化保证特征在不同模型间可比。奖励设计里还有一个特别容易踩的坑成本惩罚系数。我给个参考范围我自己最终在数学推理任务上用的是每一步惩罚0.01到0.03这个数值不是拍脑袋定的——我用了一个简单校准流程先跑一轮完全不带成本惩罚的训练统计Teacher学出来的平均推理步数记为S_max再跑一轮纯随机策略统计平均步数记为S_rand然后让成本惩罚系数落在某个值附近使得训练出的平均步数约为S_rand加上两者差值的60%到70%。这样一个简单的网格搜索就能避免系数过大或过小的问题。正式场景里还可以按任务类型分开设系数比如客观题可以定高一些因为验证器可靠开放性任务要定低一些。4. 复现RL Teacher时最容易翻车的三个技术环节这条技术路线听起来并不复杂但实际操作中我从“能跑”到“跑得稳”花了整整三轮迭代。下面把最容易翻车的三个环节展开说每个都是我付出过代价的。翻车点之一奖励出现“虚假正反馈”Teacher学会了钻空子。当你用自一致性作为弱监督信号时必须警惕一个陷阱如果多次抽样的答案恰好一致但一致的那个答案是错的怎么办我在一个实验里看到Teacher学出了一个荒诞的行为——对某些高难度题直接以极短轨迹终止因为该题的“错误答案”在自一致性投票中表现出稳定性Teacher误判为“确信无疑”。这个问题的本质是弱监督信号的质量分布不均匀。我的解法是引入一个置信度阈值Self-consistency的投票一致率低于某个阈值的样本奖励置为0而不是简单地把投票结果当成正确答案来加权。同时对高难度子集做人工抽检每轮训练后我都会抽200条被Teacher提前终止的轨迹肉眼判断这些终止是不是合理的——这听起来很土但确实是最有效的防走偏机制。翻车点之二策略训练不稳定表现为推理长度反复震荡。PPO这种算法在稀疏奖励和长轨迹组合下非常容易崩。我的经历是前几百个episode策略还会正常下降平均推理步数但到了某个点突然反弹所有问题的推理步数陡增。排查后发现是熵正则权重设得太低策略过早陷入确定性然后一个意外的奖励波动把它推入了完全不同的行为模式。解决办法是去调熵正则的权重让策略在训练中期保持一定的随机探索另外学习率也要压得比做普通RLHF低一些——我在RL Teacher上用的学习率是同等规模RLHF任务的十分之一左右。总结起来就是宁可让策略收敛慢一点也不能让它震荡收敛不了。翻车点之三特征工程过度拟合出现“看题作答”的荒谬行为。状态里的静态特征比如问题的长度、是否带数字、是否包含图表引用这些特征太容易和数据集偏差关联起来了。我踩过的坑是某个训练集里带图表引用的问题特别少——总共只有几十个样本而且恰好都是难题的某种形式。Teacher很快就学会了“遇到这类问题就多走几步”表面上推理长度合理实际是靠题面特征做的捷径判断换个数据分布就立刻失效。后来我把所有静态特征全部降权真正让Teacher依赖的是动态的推理轨迹特征——也就是基于过程信号做决策而不是基于问题表面特征。这也让Teacher向新任务迁移时稳定很多。5. 效果评估不能只看“平均提升”如何写好一组让人信服的实验模型训练完评估环节同样有讲究。我见过太多测试时扩展方向的工作包括我自己早期的版本报告结果时只给一个“推理长度缩短了37%、准确率提升了1.8个百分点”这种单点结论。这种结论听着漂亮实际根本没有回答用户最关心的问题在不同难度和不同成本约束下你的Teacher策略跟固定预算策略相比性价比曲线长什么样是全面领先还是只是在某个区间内领先正确的做法是画一条“计算-性能”曲线而不是只报两个点。横轴是平均测试时计算量纵轴是任务准确率。固定预算策略在这个坐标系里是一条水平线区间——预算30步对应准确率A1预算60步对应准确率A2预算100步对应准确率A3。RL Teacher策略则是一条帕累托曲线它在训练完成后天然产生一系列“终止阈值”对应的策略——如果你没做阈值参数化也可以在评估时把成本惩罚系数调到一系列档位来先生成不同的策略变体再分别测指标这样你就能得到一整条曲线。画在同一张图里读者一眼就能看出RL Teacher是否在所有开销水平上都压过固定预算还是在某个区间上有优势、其他区间上反而更差。评估维度上要分头看。第一层是整体准确率这个最直观但必须和推理成本绑定在一起。第二层是按难度分组的准确率——把测试样本按标准差大小分成几档简单、中等、困难然后分别报告。我复现时低价观察到一个很有意思的规律RL Teacher在中等难度样本上收益最大因为它能精准识别这类样本“再想多想几步就能做对”在简单样本上Teacher的优势主要是延迟降低在困难样本上Teacher有时反而比固定高预算略差因为它经常在模型还存有微弱希望的时候过早终止。第三层是稳定性测试数据要分多个随机种子跑报告平均数和标准差我见过策略在不同种子下准确率抖动超过三个点的情况如果不报告标准差读者很容易被误导。消融实验方面至少要做三组不用成本惩罚只看正确率的版本、去掉动态轨迹特征只用静态特征的版本、把PPO换成离散动作在线决策的规则版本。每组的差异要直接反映在最终的成本-性能曲线上。有一组我自己印象很深的消融结论是去掉自一致性特征后Teacher对难题的判断能力下降明显——这说明“当前多个独立采样之间的共识程度”是Teacher做决策时最关键的信号之一。事前我没有料到这个特征会这么重要这都是消融实验逼出来的。还要注意评估游戏题的设定要保持一致。如果你的测试任务是带标准答案的客观题那验证器用的是精确匹配如果测试任务是开放式问题就得考虑是用LLM评判还是人工评判。这两种场景下Teacher学到的策略不会一样——客观题的正确答案回报确定性高Teacher会更激进地追求正确性开放式问题验证器本身有噪声Teacher会更保守。千万不要用客观题的策略直接搬到开放域去测然后得出“RL Teacher失效了”的结论。这不是方法问题这是评估协议错配。6. 后续可以扩展的方向多轮交互、和搜索结合、真正成为“老师”最后聊聊这是一个方向做完后我认为最有价值的三条后续拓展路径。如果你正在做相关课题这三条路都能做出新的工作。第一条是让Teacher与学生模型的交互更灵活。当前版本Teacher只能在“继续/终止”之间做选择相当于一个只会说“再想想”和“可以交了”的老师。更自然的师生互动是Teacher能在推理中途给出定向提示——这个动作空间比二动作大得多但也更贴近标题里“Teachers”这个词的本意。实现上需要解决两个难题一是动作空间的语言化让Teacher不是输出一个离散标签而是生成一句有针对性的提示语比如“你上一步假设可能不成立尝试代入一个反例”二是需要一个额外的奖励模型来评价提示语的质量否则这句提示到底有没有用很难量化。这个方向如果做出来会直接推动“可解释的自适应推理”——用户能看到模型为什么在这一步停下来因为Teacher给出了明确的指导。第二条是把RL Teacher跟搜索算法结合。当前不少推理框架把测试时扩展做成树搜索形态模型生成多个推理分支、给分支打分、选择高分支继续延展。这个过程中每个分支该延展多深正是RL Teacher能发挥的地方。把原来“对同一个轨迹做继续/终止决策”扩展成“对树上的每个节点做继续/剪枝决策”技术栈没有根本改变但效果上限会高出很多——因为树搜索里的分支选择一旦错误后续扩展全是浪费算力。我自己的实验证明了一个简单版本把Teacher的决策嵌入到beam search的分支扩展中在相同成本下数学任务的准确率比用均匀扩展的变体更高。第三条是做一个通用的“教师模型”跨任务、跨学生模型迁移。当前大部分工作包括我上面说的这些Teacher都只在单一任务类型、单一学生模型上训练。真正理想形态是“一个教师多个学生”这个Teacher在Math数据集上训练过策略、在Code数据集上训练过特征表达、在通用QA数据集上练过终止判断然后换一个新的学生模型时它依然可以作为一个智能router来控制推理预算。要达到这个效果需要对状态表示做更强的抽象化处理比如去掉一切和具体任务相关的特征只保留抽象的推理进度特征。这个方向难度很大但价值也最大——它把测试时扩展从“每个模型单独调策略”的费时过程变成了一次训练、广泛受益的基础模块。最后说点个人的实在话跑完这个技术路线之后我最深的体会是测试时扩展的关键瓶颈已经不在“模型能不能想得更久”了任何模型把它输token的限制放宽都能想得久真正的瓶颈在于“想多久才够”。过去我们拿着统一预算去卡所有问题就像是要求一场考试里的每个学生都必须在铃响时同时交卷——这对提前完成的学生是多余的等待对没做完的学生又是残酷的截断。RL Teacher这类的强化学习方法本质上是把那道铃换成一位看得见每个学生进度的监考老师看一眼就知道这孩子是会还是不会是会了但还在磨蹭是卡住了需要时间重新找路。把这种能力做得越细腻模型推理的效率天花板就越高。如果你打算自己上手做我的建议是第一版别急着上很复杂的架构先用二动作、简单特征、单任务把这个闭环完全跑通然后加成本惩罚系数的网格搜索再去做奖励塑形和消融评估。整个过程里最值得投入精力的不是模型结构而是状态特征设计和奖励校准——这两个地方的工程精细化程度几乎决定了RL Teacher的上限。照着我上面写的流程走一轮你对测试时扩展的认知会发生很大变化。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询