最近大模型圈子里,“RLVR”这个词几乎成了数学和代码模型的标配玩法。大家默认这套流程是通过大量试错和奖励信号,把模型的推理能力“训”出来的。但某头部研究团队最近抛出的观点很有意思:所谓RLVR,实际上只做了一件事——把整个序列里那几个最关键的令牌修正一下。说白了,它的作用面远比我们想象中窄,但效果又远比想象中集中。
我一开始听到这个结论的时候,第一反应是:这不就是个常识吗?模型当然是通过修正错误步骤来提升的。可真去把梯度、奖励、令牌级别的数据翻出来看之后,才发现这个“常识”背后的工程含义比想象中大得多。它直接影响到我们怎么做奖励建模、怎么筛数据、怎么设置训练目标。这篇文章我就从概念、证据、实操几个角度,把这个“稀疏关键令牌修正”讲透,顺便聊聊我在实际训练里踩过的坑。
1. RLVR到底改了强化学习的什么玩法
1.1 从RLHF到RLVR的转变
强化学习在语言模型里并不是新东西。早几年大家最熟悉的是RLHF,也就是基于人类反馈的强化学习。流程大致是先训练一个奖励模型,用来模拟人类对回答质量的打分,然后再让语言模型根据这个奖励信号去优化策略。奖励模型怎么来的?需要大量人工标注排序数据。成本高、周期长,而且奖励模型本身可能被模型“钻空子”。
RLVR直接换了个思路:不再依赖人训练奖励模型,而是把“能不能验证”这件事当成奖励。答案对不对,看是否匹配标准答案;代码跑不跑得通,看单元测试是否通过;逻辑推理是否成立,看能否到达预设结论。这种可验证的奖励天然干净、无偏,几乎不需要人工介入。这也是为什么最近一年里,多家团队在做数学推理和代码生成场景时,都从RLHF切到了RLVR。
但这里有个隐藏问题:可验证奖励通常是稀疏的。一个数学题最终答案对了,中间有一两步是凑巧蒙对,还是真正理解了解题路径,奖励信号根本看不出来。按传统RL的直觉,奖励越稀疏,学习越困难。可实际训练结果却表明,RLVR在数学和代码任务上的效果反而非常稳定。这个现象迫使研究者们重新思考:RLVR真正在改变模型的什么?
1.2 奖励信号干净,不等于梯度密集
很多人理解RLVR的收益来源是“奖励信号更精确了,所以模型学得更快”。这个说法对了一半。奖励信号精确没错,但精确不等于密集。一条推理链可能有几百上千个令牌,最终奖励只是序列末尾的一个标量。这个标量要通过反向传播,把“功劳”或“责任”分摊给每一个令牌位置。分摊的过程中,数学上看起来每个令牌多多少少都有梯度,但实际上不同令牌对最终奖励的影响差异极大。
一个极端的现象:如果模型在第二步就把等式列错了,后面所有步骤都算错,那么真正“导致错误”的是第二步那几个令牌。后面那些令牌虽然也被推倒重建,但它们在强化学习里更多是“被连坐”的。如果奖励是正向的,也是同理,真正让答案得分的可能是模型灵光一闪写对了关键变换,其余内容都是重复的推导套话。这些套话令牌拿到正梯度,其实只是沾了光。
“稀疏关键令牌修正”这个提法,本质是在说:RLVR训练过程中的有效信号,集中在少数能够左右最终奖励的令牌上。模型参数的更新,大部分能量都花在修正这些令牌对应的内部表征,而不是均匀地改变整条序列的生成概率。理解这一点,才谈得上设计更省力的训练方案。
2. “稀疏关键令牌修正”这个结论是怎么来的
2.1 令牌级别的作用差异比想象中大
要验证一个训练方法到底改了什么,最直接的办法是看训练前后模型在每个令牌位置上的生成概率变化。某团队在实验里发现,模型经过RLVR之后,大部分令牌的生成概率变化幅度非常小,甚至有些令牌几乎没动。可一旦把目光放到少数关键令牌上,变化幅度会高出几个数量级。
这其实符合直觉。语言模型本身经过了大规模预训练和指令微调,绝大多数常见表达已经非常稳定。你在强化学习里让它多做几道数学题,它并不会突然改变“所以”“因为”“综上所述”这些连接词的用法。它真正要调整的,是那些导致对错分化的决策点。比如该不该用某个定理、该不该交换求和顺序、该不该在边界条件下做分类讨论。这些关键决策点往往只对应序列里的一两个令牌。
如果非要用个类比,就是批改作文。老师看完一整篇800字作文,最后给的分数其实只取决于立意、论据逻辑和是否跑题这几个核心点。字迹工整、句子通顺虽然也重要,但它们在改卷信号里几乎不产生区分度。RLVR的奖励也是这样,它不关心你的文本流畅度,只关心最后有没有撞对那个标准答案。因此整个训练信号天然就往关键令牌上集中。
2.2 关键令牌不是“单个字”,而是“决策节点”
这里需要注意一个容易理解偏的地方。所谓“关键令牌”,并不一定是某个单独的字符,更准确地说是某个关键的决策动作。在语言模型的输出里,一个决策可能由几个令牌共同表达。比如模型需要决定“将两边同时除以x,但要先声明x不等于零”,这个决策可能对应“若x≠0”这几个字。它们共同构成一个决策节点,也就是一个迷你步骤。
从强化学习的角度看,决策节点才是真正的“动作”。RLVR的奖励函数只验证最终结果,无法直接告诉模型哪个决策节点是错的。但通过梯度归因可以发现,在序列的所有决策节点里,只有少数几个节点与最终答案的正误强相关。模型的优化过程,说穿了就是在修正这些节点的输出分布。
这对数据采集和训练设计的启发很大。以前我们总以为强化学习需要大量多样化样本,让模型见多识广。但从“稀疏修正”的视角看,如果样本里的关键决策节点经常是重复的,那么即使样本数量看起来很大,有效信息量依然很低。反过来,一小批专门针对高频错误决策节点设计的样本,可能比随机的大规模采样更有价值。
2.3 修正不等同于生成
还有一点值得强调:这个观点说的是“修正”,而不是“生成”。传统RL框架里我们习惯默认模型应该在探索中生成多样化路径,然后从成功路径里学到东西。但对于已经经过SFT的模型来说,绝大多数推理路径已经能走得通,真正欠缺的往往是最后那几下“点破窗户纸”的动作。
这个区别会带来完全不同的训练策略。如果目标是“生成”,你会希望奖励信号鼓励模型探索更多创造性解法;如果目标是“修正”,你会更倾向于让模型在容易出错的节点附近集中采样,然后通过奖励信号精准调整。后者的计算开销更小,收敛速度也更快。我在实际跑实验时也明显感觉到,把训练数据里那些“整体很弱、从头错到尾”的样本比例降下来,把“中间某一步错、但整体结构接近正确答案”的样本比例提上去,RLVR的收益会立刻变大。这就是“修正”逻辑在起作用。
3. 实验里怎么验证“真是这些关键令牌在起作用”
3.1 从梯度归因到贡献度排序
理论说得再好,也得有数据支撑。最常用的验证手段是令牌级别的梯度归因。具体做法是取一条RLVR训练中的样本,计算最终奖励对每个令牌嵌入的梯度,然后乘以令牌表示本身,得到每个位置对奖励的“贡献值”。把所有位置按贡献值排序,你会发现分布极度长尾。排在前面5%的令牌贡献了大部分梯度能量,剩下95%的令牌的贡献值趋近于零。
做这个实验的时候有个坑:梯度是符号化的,正负号混合在一起,直接看原始值容易被噪声干扰。建议按贡献绝对值聚合,或者按“梯度范数”计算每个位置的重要性。我在某开源代码里看到过一个做法,是按所有令牌的梯队范数做归一化,然后画累积贡献曲线。曲线在前几个令牌处就冲到80%以上,后面几乎是平的。这种可视化结论给审核的人看,一句话就能说明白。
需要注意的是,梯度归因本身存在一定的近似性。对于很长的序列,反向传播路径较深,梯度可能会受“梯度消失”影响,导致前面的令牌被低估。所以更稳妥的做法是结合多种归因方法,比如积分梯度、扰动法,或者干脆直接做替换实验。
3.2 替换和屏蔽实验:谁才是真正的“题眼”
比梯度归因更直观的验证方法,是在模型生成完成后,手动修改序列中的某些令牌,再观察最终答案的变化。如果修改的是一个“关键令牌”,哪怕只是改一个数字或者一个符号,最终答案很可能从正确变成错误。如果修改的是“非关键令牌”,比如换一个同义词、加一个连接词,最终答案大概率不受影响。
这类实验适合放在推理模型的测试集上做,可以批量自动化。操作流程大致是:让RLVR训练后的模型生成答案,然后用一个工具从答案里提取关键节点;之后生成两个变体,一个改变关键节点,另一个改变非关键节点;最后统计答案正确率的变化。我在复现类似实验时发现,改掉关键节点后,正确率直接下跌40到60个百分点;改掉非关键节点,正确率只会有两三个点的波动。
这种实验的优势是干净直观,不需要复杂的数学工具。劣势是人工判断“关键节点”会引入主观偏差。为了降低偏差,可以尝试让多个模型独立标注,取标注结果的重合部分作为关键节点。重合度越高的位置,越接近团队论文里所说的“稀疏关键令牌”。
3.3 训练动力学:关键令牌的loss先降,其他令牌慢慢跟上
观察训练过程中的令牌级损失也能看到“稀疏修正”的影子。在RLVR训练初期,模型在大多数普通令牌上的loss本来就不高,真正高loss的位置集中在少数关键令牌附近。随着训练推进,这些高loss位置会快速下降,速度明显快于普通位置的下降速度。
如果你把训练记录里的令牌级loss单独抽出来看,会发现一个有意思的现象:模型并不是平均地“学会”所有步骤,而是在很早期就攻克了那批关键错误,后续训练只是在巩固和泛化。这很像学生做错题本,真正提分靠的是反复订正那几道高频错题,而不是把整本书从头抄一遍。
这个现象给训练监控带来的启示是:不要只盯着整体reward曲线,还要盯关键令牌的命中率。比如在数学数据集上,你可以定义一组常见的关键步骤模板,统计模型输出里正确命中这些模板的比例。这个比例往往比整体准确率更早反映训练效果。如果这个比例不再上升,就算整体reward还在涨,也要小心训练进入过拟合或随机摸索阶段。
4. 实操:怎么把这个观点用在训练流程里
4.1 别再把所有令牌一视同仁地算loss了
很多RLVR的工程实现,本质上还是在用策略梯度类方法,对序列里所有生成令牌赋予相同的概率更新权重。但“稀疏关键令牌修正”告诉我们:大部分令牌处的更新其实是噪声。如果能在计算loss时把关键令牌的权重调高、把非关键令牌的权重压低,训练的稳定性和收敛速度都能改善。
具体操作可以这样:对每条样本,先用一个小模型离线识别出关键令牌位置,生成一个0到1之间的“重要性掩码”。在计算策略梯度时,按掩码对每个位置的log-probability梯度做加权。重要性高的位置权重设为1.5到2.0,普通位置设为0.2到0.5。我这里给的是参考范围,具体还得看任务。权重不宜拉得过大,否则模型会变得过度关注局部令牌,输出连贯性会打折扣。
另外也可以考虑在奖励函数里直接引入关键令牌命中率。比如生成答案后,不仅检查最终答案是否正确,还检查解题过程中是否出现某个必要的中间条件。只要把这两者结合起来,奖励信号就会比单纯的“最终答案对不对”更细腻,且不会引入额外的奖励模型成本。这种设计既符合可验证奖励的初衷,又贴近“修正关键节点”的思想。
4.2 数据筛选要盯“关键错误”而不是整体错率
做RLVR的第一步通常是从SFT模型采样,构造候选样本池,然后挑出那些“答错”的样本用于训练。大多数团队会倾向于选择最终答案错误的样本,觉得这些样本“有东西可学”。“稀疏关键令牌修正”这个观点会提醒你:光看最终答案对错是不够的,还要看错误到底出在哪个节点。
我自己的经验是构造样本时做一次错误分类。把最终答案错误但推理过程结构完整的样本单独放一类;把中间某一步严重偏离、后续完全跑飞的样本放另一类。RLVR训练时优先用第一类。因为第一类样本只需要“修正”少数几个关键令牌,学习目标很聚焦,模型很容易从奖励信号里感知到“原来是要把这个节点改对”。第二类样本虽然也是错的,但错误节点太多,奖励信号非常稀疏,模型学到的是“从头再来”,效率反而不高。
这不是说第二类样本完全不用,而是要控制比例。我建议第一类样本占比不低于七成。如果你发现候选池里第二类样本居多,那说明你的SFT模型底子还不够,先去把SFT阶段的数据质量和训练轮次提升,再回来做RLVR,效果会更好。硬上强化学习只会浪费时间。
4.3 奖励信号也要学会“抓大放小”
我见过不少人在设计RLVR奖励时,恨不得把每一步的正确性都拆出来打分。比如“用了正确的公式给10分,列了过程给5分,格式正确给3分”。这样看似精细,但很容易偏离“可验证”的本意。你手动细化的规则越多,就越像在隐式训练一个奖励模型,规则之间还会产生冲突。
更可持续的做法是保持奖励信号尽量简单,但把关键决策点显式地编码进去。以解方程为例,最终奖励由三部分组成:答案是否正确、是否出现关键步骤(例如“验证x≠0”)、是否满足输出格式。只保留这三个信号,其他细节不做要求。模型的优化压力会自然集中在三处,也正好对应那几个关键令牌。
这背后的逻辑是:RLVR的优势本来就来自奖励可验证、无歧义。你引入越多的手写规则,就越接近早期RLHF里的奖励工程,也越容易引入奖励函数漏洞。保持奖励简单,让优化压力自适应地落到稀疏关键令牌上,反而更符合方法论的初衷。
4.4 训练监控指标要跟着“关键令牌”走
既然RLVR是在稀疏地修正关键令牌,那么评估训练是否正常,就不能只看整体准确率。整体准确率是个滞后指标,而且容易被大量简单样本掩盖。更好的做法是拆出几类关键令牌,对每一类单独统计错误率,并把它们画进训练曲线里。
比如代码生成场景,可以定义“函数签名是否正确”“循环边界是否处理”“错误分支是否有返回”;数学场景可以定义“条件判断是否遗漏”“代数变换是否等价”“最终答案是否化简”。训练过程中,这些错误率应该呈现阶段性下降。如果整体reward在涨,但某个关键类目的错误率纹丝不动,这时候就要警惕模型是不是在“刷分”了。
监控工具不需要很复杂,写个脚本定时评估一个小型验证集即可。每过几百步,从验证集里抽出若干样本,用规则或轻量判断逻辑检测关键令牌是否出现。把检测结果记录到训练日志里,与reward画在同一张图上。这比依赖单一的奖励函数可靠得多,能帮你提前发现训练跑偏的迹象。
5. 常见问题与排查技巧实录
5.1 关键令牌识别不稳定怎么办
不同样本里,关键令牌的分布可能差异很大。有时候模型只错在最终答案的格式上,有时候错在中间某一步的符号变换。如果识别关键令牌的规则写得太死,很容易漏掉真正的错误点。我的第一个建议是,不要试图用一套规则覆盖所有情况。先做一个粗分类,把问题归为“过程错”“结果错”“格式错”三类,再针对每一类设计关键令牌识别逻辑。
第二个建议是引入自一致性。让模型对同一个问题生成多次答案,找出多次生成中发生变化且与最终正确性相关的令牌位置。如果某个位置一变,答案就从错变对或从对变错,那它大概率是关键位置。这个思路不需要额外训练模型,只依赖采样和比较,工程上非常容易落地。
5.2 只关注关键令牌,模型会不会丢掉泛化能力
这是我最常被问到的担忧。确实,如果训练过程中过度使用关键令牌掩码,模型可能会形成一种“应试技巧”:平时不注意推理细节,只等关键位置被“修正”。但在实践中,只要控制好加权幅度和样本分布,泛化能力不会受损。关键令牌修正可以理解为一种课程学习,前期加速收敛,后期仍然要放开权重让模型自主探索。
我在一个模拟项目X里试过两种配置:一种全程加权,一种前20%训练步数加权后慢慢衰减到等权。结果显示,后者的最终准确率更高,尤其在分布外测试集上优势明显。原因也不难猜,全程加权会让模型对非关键位置的表征更新过少,导致长尾表达不稳定。衰减到等权则保证后期模型还能“通读全文”,保持生成连贯性。这个经验强烈建议沿用。
5.3 RLVR和SFT、DPO的配合顺序有没有讲究
很多团队现在把SFT、DPO、RLVR三件套连着用。从稀疏修正的角度看,顺序确实有讲究。SFT阶段可以看成是建立基线能力,让模型能输出结构完整的推理过程。DPO阶段适合做偏好对齐,教模型“哪种解法风格更好”。RLVR放到最后,用来精准修正那些容易出错的关键决策节点。
不建议一上来就做RLVR,除非你的SFT模型已经很强了。我见过一个反例:SFT阶段数据量不够,模型连基本格式都经常出错,直接上RLVR后,训练过程极其不稳定,奖励曲线像过山车。后来把SFT数据补足再上RLVR,同样预算下效果立刻提升。核心原因就是SFT没把“非关键令牌”的大盘稳住,RLVR一上来就要修正太多地方,稀疏性优势完全发挥不出来。
5.4 一个建议的配置方案参考
| 配置项 | 建议值或方案 | 备注 |
|---|---|---|
| 关键令牌权重 | 1.5到2.0 | 太高会让输出不连贯 |
| 非关键令牌权重 | 0.2到0.5 | 需要保留基础生成能力 |
| 关键错误样本占比 | 不低于70% | 其余样本可以来自多路径采样 |
| 奖励组成 | 最终答案 + 关键步骤命中 + 格式 | 每类信号单独计算后加权 |
| 关键令牌识别方法 | 自一致性 + 规则粗分类 | 两条腿走路更稳 |
| 权重衰减策略 | 训练步数前20%加权高,后期衰减 | 避免过拟合关键位置 |
| 验证集监控 | 关键令牌错误率 + 整体reward | 两者都看,不能只盯一个 |
表格里的参数不是死的,不同模型规模的推荐值会变。一般来说,模型越小,学习容量越小,关键令牌权重可以适当调高;模型越大,普通令牌的建模能力越强,权重差异可以缩小。如果你用的是70B级别的模型,甚至不需要额外加权,模型自己就能从稀疏奖励里学到关键修正。小模型则需要人工把信号拧得更集中。
5.5 值得收藏的排查清单
训练不收敛时,先别急着加数据。按这个顺序排查:打开验证集样本,检查奖励信号是否真的与关键令牌错误相关;然后看训练早期的梯度范数分布,确认是不是少数位置占掉了大部分梯度;再看关键令牌错误率有没有下降趋势。如果三者都正常,大概率是训练超参数的问题,而不是RLVR方法本身的问题。
如果关键令牌错误率在下降,但最终答案正确率不涨,那大概率是奖励函数里混进了和正确答案无关的成分。比如你加了“回答长度”作为奖励,模型很快就会去刷长度,正确率原地踏步。处理办法是把奖励信号拆开逐项看,哪项与最终答案正确率的相关性低,就果断删掉。
还有一个小技巧:定期从训练集里挑出那些“关键令牌修正成功”的样本,存成一个成功案例库。训练结束后,用这些案例做一次模型对比,观察修正前后的输出差异。这不仅能帮你理解模型学到了什么,也能给下一步数据生产指明方向。我每次做完一轮RLVR训练,都会在案例库里翻一翻,很多灵感和教训都是从这些细碎差异里来的。
我个人在实际操作中的体会是,“稀疏关键令牌修正”与其说是一个严格的理论,不如说是一个非常好的视角转换工具。它把我们从“奖励越多越好”“样本越多越好”的惯性思维里拉出来,逼着我们去思考:一个差模型到底差在哪几个节点,一次训练到底该把算力花在什么地方。顺着这个思路走下去,很多看似难调的RLVR实验,都会突然变得清晰起来。