![]()
你可能没意识到,现在训练大模型做数学题、写代码,靠的是一种叫强化学习的方法。简单说,就是让模型自己生成答案,做对了就奖励,做错了就不奖励,反复调整,模型就越来越会做题。
这套方法有个响亮的名字,叫RLVR。
可验证奖励强化学习:一种训练方法,模型生成的答案能用明确规则判断对错(比如数学题有标准答案),据此给奖励信号,让模型自我优化。
DeepSeek-R1就是靠这套方法火出圈的,它用的具体算法叫GRPO。这套流程听起来挺完美:让模型自己练,练得越多,应该越聪明。
但一群研究者发现了一件让人挠头的事。
他们测试模型能力的时候用了两个指标。一个叫avg@k,就是让模型对同一道题生成k次答案,算平均正确率。另一个叫pass@k,只要k次里有一次对了就算通过,不用全对。
你可能觉得这两个指标应该是同步提升的,训练得越好,两者都该涨。但研究者发现,经过RLVR训练之后,avg@k确实涨了,模型平均答对率变高了。
可pass@k却经常纹丝不动,甚至更差。
这就很奇怪了。avg@k涨说明模型确实在某些方面变强了,但pass@k不涨意味着模型能够触达的正确答案的范围并没有扩大,它只是把已经会的东西做得更熟练了,而不是学会了新的解法。
这就是这篇论文要死磕的问题:怎么训练,才能让模型真正学会更多解法,而不是在原地把老把式练得更花哨。
为什么pass@k才是真正的天花板
先说清楚为什么pass@k这么重要。
想象你在准备考试,有两种复习方式。一种是把会做的十道大题反复刷十遍,越刷越熟练,考场上写起来又快又准。另一种是花时间去啃那些完全不会的题型,哪怕一开始磕磕绊绊。
如果考试只考你已经会的那十道题的变种,第一种复习方式赢定了。但如果考试范围更广,包含你从没见过的题型,第一种复习方式再怎么练也没用,因为你的知识边界压根没扩大。
pass@k衡量的正是这个知识边界。
后来测试时人们会用各种技巧扩大产出规模,比如让模型生成很多份答案然后投票选一个,或者用搜索树探索多条路径。但这些技巧有个前提:正确答案得先出现在候选池里。
如果模型的pass@k很低,说明它压根就不会生成正确答案,那么不管后期怎么筛选投票,都是矬子里拔将军,选来选去还是错的。
这就是论文开篇点出的核心矛盾:训练时只顾着让avg@k好看,会让模型陷入自我强化的死循环,越训练越只会做老题,遇到新题照样歇菜。而真正决定模型上限的,是pass@k能不能被撑大。
三个反直觉的发现
研究者没有直接扔出一个新算法,而是先做了一轮扎实的分析,想搞清楚训练时候的采样结构到底该怎么设计才能撑大pass@k。他们发现了三件事,每一件都有点反直觉。
### 发现一:给简单题多做几次采样,反而会让模型变笨
标准的GRPO训练里,不管题目难易,模型对每道题都生成同样数量的候选答案,这个数量叫做rollout budget,用G表示。
研究者把训练数据按难度分成简单、中等、困难三档,然后分别用G等于4、8、16这三种设置训练模型,一共训练了9个模型,拿去测avg@256和pass@256。
结果很有意思。avg@256随着G的增大稳步提升,这符合直觉,采样越多,优化信号越稳,模型学得越扎实。
但pass@256的走势完全不一样。
在简单题上训练的模型,G越大pass@256反而越低,从61.4一路跌到56.7。而在困难题上训练的模型,G越大pass@256越高,从57.9涨到61.0。中等难度的题目则是先涨后跌,在G等于8的时候达到峰值。
为什么会这样?
如果一道题对模型来说很简单,模型本来就能做对,你让它反复生成很多次答案,绝大多数都是同一个套路的正确解法。这时候pass@k其实已经饱和了,只要一次就够了,多生成没有额外价值。但训练时的优化压力会让模型把这种简单套路刻得更深,代价是牺牲了在别的、更难的题目上探索的动力,模型变得越来越死板,只认得熟悉的模板,遇到没见过的题型反而更容易翻车。
而困难题恰恰相反,正确解法本来就稀少,多采样几次相当于给了模型更多试错机会,能探索到的解法路径自然更多,pass@k跟着涨。
这个发现直接推翻了一个流行的认知:很多研究把难度自适应采样只当成算一种省计算资源的工程技巧,该给难题多分配算力,简单题少分配就行了。但这篇论文说,难度自适应根本不是为了省钱,而是决定pass@k能不能被撑大的关键因素。
这里有个类比能帮你理解。假设你是个健身教练,带两个学员。一个学员已经能轻松举起50公斤,你让他每天举一百次同样重量,他确实会举得越来越顺手,但肌肉的极限一点没提高,因为负荷压根没有超出他的舒适区。另一个学员正在挑战80公斤,还举不太稳,你让他反复尝试,每次尝试都是在逼近极限边界的探索,虽然经常失败,但每一次失败都在帮他摸索新的发力方式,真正的力量增长恰恰发生在这些不稳定的尝试里。
如果对第一个学员也追加大量重复训练,你消耗了大量时间和精力,换来的只是熟练度的边际提升,甚至因为过度重复某个固定动作模式,反而让他在面对新动作时更僵化。这就是为什么"一刀切"地增加rollout budget对简单题是浪费甚至有害,而对难题却是必需的。
论文还给出了一套理论证明来支撑这个发现,核心思路是把pass@k拆解成两部分:一部分是平均正确率带来的增益,另一部分是测试集上题目难度差异导致的方差损失。当训练集里全是简单题的时候,模型在训练集上表现越来越好,但这种进步没法迁移到测试集里那些没见过的难题上,导致两极分化:训练集里的熟悉套路正确率逼近百分之百,陌生题目正确率却几乎不变,方差损失就压过了平均正确率的增益,pass@k自然下降。
### 发现二:树状搜索比并行采样更省token,正确率也更高
第二个问题是关于采样结构本身的:模型生成候选答案的时候,是应该让每条路径完全独立并行生成,还是应该让它们共享一部分前缀,只在关键节点分叉?
传统做法是并行采样,模型对同一道题独立生成M条完整轨迹,互不干扰。这篇论文对比了一种叫树状rollout的策略。
树状rollout:先让模型生成N条独立的基础轨迹,再从每条轨迹上挑出几个关键节点作为分叉点,从这些分叉点继续生成新的分支,最终形成一棵树。
研究者对比了标准并行采样、以及两种简单的树状采样变体(等距分叉和随机分叉),测量的是PassRate,也就是至少命中一个正确答案的概率,相对于生成token总量的变化曲线。
结果显示,两种树状采样变体的效率都明显高于并行采样,同样的token预算下,树状方法能命中正确答案的概率更高。
这背后的道理其实很朴素:树状结构因为共享前缀,不需要为每条候选路径都从头生成一遍开头部分,省下来的token预算可以用来探索更多样的后续分支。
这里可以类比成写一篇需要试很多种开头的作文。如果每次尝试新的段落走向,都得把前面已经想好的开头重新誊写一遍,那你大部分精力都耗在了重复劳动上,真正花在探索不同走向上的时间被严重压缩。而如果你把已经确定的开头先写好,然后在关键的分歧点上分别往下续写不同的版本,同样的时间里你能试出更多种可能的走向。
如果放弃树状结构、坚持用纯并行采样,在token预算有限的情况下,你能试探的路径数量会被前缀的重复计算严重拖累,命中正确答案的概率自然要打折扣。
有意思的是,两种树状变体之间也有差距,等距分叉的效果比随机分叉更好,这说明分叉点选在哪里,直接决定了树状搜索能不能真正发挥优势。
### 发现三:只看token的"意外程度"来选分叉点,会导致探索扎堆
这就引出了第三个、也是最关键的发现。之前的研究选分叉点,通常是挑那些"熵值"高的token作为候选。
熵:这里指模型对下一个token的预测有多不确定。如果模型几乎认定下一个词就是"的",熵就很低;如果模型觉得下一个词可能是十几种词里的任何一个,熵就很高。高熵往往对应着关键决策点,比如"因此我们应该选择方法A"和"因此我们应该选择方法B"这种分歧点。
按理说,在这些高度不确定的地方分叉,应该能引导出更多样的推理路径。但研究者发现了一个叫"局部化"的现象:高熵token往往密集地扎堆出现在轨迹里一小段特别纠结的地方,而不是均匀分布在整条推理链上。
这就导致搜索预算被反复浪费在同一个狭窄区域里的重复采样,树的结构范围没有真正被撑开。
论文用一个量化指标验证了这一点,测量选中的分叉点之间的最近邻距离和窗口聚集率。结果显示,按token熵选出来的分叉点,聚集程度是各种方法里最高的,超过35%的分叉点对彼此距离在轨迹总长的10%以内。
为了解决这个问题,研究者提出了句子级熵。
句子熵:把一条推理轨迹按句子切分,每个句子的熵取该句子内所有token熵的平均值,然后挑熵值最高的几个句子作为分叉起点,而不是挑单个token。
这个改动看似简单,效果却很显著。研究者引入了另一个指标叫Sibling Diversity(简称SibDiv),用来衡量同一个分叉点分出去的几条分支在语义上到底有多不一样。
按token熵分叉,SibDiv确实是所有方法里最高的,达到0.1065,因为紧挨着的分叉点确实能引出表面上不同的措辞。但正确率反而是最低的几种之一,只有12.0%,因为这种多样性被死死锁死在一个狭窄片段里,没能转化成整棵树在结构上的真正差异。
而按句子熵分叉,SibDiv略微下降到0.1049,几乎没有损失,但正确率跃升到17.3%,是所有方法里最高的。
这里可以类比成一个团队讨论方案。假设讨论到某个环节,大家对某个具体措辞争论不休,你把所有的争论精力都投入到抠这一个字眼上,产出的几个版本看起来措辞略有差异,但方案的整体思路其实是同一个,根本没解决更上层的分歧。如果换个做法,退一步在每个逻辑段落的层面上找真正有分歧的地方分头讨论,虽然表面上讨论热度没那么集中,但最后产出的几套方案在思路上真的走向了不同的方向。
如果继续死磕token级别的局部分歧点,你会发现越是深入争论细节,讨论范围反而越窄;退到句子这个更高的语义粒度上,才能真正撬动路径之间的结构性差异。
论文还专门做了一个额外实验来排除一种可能的解释:会不会句子熵有效只是因为它天然避开了扎堆,而不是因为句子这个语义粒度本身有信息量?他们设计了一个强制拉开距离的token熵版本,结果显示,即使人为拉开token级分叉点之间的距离,正确率能提升到15.3%,但仍然比不上句子熵的17.3%。这说明句子级熵不只是在解决扎堆问题,它本身就是一种更有效的信号,能定位到真正语义上有分量的决策节点。
DATPO:把三个发现拼成一套完整方法
基于这三个发现,研究者提出了DATPO。
DATPO:全称是难度自适应句子熵引导树状策略优化,核心思路是把前面三个发现整合进一个训练框架里,让模型在训练时的探索本身就朝着扩大pass@k的方向去。
具体怎么做的?
第一步,难度自适应树搜索。先让模型生成N条基础轨迹,用这些轨迹的平均正确率来估计这道题对模型来说有多难。如果这个平均正确率是1,说明模型已经完全掌握,直接跳过后续的树扩展,不浪费任何算力。如果正确率很低,说明题目很难,就按比例分配更多的分叉点数量和每个分叉点的分支数量,把搜索预算集中投向那些还没被攻克的难题。
第二步,分叉点的选择用句子熵,避开局部化陷阱,让分支真正探索出语义上不同的推理路径。
第三步,是这套方法里比较巧妙的一处设计,叫"块级多样性增强优势"。
先解释一下背景。传统的强化学习给整条轨迹打一个分,对不对全靠最后答案。但树状结构里,一条轨迹被分叉点切成了好几段,每段应该单独评估好坏,而不是笼统地共享同一个分数。DATPO把每段轨迹叫做一个"块",用蒙特卡洛的方式估计每个节点未来能通向正确答案的概率,以此给每个块单独打分,这样即使某个块位于轨迹的中段,也能获得精确的信用分配,不用等到整条路径结束才知道好坏。
在这个基础上,DATPO又加了一层多样性奖励。
对于同一个分叉点分出来的几个兄弟块,DATPO会计算它们彼此之间的语义距离,距离越大说明这几条分支探索得越不一样,给这个块的优势值上叠加一个正向奖励。但这个奖励只加给本身已经走在正确方向上的块,如果一个块的基础优势是负的,说明这条路走偏了,哪怕它和兄弟块差异很大也不加分,防止模型学会为了追求多样性而故意生成错误答案。
这个多样性奖励的系数还会随着训练推进逐渐衰减到0,训练初期鼓励模型广泛探索,不要过早收敛到某种固定套路,训练后期则让模型专心巩固已经学到的正确解法。
这个设计思路可以类比成教一群学生解应用题。刚开始上课的时候,你鼓励每个学生用自己的方法去试,哪怕有点绕远路,只要方向对了就给额外的加分,鼓励大家别一窝蜂用同一种思路。但课程快结束、临近考试的时候,你会逐渐收回这种额外加分,转而让学生专心把已经验证有效的解法练扎实,而不是继续鼓励标新立异。
如果一直不衰减这个鼓励系数,考试前学生还在纠结要不要用新奇解法,反而会影响熟练度的巩固;如果一开始就不给这种探索性的加分,学生一上来就都抄同一种思路,班里的解法多样性从一开始就被扼杀了。
实验结果说了什么
研究者在Qwen2.5-3B和Qwen3-4B这两个基座模型上做了实验,训练数据用的是MATH数据集,测试覆盖MATH500、AIME26、AIME25、AIME24、AMC23这几个数学推理基准。
对比的基线方法包括标准GRPO、改进版Dr.GRPO,以及两个同样采用树状结构的方法TreeRL和AttnRL。
在Qwen2.5-3B上,DATPO的平均avg@k达到22.4,比最强基线AttnRL的21.3高出1.1个百分点,看起来涨幅不算夸张。但平均pass@k是54.9,比AttnRL的53.0高出1.9个百分点,而且相比GRPO的48.2整整高出6.7个百分点。
在Qwen3-4B上差距更明显,DATPO的pass@k达到60.4,比AttnRL的57.4高出3.0个百分点。
这组数字说明了什么?
说明DATPO的avg@k提升幅度不大,但pass@k的提升幅度明显更大,这正好印证了论文一开始想解决的问题:模型的"熟练度"没有大幅超越同类方法,但它触达正确答案的"能力边界"被真正撑开了。
更能说明问题的是训练过程曲线。研究者跟踪了MATH500准确率随训练步数的变化,TreeRL和AttnRL在训练初期涨得都不错,但后期逐渐进入平台期,甚至出现下滑。DATPO则是持续上涨,一直保持增长趋势,没有出现早熟收敛的迹象。这背后正是那个逐渐衰减的多样性奖励在起作用,它在训练前期注入了足够的语义探索动力,防止模型过早锁死在某种固定套路里。
论文还分析了不同难度题目上分配的搜索资源,发现DATPO和AttnRL虽然都做了难度自适应,但DATPO给简单题分配的分支明显更少,给困难题分配的更多,资源分配更极端也更精准。AttnRL的自适应策略靠的是一个固定的注意力分数阈值来筛掉简单题,属于一刀切的硬性过滤,没法根据题目难度做出连续的、渐进的资源调整。这直接反映在困难题目上的正确率差异:DATPO在最难的两个等级上取得了比其他树状方法更高的PassRate。
最后,研究者还测了这些扩大的pass@k能不能真正转化为实际应用中的效果提升。他们用了一种叫多数投票的测试时策略,让模型对同一道题生成多份答案,投票选出现频率最高的那个答案。
结果显示,DATPO训练出来的模型用多数投票之后,准确率相比它自己的avg@k提升了7.2个百分点,是所有对比方法里提升幅度最大的。而其他方法这个提升幅度普遍在4.5到6.2个百分点之间。
这说明训练时pass@k撑得越大,测试时能被这类策略挖掘出的额外收益也越大。反过来说,如果训练时pass@k没被真正撑开,测试时无论堆多少候选答案去投票,正确答案压根就没在候选池里,投票也是白费功夫。
消融实验:每个部件都不是摆设
研究者还做了一系列拆解实验,验证每个设计到底有没有必要。
关于分叉策略,他们对比了随机分叉、等距分叉、注意力分叉、token熵分叉和句子熵分叉,句子熵分叉在avg@8和pass@8上都是最好的,进一步佐证了前面提到的发现。
关于多样性系数的取值,他们试了不加多样性奖励、初始系数设为0.2再衰减到0、初始系数设为0.4再衰减到0,还有把奖励施加到所有块而非仅限正向块的版本,结果表明0.2衰减到0的方案效果最好。把奖励施加到所有块上反而比不加多样性奖励还差,这印证了之前的判断:只鼓励正确方向上的多样性才有意义,盲目鼓励所有分支的差异反而会带偏训练。
他们还测试了不衰减、恒定为0.2的系数,结果avg@8明显下降,说明持续给多样性加分会干扰模型对正确解法的巩固。而如果把系数衰减到负值,相当于训练后期反过来惩罚多样性,avg@8有所回升但pass@8明显受损,说明后期强行压制多样性会限制模型的探索广度。
研究者还专门验证了难度自适应机制本身是否必要,对比了一个固定树结构的非自适应版本,结果显示非自适应版本的pass@k明显更低,再次证明前面第一个发现在实际训练里同样成立,而不只是理论分析或者单纯的资源效率考虑。
此外,团队还排除了一种可能的质疑:DATPO效果好会不会只是因为它用了更宽的树结构?他们把两个基线方法TreeRL和AttnRL也换成和DATPO一样的树扩展参数重新训练,结果这两个基线并没有因此变得更好,有些指标反而下降了。这说明DATPO的优势确实来自算法设计本身,而不是简单地靠更多的分支数量堆出来的。
论文也在跨领域数据集GPQA-Diamond和MMLU-Pro上做了额外测试,验证在数学题上训练出来的推理能力能不能迁移到其他学科。结果显示DATPO在大多数情况下都保持了对基线方法的优势,说明这种撑大pass@k的训练方式带来的收益不只局限在数学领域内。
写在后面
这篇论文让我重新想了一个问题:我们评价一个模型"变聪明了",到底应该看什么指标?
如果只看平均正确率,一个模型完全可能在原地打转,把已经会的东西练得更熟,看起来分数在涨,实际上的知识边界纹丝不动。这跟人的学习也很像,刷题刷到熟练不等于真正理解,遇到变了个说法的新题照样翻车。
论文里最让我意外的一点是难度自适应采样这件事。之前我一直以为给难题多分配算力只是工程上的省钱考虑,读完才明白这背后有更深的机制:对简单题过度采样反而是有害的,它会加速模型陷入某种固定套路,牺牲掉本该用于探索的训练信号。这个发现比方法本身更让我意外,因为它推翻了一个大家习以为常的假设。
另外一个值得琢磨的地方是token熵和句子熵的对比实验。研究者特意设计了一个强制拉开距离的token熵版本来排除干扰因素,结果发现即便解决了扎堆问题,句子熵依然更好。这说明选分叉点这件事本身有一个最佳的"分辨率",太细了会陷入局部纠结,选在合适的语义粒度上才能真正撬动路径之间的实质差异。这让我想到很多决策场景里都存在类似的粒度问题,抠得太细反而看不清全局。
论文自己也提到了局限,多样性计算依赖额外的嵌入模型,会增加计算开销;实验规模停留在3B到4B参数量级,更大的模型上是否依然成立还没有验证;应用场景也主要集中在数学推理,逻辑推理和代码生成这些领域还需要进一步验证。
如果一个模型的avg@k很高但pass@k纹丝不动,你觉得这样的"进步"到底算不算真的进步?
Q&A
Q1:DATPO是什么?
A:DATPO全称难度自适应句子熵引导树状策略优化,是一种强化学习训练方法,通过难度自适应的树状搜索加上语义多样性奖励,专门用于扩大大模型的推理覆盖范围(pass@k),而不只是提升平均正确率。
Q2:为什么给简单题多做采样反而会让模型变差?
A:论文实验发现,简单题上模型本来就能做对,反复采样只会让它把熟悉套路刻得更深,牺牲了在难题上的探索动力,导致pass@k不升反降,从61.4跌到56.7;而困难题上多采样能带来更多探索机会,pass@k会持续提升。
Q3:DATPO和其他树状强化学习方法比如TreeRL、AttnRL有什么不同?
A:DATPO用句子级熵而非token级熵选分叉点,避免了高熵token扎堆导致的局部化问题;同时结合难度自适应资源分配和只奖励正确方向上的语义多样性,实验显示其pass@k比AttnRL高出1.9到3.0个百分点。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.