你可能没想过这样一个问题:如果一个学生做完题之后,老师不仅告诉他"对"或"错",还愿意在旁边看着标准答案帮他打分,这个学生会不会学得更快?
答案显然是会的。但奇怪的是,在训练大语言模型的强化学习领域,人们长期以来选择的是另一条路,一条主动放弃"标准答案"这个信息优势的路。这篇来自新加坡国立大学和腾讯混元团队的论文,就是从这个被忽视的可能性出发,重新设计了一套训练方案,起名叫BPCO。
在往下讲之前,有必要先说清楚,这篇论文到底在解决什么问题。
强化学习训练大模型,到底卡在哪儿
现在训练大语言模型做推理任务,比如做数学题,通常要靠强化学习来打磨。模型生成一个答案,系统给它打分,好的答案被强化,差的被削弱,如此反复几千轮,模型的推理能力就会慢慢变强。
这套流程听起来简单,但里面有个核心难题:怎么知道一个答案里,哪一步是好的,哪一步是坏的?
一道数学题的答案可能有几百个token(可以理解为一个个字词单元),最后只有一个总分,对也好错也好,答案对了就是1分,错了就是0分。但这一个总分该怎么拆分给几百个token呢?这就是所谓的"信度分配"问题,强化学习里最经典的难题之一。
目前业界主流的解法叫GRPO,这是DeepSeek团队在2024年提出的方法,思路是让模型针对同一道题生成多份答案(比如16份),然后比较这些答案的得分高低,得分相对高的那份答案里,每一个token都被认为是"好的",得分低的那份里每个token都被认为是"差的"。
GRPO*:Group Relative Policy Optimization,一种通过采样多份答案并比较组内相对得分来估计训练信号的强化学习方法,不需要额外训练一个打分模型。
这个方法的好处是简单粗暴,不需要额外训练一个专门的打分器(业内叫"critic",也就是评论家模型)。但代价也很明显:一道题要生成16份甚至更多答案才能算出一个可靠的相对分数,计算成本直接翻了16倍。而且更别扭的是,同一份答案里所有token都被打上了一样的分,不管这个token是解题思路的关键转折还是无关紧要的连接词,标签都一样。这就像给一篇作文整体打了个分数,却不告诉学生具体哪一句话写得好、哪一句拖了后腿。
那有没有办法只用一份答案,就能给每个token精细地打分呢?
答案是有的,这就是"critic"(评论家模型)的用途。
critic*:一个专门训练出来的模型,用来预测"从某个中间状态出发,未来能拿到多少分",从而给每个token计算出精细化的价值信号,而不需要靠采样多份答案来比较。
这个思路听起来更优雅:不需要采样16份答案,一份就够,因为有个"教练"能实时告诉你,走到这一步,前景怎么样。这正是PPO算法(OpenAI在2017年提出的经典强化学习算法)的核心设计。
但问题来了:为什么大家宁愿多花16倍算力去用GRPO,也不愿意好好训一个critic?
论文给出的答案很扎心:因为critic-based训练太不稳定了,稳定不下来。
这篇论文接下来做的事情,就是像侦探破案一样,一步步找出critic训练不稳定的病根,然后逐个修复,最终拼出一套完整的解决方案,叫作BPCO(Best Practice Critic Optimization,最佳实践评论家优化)。
第一个病根:PPO的裁剪规则,对不同概率的token不公平
先说PPO本身的问题。
PPO用一种叫"裁剪"(clipping)的机制来防止模型更新步子太大。具体来说,它会看新策略和旧策略对同一个token的预测概率之比(这个比值叫ratio),如果这个比值超出某个固定范围(比如0.8到1.2),就把它强行拉回这个范围里,相当于给模型的更新步伐上了个刹车。
但这里藏着一个隐患:ratio是个比值,而不是绝对变化量。
假设一个token原来被预测的概率是0.9,另一个token原来的概率是0.001。同样是把ratio限制在正负20%以内,对第一个token来说,绝对概率最多能变化0.18;但对第二个token来说,绝对概率最多只能变化0.0002。这就导致高概率token能获得远超低概率token的"改变自由度",天平从一开始就是歪的。
论文采用了另一支团队提出的DPPO(Divergence Proximal Policy Optimization)来解决这个问题。
DPPO*:一种改进版PPO,把裁剪边界从"概率的比值"改成"概率的绝对变化量",让每个token无论原本概率高低,都获得同样大小的"允许变化空间"。
这就好比公司发年终奖,如果规定"每个人奖金最多涨20%",那本来工资一万的人能多拿两千,本来工资一百的人只能多拿二十,同样是20%,但绝对获得感天差地别。如果换成"每个人奖金最多涨两千块"这种绝对数值规则,大家的实际变化幅度才真正公平。DPPO做的就是把PPO的"百分比规则"换成"绝对值规则"。
论文的实验结果也验证了这一点:在一个专门设计的小规模测试(1460道能被模型解出的数学题)中,用普通PPO训练,奖励曲线先涨后崩,模型训练着训练着直接垃圾了。换成DPPO之后,同样的设置下曲线稳稳地涨到接近满分。这个对比相当直观地说明了问题所在。
第二个病根:让critic预测一个它本不该预测的数字
接下来是这篇论文自己发现的两个新问题,也是整篇论文最有意思的部分。
第一个问题出在critic的"输出方式"上。
绝大多数实现里,critic模型的最后一层是个普通的线性层,输入进去,直接吐出一个实数,可以是任意大小,正的负的都行。但问题是,如果奖励的范围本来就是0到1(比如做对题给1分,做错给0分),那critic预测的值理论上不可能超出这个范围,因为它预测的是"期望奖励",而期望值一定落在最小值和最大值之间。
可现实中,线性层完全不管这个约束,它可能预测出8,也可能预测出负6,这些数字在数学上根本没有意义。论文的实验图里画得很清楚,未加约束的critic输出值上下能飙到8和负8之间乱窜,而与此同时训练奖励曲线也跟着剧烈震荡。
解决方案是给critic的输出加一层"变形眼镜",用反正切函数把任意实数压缩到奖励的合理区间内。
值预测范围约束*:通过对critic原始输出做一次数学变换(比如反正切函数缩放),强制它的最终预测值落在已知的奖励范围内,比如[0,1],而不是允许它输出任意实数。
这个设计其实很好理解。想象一个温度计,正常情况下人体温度只会落在35到42摄氏度之间。如果你造的温度计允许显示负100度或者正500度这种荒谬的数字,即使实际使用中大概率不会出现,这种"允许出现荒谬值"的设计本身就是个隐患,一旦某次测量出了点误差,显示的数字可能瞬间跳到离谱的范围,把整个体系搞乱。给critic的输出加上边界约束,就是提前把温度计的量程锁定在合理范围内,避免它在训练过程中"跑偏"到没有物理意义的数值,一旦跑偏,后面基于这个错误数字算出来的所有训练信号都会跟着错。
加上这个约束之后,实验里训练奖励顺利地爬到了接近1.0,再也没有出现前面那种诡异的震荡。
第三个病根:自己骗自己的目标值
第二个新发现的问题更微妙,涉及critic到底该"学习预测什么"。
在传统GAE(广义优势估计,一种计算训练信号的经典技巧)方案里,critic的训练目标本身包含了critic自己(或者说,上一轮的critic)的预测值。这就好比一个学生做完模拟题后,自己批改自己的卷子,而且批改标准还是根据自己之前的答案设定的。这样一套"自证循环",会导致一个诡异的现象:critic对着这个自造的目标,拟合得越来越准,论文里用"explained variance"(解释方差,一种衡量预测准确度的指标)来衡量,这个指标能迅速冲到接近1,看起来预测得完美无缺。
但这完全是假象。因为这个目标本身是有偏差的,critic预测得越像这个有偏差的目标,反而离真实的答案越远。论文的图里显示得很清楚,尽管解释方差冲到了1,模型的真实表现(用AIME 2025数学竞赛的准确率来衡量)却一直不稳定。
论文的解法是把"给policy用的折扣参数"和"给critic用的折扣参数"分开设置。critic这边,直接用最朴素的蒙特卡洛目标:一份答案生成完了,最终是对是错,直接拿这个真实结果作为critic的学习目标,不搞任何"自我参照"的花招。
蒙特卡洛价值目标*:直接用一次完整生成过程的最终真实奖励作为critic的训练目标,不依赖critic自己此前的预测值,从而避免"自己给自己出题"的偏差循环。
这个思路可以类比成健身时的体重管理。如果你今天的减重目标是根据"上周体重秤显示的数字"来设定的,而体重秤本身校准有误差,那你可能会一直朝着一个错误的方向努力,体重秤显示的数字倒是越来越"符合预期",但体重秤本身的误差从未被纠正过。真正靠谱的做法是拿一个绝对准确的基准,比如直接称体重,而不是拿有偏差的历史读数去校准新的读数。critic训练也是同理:用真实的最终奖励做目标,才能打破这种自我强化的偏差循环。
改完之后,训练奖励曲线更稳,AIME成绩也不再像之前那样忽高忽低。解释方差的走势也变得"讲道理"了,不再是虚假地冲到1,而是真实地反映预测能力。
第四个病根:批次归一化,一个几乎所有人都在用却可能有害的技巧
这是论文里我觉得最反直觉的一个发现。
很多PPO的实现里都有一个"标准操作":把一批训练样本的优势值(也就是每个token的训练信号)做归一化处理,减去这批数据的均值,再除以标准差。这个操作在深度学习各个领域都很常见,通常被认为能让训练更稳定。
但论文指出,这个操作放在这里恰恰是危险的。
原因在于:随着模型越来越接近最优策略,每个token的优势值本来应该越来越小,因为模型已经学得差不多了,剩下需要调整的空间自然就小。这时候,如果继续对优势值做归一化,除以一个已经很小的标准差,反而会把原本很小的信号硬生生放大成一个很大的数字,导致模型继续被强行推着走,即使它已经学得很好了,也停不下来。
论文管这个现象叫做"训练信号无法自然消退"。
批次优势归一化*:在每一批训练数据内部,把优势值减去均值再除以标准差,使得每批数据的优势值都呈标准分布。论文发现这个常见操作在critic训练接近收敛时会把小信号放大成大信号,从而阻碍训练自然收敛。
这个现象让我想到一个生活中的场景:一个人本来睡眠已经很规律了,每天晚上十点半准时犯困,这时候如果强行用某种放大装置,把他仅存的一丝倦意硬生生放大成一场"必须立刻倒头大睡"的强烈冲动,反而会打乱他本来已经调节得很好的生物钟。如果这个人身体状态还没调好、倦意本来就很强,这个放大装置或许不会造成太大影响;但一旦身体已经调节到位,多余的放大反而会制造混乱,这正是批次归一化在训练后期出的问题:它对"信号该小"这件事视而不见,非要一视同仁地放大到统一尺度。
移除这个归一化操作之后,实验显示优势值的范围保持稳定,不会随着训练无限膨胀,AIME上的表现也变得更稳,过拟合的风险明显降低。
第五个,也是最有意思的一个设计:给critic开"后门"
前面四个问题解决的都是训练机制本身的稳定性。而这一个设计,是这篇论文真正让人眼前一亮的地方。
critic只在训练阶段起作用,训练完了就被丢掉,最终部署上线的只有policy(也就是真正对外提供服务的那个语言模型)。既然critic反正不会被部署,那它凭什么必须和policy看到一样的信息?
论文由此提出:可以给critic看一些policy看不到的"内部资料"。
比如做数学题,policy只能看到题目本身,但critic在训练时可以额外看到这道题的标准答案,甚至详细的解题过程。再比如用评分细则(rubric)打分的开放式任务,policy只知道要写什么,但critic可以直接看到评分标准是怎么写的。
privileged information*:只提供给训练阶段的critic、而policy无法接触到的额外信息,比如参考答案或评分细则。因为这些信息本身是由题目决定的,所以不会改变"理想的价值函数"应该是什么样,但可以帮助critic这个"学生"更容易学会打分。
论文里把这个思路类比成多智能体强化学习里一个经典设计,"集中训练、分散执行",比如星际争霸AI训练时,训练时的评判系统能看到整个地图的全局信息(包括对手看不到的部分),但最终每个游戏单位在实际对战时,只能依据自己视野范围内看到的东西做决策。
这个设计放在日常生活里也能找到对应的场景:一个学生练习模拟考试的作文,老师批改的时候手里拿着范文和评分标准,能精准指出这篇作文哪里扣分、扣在哪个点上;而学生考试的时候,手里当然不可能有范文,他只能凭自己现场发挥。如果批改老师非要"公平"到不看范文,只凭自己脑补一个标准去猜哪里该扣分,那批改质量势必大打折扣,学生也很难得到精准的反馈。给critic"开后门"看答案,等价于让批改老师手握参考答案去打分,而不强迫学生也看到答案。
实验结果证实了这个设计确实有效:在小规模测试里,用了参考答案之后,critic的训练明显加速,解释方差也更高,说明critic确实学得更准了。但同时也暴露了一个副作用:AIME成绩涨得更快,但也更早开始掉头下滑,说明过拟合的风险更大。这提示我们,privileged information不是万能药,在数据量小、容易过拟合的场景下要谨慎使用。而在后面更大规模的实验(4万多道题的数据集)里,这个设计的收益就变得更加稳定和显著,没有再出现小数据集里那种"涨得快、跌得也快"的现象。
第六个修复:让GAE参数跟着回答长度自适应调整
还有一个容易被忽视的细节:GAE里那个控制"信任critic预测多少、信任真实结果多少"的参数λ,如果是个固定值,会在长回答和短回答上产生完全不同的效果。
具体来说,λ小于1时,意味着某个token的训练信号里,真实的最终结果所占的权重,会随着这个token离最终结果的距离呈指数级衰减。对一个只有几十个token的短回答来说,衰减不明显;但对一个几千个token的长回答来说,越靠前的token,权重衰减得越厉害,极端情况下几乎完全依赖critic自己的猜测,而critic本身的误差就会被无限放大。
论文借鉴了另外两个团队(VC-PPO和VAPO/SAO)的思路,让λ跟着回答长度自动调整,回答越长,λ就越接近1,从而保证不管回答长短,最前面的token受到的"真实结果权重"大致相同。
长度自适应GAE*:让GAE里控制折扣程度的参数λ随着回答长度自动变化,避免固定λ在长回答里让最靠前的token过度依赖critic自身可能存在误差的预测。
这就像跑步比赛里给不同距离项目设置不同的补给点密度。如果一场马拉松和一场百米赛跑都用同样固定的补给间隔,比如每隔500米设一个补给站,对短跑选手来说这个补给站形同虚设,根本用不上;但对马拉松选手来说,跑到中后段时,如果补给间隔设置得不合理,越到后面越容易脱水,前几公里靠自己体能撑着还行,后面必须靠外部补给才能撑下去。固定λ的问题在于它对所有长度的回答用同一套"补给策略",而长度自适应GAE则根据实际的比赛距离动态调整补给点的密度,保证不管跑多远,运动员在关键节点得到的"外部支持力度"是相对一致的。
实验显示,固定λ=0.99时训练奖励涨得最快,但AIME成绩在爬升到峰值之后明显掉头下降;固定λ=1时不会掉头,但整体训练效率偏慢;用长度自适应GAE(设定α=0.4)则在这两者之间找到了更好的平衡点,既保持了较快的训练速度,又没有出现过拟合导致的性能回落。
把六个修复拼在一起:BPCO到底表现如何
把上面六个设计,DPPO裁剪机制、值范围约束、蒙特卡洛目标、去掉批次归一化、privileged information、长度自适应GAE,全部组合起来,就是这篇论文提出的完整方案BPCO。
论文在多个规模的实验里验证了这套组合拳的效果。
在一个包含4万300道数学题的更大规模数据集(叫DeepScaleR)上,用1.5B参数规模的模型(DeepSeek-R1-Distill-Qwen-1.5B)测试,BPCO在训练奖励、验证集AIME成绩、解释方差三个维度上都稳定超过了两个对照组:一个是用GRPO变体(16份采样)的group-based基线,另一个是保留了部分旧问题(值范围不受限、仍用批次归一化)的critic-based基线。
在更大的模型上,论文用了Qwen3-30B-A3B系列的两个版本(一个是基座模型,一个是指令微调后的模型),数据集换成了DAPO-Math-17K。结果显示,在指令微调版模型上,原来的critic-based基线在训练100步之后AIME成绩就完全停滞不前,说明优化本身出了问题;而BPCO在同样条件下持续提升,最终成绩明显超过了group-based基线。在基座模型上,BPCO和group-based基线打得不相上下。
最后,论文还测试了一个完全不同类型的任务:用评分细则(rubric)打分的开放式问题,而不是有明确对错答案的数学题。这时用的是Qwen3-4B模型,配合一个冻结的裁判模型(Qwen3-4B-Instruct-2507)根据每道题专属的评分标准来打分。结果显示,BPCO及其带privileged information的变体都比group-based和critic-based基线学得更快,尽管group-based基线最终也能追上差距。有意思的是,在这个相对简单的任务里,给critic加privileged information(也就是让它看到评分细则)并没有带来额外收益,这也印证了前面提到的,privileged information的效果是任务相关的,不是放之四海皆准的万能加成。
下面这张表格总结了论文里几个关键实验场景的核心结论:
| 实验场景 | 模型规模 | 关键对照 | BPCO表现 |
| 小规模sanity test | 1.5B | PPO vs DPPO | **DPPO稳定,PPO训练崩溃** |
| 值范围约束消融 | 1.5B | 有界vs无界值预测 | **有界值预测显著更稳定** |
| DeepScaleR大数据集 | 1.5B | Group基线 vs Critic基线 vs BPCO | **BPCO全面超越两个基线** |
| Qwen3-30B-A3B(指令版) | 30B-A3B | Critic基线 vs BPCO | Critic基线100步后完全停滞,**BPCO持续提升** |
| Rubric评分任务 | 4B | Group vs Critic vs BPCO | **BPCO学习速度最快** |
需要说明的是,这套方案目前主要在数学推理和评分细则这两类任务上得到了验证,论文自己也坦诚地指出了局限:BPCO依赖一个已知的奖励范围(比如0到1),如果奖励范围本身未知或者不固定,这套值约束的设计就需要调整;privileged information的方案要求确实存在可用的标准答案或评分标准这样的额外信息,不是所有任务都有;另外,训练一个critic本身也会带来额外的计算和显存开销,这在一些资源受限的场景下也是需要权衡的成本。
写在后面
读完这篇论文,最触动我的其实不是某个具体的技术修复,而是它揭示的一个更根本的问题:我们经常把"某个方法效果不好"简单归因为"这个方法本身有缺陷",然后转头去找别的方法,就像大家看到critic不稳定,就一窝蜂涌向GRPO这种不需要critic的方案。但这篇论文提醒我们,很多时候不稳定的原因并不在方法本身,而在于实现细节里那些没人仔细检查过的假设,比如"值预测理所当然可以是任意实数",比如"归一化理所当然是件好事"。
另一个值得留意的细节是privileged information这个设计。它本质上触及了一个更大的问题:机器学习系统在"训练"和"部署"这两个阶段,到底应该共享多少信息?这篇论文给出的答案是,只要这个额外信息不会改变任务本身的理想解,那么在训练阶段"开个后门"没什么不可以。这个思路其实在很多领域都能找到影子,人类的学习过程里,老师看到的信息(教案、评分标准)本来就比学生多,这不是不公平,而是教育本身该有的样子。
那么下一个问题是:如果连"标准答案该不该告诉critic"都能重新讨论,还有哪些我们默认"理所当然"的训练设定,其实也值得被重新审视一遍?
Q&A
Q1:BPCO是什么?
A:BPCO全称Best Practice Critic Optimization,是新加坡国立大学和腾讯混元团队提出的一套单样本critic训练方案,通过组合DPPO裁剪机制、值范围约束、蒙特卡洛价值目标、去除批次优势归一化、长度自适应GAE,以及可选的privileged information(比如让critic看到标准答案),解决了critic-based强化学习训练不稳定的问题,只需要采样一份答案就能达到甚至超越采样16份答案的group-based方法(如GRPO)的效果。
Q2:为什么给critic看标准答案不算作弊?
A:因为critic只在训练阶段发挥作用,训练完成后就会被丢弃,最终对外提供服务的policy模型从始至终只能看到题目本身,看不到标准答案。而标准答案这类信息本身是由题目决定的,并不会改变"理想的价值函数"应该长什么样,只是能帮助critic这个"打分者"更容易学会准确打分,类似于老师批改作文时手里拿着范文,但学生考试时手里没有范文。
Q3:BPCO相比GRPO这类group-based方法有什么优势?
A:最大的优势是不需要为每道题采样多份答案(GRPO通常需要采样16份),只需要一份答案就能给每个token计算出精细化的训练信号,大幅降低了计算成本。实验显示,在数学推理和评分细则打分任务上,BPCO的表现能匹配甚至超过group-based基线,同时避免了GRPO把同一份答案里所有token打上同一个笼统标签的问题。
热门跟贴