ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RLVR训练隐忧:验证器诱导策略支持重塑造,削弱后续学习能力

RLVR训练隐忧:验证器诱导策略支持重塑造,削弱后续学习能力 北大一项研究公开的结论值得每个在做 RLVR 训练的人停下来读一遍用验证器驱动的强化学习训练大模型评测分数会涨但模型后续继续训练的能力会被削弱。研究把这种现象称为“验证器诱导的策略支持重塑造”Policy Support Reshaping下文中简称为 PSR。换句话说模型没有被奖励信号带坏也没有明显过拟合训练集而是被验证器悄悄塑造成一个“考试型选手”当前题目答得不错但策略空间被压窄之后再学新知识、迁移新任务都更困难。这篇博客会把这个问题拆开讲清楚RLVR 为什么在当前推理模型训练里这么好用北大的研究揭示了哪种机理层面的副作用策略支持重塑造怎么一步步挤掉模型的后续训练能力以及做实际训练时应该怎么规避。文章侧重工程决策视角不追求复现论文原实验只尽量把机制讲透并给出可以落地的训练设计建议。1. 核心发现速览先把整篇内容的关键信息放在前面方便快速判断值不值得继续读。维度信息研究对象基于验证器奖励的强化学习训练范式RLVRRule-based Verifiable Reward核心发现RLVR 训练会压窄大模型的策略支持集导致后续继续训练能力下降关键机制验证器只对最终答案打分中间策略分布被重塑模型输出支持集收缩受影响能力分布多样性、任务迁移、后续 SFT/新知识注入、开放生成质量受影响不明显的能力已验证任务域内的评测分数如数学题、代码题、固定格式逻辑题主要风险场景先 RLVR 后继续预训练、先 RLVR 后多任务 SFT、RLVR 后接开放领域产品化微调建议使用方式控制训练步数、限制任务域、降低奖励信号强度、RLVR 后补充恢复性 SFT适合读者做大模型对齐、推理增强、RLHF 替换方案、持续学习研究的工程师和研究者从标题的表述看这不是说“RLVR 不能用”而是说“RLVR 的成本比表面更高”。如果你只关心把数学和代码评测分数刷上去RLVR 依然是非常高效的训练手段如果你需要模型在 RLVR 之后继续成长那就要对训练阶段做专门的设计。2. RLVR 为什么成为推理模型训练的主流选择RLVR 的全称是 Rule-based Verifiable Reward Verification即基于规则验证器的强化学习。它和传统 RLHF 最大的区别在于奖励来源RLHF 需要训练一个额外 reward modelRLVR 直接用规则判断答案是否正确。这种设计让它有几个非常突出的优点。第一奖励信号干净。验证器不会像人类偏好模型那样被措辞、长度、格式带偏也能避免一部分 reward hacking。数学题答案匹配、代码题测试用例通过率、逻辑题格式校验都天然适合规则化判断。第二训练基础设施轻。不用额外维护一个不断更新迭代的 reward model训练管线少了一个大组件。对很多研究团队来说这意味着稳定性和成本大幅改善。第三在可验证任务上收敛快。因为奖励信号密集且没有衰减PPO 在推理类任务上能较快找到“把题做对”的路径。当前不少推理模型采用类似思路训练核心原因就在这里。但问题也出在这个“干净”上。规则验证器只认识最终答案它对生成路径是否有泛化价值完全不敏感。模型只要能输出验证器认可的答案奖励就给满至于模型是用一种更鲁棒的推理方式输出答案还是在投机取巧形成狭窄的解题模式验证器一律不关心。于是就有了北大这项研究关注的策略支持重塑造问题。如果对强化学习目标函数有一定了解可以先用最简化的形式理解这一点优化算法会不断放大高奖励 token 的概率压低低奖励 token 的概率。验证器给奖励的方式越“单一”模型最终停留在的策略分布就越“尖”。从经验上看在评测集上分数越高这个尖峰往往越明显。3. 什么是验证器诱导的策略支持重塑造策略支持重塑造是这篇研究的关键概念。要理解它先要理解“策略支持集”。在强化学习里策略Policy定义了模型在某个状态选择每个动作的概率。策略支持集则可以被理解为模型有非零概率输出的全部内容区域。一个健康的通用大模型支持集应当比较宽既能严谨推理也能自由写作既能用长答案也能用短答案。RLVR 训练后的关键变化就是这个支持集被重新塑造了变得又窄又集中在验证器偏好的模式附近。具体来说可以分成三步看。第一步验证器与策略之间形成“窄通道”。验证器只对结果是否匹配标准答案打分模型发现某种固定套路更容易获得正奖励于是逐步放弃其他表达方式。第二步PPO 更新过程强化窄通道。高奖励的 token 序列概率被不断放大低奖励但未必错误的序列被持续压制。初始时模型也许有十种方式接近正确答案训练后可能只剩两种甚至一种。第三步模型策略分布重心完全偏向验证器偏好的模式。推理过程、格式、答案长度、语言风格都会被重塑。表面看是推理能力增强实际上是策略在“迎合验证器签名”而不是泛化性变强。北大研究的标题用了“诱导”这个词这个定性很重要。验证器没有显式要求模型压缩策略但奖励结构与优化算法的组合效果就是在诱导模型这么做。模型不是随机变窄的而是被验证器的评分函数精确引导着变窄。和 reward hacking 的区别也需要说清楚reward hacking 是模型找到了奖励函数的漏洞输出并不真正满足任务目标PSR 则是模型输出真的满足验证器要求只是策略支持变窄了。更麻烦的是由于答案本身正确这种变窄很难通过评测分数察觉。4. 策略支持重塑造如何破坏后续训练能力这一节回答核心问题模型已经会做题了为什么后续训练能力反而变差可以从三个层面理解。第一层面分布熵下降可塑性降低。可塑性plasticity是强化学习中一个常用概念指模型继续学习新任务的能力。RLVR 训练把策略分布推向低熵状态后梯度对参数的影响方式会改变。反向传播时模型需要更大的更新幅度才能让高概率 token 区域发生移动这会让后续 SFT 变慢、变不稳定。第二层面支持集变窄导致覆盖度塌缩。后续训练本质上是让模型在旧能力基础上长出新的能力。如果旧能力的策略支持被压成一根针新能力就缺少可以利用的锚点。比如模型已经只会输出“最终答案是 X”这种极短格式你再让它做需要展示完整推导过程的指令跟随任务它很难迁移。第三层面验证器的评分函数成为新的“隐性先验”。模型在 RLVR 阶段学到的不仅是答案分布还包括“验证器会怎么评分”这个元规则。它会在后续生成中继续寻找符合该规则的解而不是按照新任务目标生成。也就是说即使你已经切换到了新任务的数据集模型依然倾向于沿用 RLVR 阶段的输出偏好。这种惯性会严重干扰后续训练。论文用“策略支持重塑造”而不是“过拟合”或“灾难性遗忘”就是因为这个现象并不表现为模型完全遗忘旧知识而是表现为模型输出行为被策略性地固化到验证器要求的范围里。你问它新领域的问题它可能还会尝试用旧策略作答你让它做开放生成它输出的多样性明显下降但单看文本质量又不像出了问题。5. 判断你的模型是否已经出现重塑造过度如果你正在做 RLVR 训练可以通过几个简单信号判断模型是否已经出现明显的策略支持重塑造。第一个信号是重复率异常升高。同一个 prompt 用较高温度生成多次结果几乎同构甚至完全一致。正常的通用模型即便在推理任务上也有一定多样性RLVR 训练后多样性会明显下降。可以在训练过程中每隔若干步做一次温度 0.9 的生成采样统计输出集合中的去重比例。第二个信号是指令扰动敏感。把同一道题的中文描述换成同义句或改成英文、日文模型正确率显著下降。这个现象说明模型学的不是通用解题策略而是窄模式的匹配策略。策略支持越窄对输入形态越敏感。第三个信号是后续 SFT 的 loss 下降变慢。在 RLVR 之后的模型上继续做通用 SFT你会发现同样的数据量收敛速度明显慢于直接从基座模型开始训练。如果 loss 长时间不降或出现反复震荡很可能就是策略空间已经被压缩得很难移动。第四个信号是验证器分数与人类判断长期偏离。RLVR 模型在验证器上分数很高但人工看生成结果却觉得推理过程粗糙、解释生硬、答案空降。验证器分数上升但感知质量停滞说明模型主要做了“支持重塑造”而不是真正提升了推理深度。如果你发现模型出现了这些信号就需要警惕了。短期的处理办法是提前结束 RLVR 训练或大幅调低奖励系数和 KL 惩罚权重。长期办法则是采用下文提到的两阶段设计。6. RLVR 与标准 RLHF 的后续训练能力对比不是所有强化学习都会造成同样的策略支持收缩这需要对比来看。对比项RLVR标准 RLHF奖励来源规则验证器只判断最终结果Reward Model判断整体偏好奖励信号粒度稀疏且二元只看对错连续且多维包含格式、内容、语气策略收缩程度高容易形成单一窄通道较低reward model 偏好更多元后续 SFT 影响明显损伤新任务学习能力损伤相对小但仍有偏好固化训练成本低无需维护 RM高需要迭代 RM泛化能力依赖任务域域内强、域外弱覆盖度较好但存在迎合 RM 的问题适用方向数学、代码、逻辑、标准化考试对话、写作、通用助手能力从表格能直观看出RLVR 的优势是低成本和高效率代价是策略多样性变差。标准 RLHF 因为奖励模型从多个角度评判更丰富的特征策略支持不至于被压缩到极端窄的区间。但 RLHF 同样存在偏好固化问题只是表现没有 RLVR 这么极端。还有一种折中路线值得关注先做标准 SFT再做较小比例的 RLVR最后配合一个回归通用能力的轻量 SFT。这种混合策略可以在保留 RLVR 推理增益的同时部分恢复策略分布宽度。北大研究的结论更像是在提醒RLVR 不是免费的午餐用它之前就要规划策略恢复步骤。7. RLVR 训练中使用验证器奖励的简化目标函数为了让讨论更具体下面给出一个简化版的 RLVR 训练目标函数代码。注意这不是北大研究的源代码而是帮助理解 PPO 更新过程中策略收缩如何被强化的通用示意。# 简化示意PPO loss 中策略项与 KL 惩罚项 import torch import torch.nn.functional as F def ppo_loss( log_probs, old_log_probs, advantages, kl_divergence, epsilon0.2, kl_coef0.05, ): ratio torch.exp(log_probs - old_log_probs) clipped_ratio torch.clamp(ratio, 1 - epsilon, 1 epsilon) policy_loss -torch.min(ratio * advantages, clipped_ratio * advantages).mean() kl_penalty kl_coef * kl_divergence.mean() return policy_loss kl_penalty这段代码里的kl_penalty就是约束策略不偏离参考策略太远的关键。如果kl_coef设置得很低模型就可以自由塌缩到验证器偏好的窄区域。如果设置得过高RLVR 的推理收益又会不明显。需要根据任务域做调参不能直接照搬一个固定值。再看验证器奖励的生成逻辑。RLVR 中验证器通常不参与前向计算只在生成完整回答后给出一个 0 或 1 的稀疏奖励# 简化示意验证器奖励函数实际项目需要按规则替换 def verifier_reward(question, generated_answer, ground_truth, task_typemath): if task_type math: # 数学题匹配最终答案 return 1.0 if generated_answer.strip() ground_truth.strip() else 0.0 if task_type code: # 代码题运行测试用例 passed run_hidden_tests(generated_answer, question) return passed return 0.0验证器越简单奖励信号就越粗糙模型能学到的信息就越少最终只能趋向于“如何输出验证器认可的字符串”。这也是 PSR 的直接来源之一。如果验证器能返回中间判据比如推理步骤是否完整、用了多少步、是否包含必要定理等策略支持重塑的程度就会减轻一些。8. 实际训练中的两阶段设计与规避方案根据这篇研究给出的方向真正稳妥的做法不是放弃 RLVR而是重新设计训练顺序和比例。下面是适合工程实践的三阶段方案。第一阶段是常规 SFT。先让模型在目标任务上有基础能力不要上来就做强化学习。SFT 能够让模型学会任务格式、语言风格和基础推理模式为后续 RLVR 提供一个较宽的策略支持。第二阶段是轻量 RLVR。训练步数要克制不要让奖励分数收敛到上限。观察训练日志中的分布熵和生成多样性一旦多样性开始快速下降立即评估停止点。RLVR 的目标应该是“推一波推理能力”而不是“把奖励压满”。第三阶段是泛化恢复 SFT。用少量多元化高质量数据重新做 SFT目标是重新打开策略支持空间。这个阶段不能使用大量重复的同一类任务数据否则又会被压回窄策略。数据要多域、多节奏、多风格让模型重新建立多样化输出能力。# 简化命令模板实际项目需要替换模型路径与数据路径 python train_sft.py --model base_model --data sft_data.jsonl --output sft_output python train_rlvr.py --model sft_output --reward verifier --train data.jsonl --steps 180 python train_recover.py --model rlvr_output --data general_sft_data.jsonl --lr 1e-5如果资源有限只能说一个原则那就是RLVR 的比例要小恢复 SFT 的比例要够。很多人训练失败是因为把 RLVR 当成了刷分终点模型已经收缩得厉害还在继续压分。遇到这种情况再去做下一阶段训练基本很难恢复。除了训练阶段的调整奖励设计上也有改进空间。可以在奖励函数中加入对策略分布熵的惩罚项或在 PPO loss 中提高 KL 惩罚系数。这样能够直接限制策略支持收缩的速度。另一种做法是引入“生成路径校验”即验证器不仅判断最终答案还校验中间推导是否使用了非预期捷径。验证器维度越丰富策略被压缩到单点的概率就越低。9. 实验验证建议如何观测策略支持变化如果你要复现或验证 PSR 现象不需要一开始就搭完整训练系统可以先做一个极简实验。准备一个小型基座模型、一个可验证的任务集和一个验证器然后分两阶段观测。用下面的脚本在训练前后做多样性采样。这个脚本是通用工具用来快速判断策略支持是否收缩。import collections def check_diversity(model, tokenizer, prompt, num_samples50, temperature0.9): outputs [] for _ in range(num_samples): out model.generate(prompt, temperaturetemperature, do_sampleTrue, max_new_tokens128) text tokenizer.decode(out[0], skip_special_tokensTrue) outputs.append(text) unique len(set(outputs)) diversity unique / num_samples return diversity, outputs diversity_before, outputs_before check_diversity(model_before, tokenizer, test_prompt) diversity_after, outputs_after check_diversity(model_after, tokenizer, test_prompt) print(f训练前多样性: {diversity_before:.2f}, 训练后多样性: {diversity_after:.2f})如果训练后多样性从 0.8 掉到 0.1说明策略支持已经严重收缩。此时哪怕评测分数还在涨也不能继续无脑训练了。这一步观测成本很低但能避免模型被 RLVR 破坏到不可逆的状态。更严谨的验证方式是做转移学习实验训练两个模型一个只用 SFT一个在 SFT 后用 RLVR然后在同一个新任务数据集上做少量 SFT。对比两个模型在新任务上的 loss 下降曲线和最终效果。如果 RLVR 组明显落后就说明策略支持重塑造确实削弱了后续学习能力。GPU 显存方面如果要完整跑这套验证推荐至少准备一张 24G 显存的显卡。用 7B 级模型做 PPO 训练需要同时加载策略模型、参考模型和验证器结果缓存显存压力不小。如果显存只有 12G建议先用 1.5B 级模型做小型验证实验把机制摸清后再上大模型。10. 常见问题与排查方法问题现象可能原因排查方法对应处理评测分数涨但生成多样性骤降策略支持收缩采样多样性统计观察温度 0.9 下的生成去重率减小 RLVR 步数增大 KL 惩罚系数后续 SFT 的 loss 很难下降RLVR 把策略分布压得太尖对比从基座 SFT 的 loss 曲线增加恢复性 SFT 步数降低学习率同义改写后正确率大幅下降模型只匹配验证器格式没有学习泛化策略构造同义改写评测集验证器加入多条语义等价判定扩充任务模板RLVR 训练不稳定或奖励震荡KL 惩罚系数与奖励系数失衡检查 PPO 的 kl 值和 reward 曲线调低kl_coef或改用动态 KL 调节模型输出过于简短无推理过程验证器未对推理步骤给出奖励人工检查 RLVR 后生成样本奖励函数加入推理步骤长度或质量判据恢复性 SFT 后推理能力回退阶段三扰动过大对比恢复前后在目标评测集上的分数恢复 SFT 使用较低学习率并混合目标任务数据验证器判断质量差导致奖励噪声规则过度简单或测试用例不充分随机抽查验证器判定结果扩充测试用例增加判定规则维度排查时的核心思路是给训练日志加上“策略健康度”指标并在训练循环中持续打印。不要只盯 reward 曲线要同时关注多样性指标和同义改写正确率。这两个指标出现退化往往早于分数崩坏能够提前预警 PSR 风险。11. 结论与技术决策建议北大这项研究真正提醒我们的是验证器看起来在教模型做对题实际上也在给模型的行为空间“做减法”。RLVR 不是不能用于大语言模型后续训练而是必须承认它存在策略支持收缩的系统性代价。如果只做数学和代码刷分这种代价可以接受如果做的是持续学习、通用助手微调或者需要频繁叠加新任务的产品模型最好先在训练设计中预留恢复机制。我的建议是先跑通一个 1.5B 或 7B 级别的 RLVR 小实验把训练前后的多样性指标、同义改写指标和后续 SFT 收敛速度全部记录下来。确认模型没有出现严重的策略支持重塑造后再把 RLVR 扩展到更大模型。模型越大策略重塑造的恢复成本也越高到时候再返工就划不来了。
返回列表