RLVR真相:稀疏关键令牌修正如何重塑强化学习训练
最近大模型圈子里“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实验都会突然变得清晰起来。