verl 中的熵机制(Entropy Mechanism):Clip-Cov 与 KL-Cov 策略解决 RL 熵坍缩实战指南 verl 中的熵机制Entropy MechanismClip-Cov 与 KL-Cov 策略解决 RL 熵坍缩实战指南【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl本指南基于 docs/algo/entropy.md 中收录的《The Entropy Mechanism of Reinforcement Learning for Reasoning Language Models》arXiv:2505.22617配方的核心内容结合 verl 仓库中策略损失policy loss的实际实现系统讲解 RL 训练中熵坍缩entropy collapse的成因、Clip-Cov 与 KL-Cov 两种缓解机制的数学原理与源码实现并给出在 verl 中以配置文件启用这两种损失模式的完整实战方案。读完本文你将理解性能受熵耗竭制约这一核心结论并掌握如何在 GRPO/PPO 训练脚本中一键切换到clip_cov或kl_cov损失模式。一、背景大规模 RL 训练中的熵坍缩问题在大语言模型LLM的强化学习RL后训练中研究者观察到一种普遍现象随着训练推进策略policy的熵entropy会急剧下降模型对已见过的解题路径迅速变得过度自信导致训练性能提前饱和。这一现象被称为熵坍缩entropy collapse。该配方文档指出熵坍缩并非偶然现象而是与性能之间存在可量化的经验关系$$R -a\exp(H) b$$其中 $H$ 为策略熵$R$ 为性能指标$a0$、$b$ 为常数。该式表明性能被熵的耗竭所卡脖子——当策略熵趋近于零时无论继续训练多久性能提升空间都极其有限。换言之想要持续提升 RL 训练效果就必须在训练过程中保持足够的策略熵让模型持续保有探索空间。二、理论分析熵的变化由协方差驱动仅停留在熵会下降的现象层面是不够的该配方文档进一步给出了理论解释熵的变化由动作概率更新与 logit 更新的协方差covariance驱动而这一协方差与 Policy Gradient 方法中的优势advantage直接相关。直觉上可以这样理解对于高概率且高优势的动作模型已经比较确定的正确路径参数更新会进一步推高其概率从而压缩分布、降低熵对于低概率但高优势的动作罕见但正确的路径更新会提升其概率从而分散分布、升高熵。理论推导表明熵的变化率正比于优势与概率更新之间的协方差项。而实证观察显示这一协方差项在真实训练中始终保持正值因此策略熵呈现单调下降的趋势——这正是熵坍缩的底层原因。基于这一分析配方提出了两种简单而有效的缓解策略Clip-Cov与KL-Cov二者都通过限制高协方差 token 的更新来阻止熵的过快坍缩从而在保持探索能力的同时提升最终性能。三、Clip-Cov 与 KL-Cov两种熵保护机制3.1 Clip-Cov直接裁剪高协方差 token 的策略梯度Clip-Cov 的做法是在计算 PPO 策略梯度时识别出协方差最大的那一小部分 token并将它们的策略梯度置零即裁剪掉从而消除这些 token 对熵的破坏性压缩。具体而言其协方差定义在源码 verl/trainer/ppo/core_algos.py 中实现为cov_all (advantages - verl_F.masked_mean(advantages, response_mask)) * ( log_prob - verl_F.masked_mean(log_prob.detach(), response_mask) )即每个 token 的协方差 该 token 优势 − 批内平均优势×该 token 当前 log 概率 − 批内平均 log 概率后者 detach 不参与梯度。随后实现通过以下步骤完成裁剪对应 core_algos.py将 padding 位置与标准 PPO 裁剪已经生效的位置的协方差置为-inf仅保留协方差落在区间(clip_cov_lb, clip_cov_ub)内的候选 token按clip_cov_ratio默认 0.0002即 0.02%计算需裁剪的 token 数量clip_num max(int(clip_cov_ratio * response_mask.sum()), 1)从候选集中随机采样clip_num个 token将其损失系数corr置 0即完全屏蔽其策略梯度。该损失最后以pg_losses torch.maximum(pg_losses1, pg_losses2) * corr的形式聚合并输出actor/pg_clipfrac被裁剪 token 占比与actor/ppo_kl两个监控指标。3.2 KL-Cov对高协方差 token 施加 KL 惩罚KL-Cov 的思路不同它不是直接置零梯度而是对协方差最大的那一小部分 token 施加额外的 KL 惩罚项抑制其过大幅度的概率更新。从源码 verl/trainer/ppo/core_algos.py 可以看到其损失结构为pg_losses1 -advantages * ratio # 标准 PPO 项 pg_losses_kl -advantages * ratio ppo_kl_coef * abs_kl # 附加 KL 惩罚项随后收集所有有效 token 的优势与 log 概率计算协方差列表(adv - adv.mean()) * (logp - logp.mean())通过torch.topk选取协方差最大的max(1, int(len(cov_lst_all) * kl_cov_ratio))个 token将这些 token 的损失从pg_losses1替换为pg_losses_kl从而用ppo_kl_coef * |log_prob - old_log_prob|惩罚其过大的概率偏移。由于 KL 惩罚只作用于极少数高协方差 token默认比例 0.02%它对整体优化方向影响极小却能精准抑制熵坍缩的主要元凶。3.3 两种机制的共同点与差异维度Clip-CovKL-Cov目标 token协方差位于(clip_cov_lb, clip_cov_ub)区间内的随机采样 token协方差 top-k 的 token作用方式策略梯度置零完全屏蔽更新附加 KL 惩罚软性抑制更新控制比例参数clip_cov_ratio默认 0.0002kl_cov_ratio默认 0.0002额外参数clip_cov_lb1.0、clip_cov_ub5.0ppo_kl_coef0.1论文结论全面优于基线AIME25 上提升显著平均分最高AIME24/AMC 提升最明显两种方法都能有效防止熵坍缩并提升性能论文在 7B 与 32B 两个规模上均验证了其有效性详见第五节评估结果。四、在 verl 中启用熵保护机制配置与实战4.1 配置项与默认值verl 已将上述两种损失模式完整集成进配置文件。在 verl/trainer/config/actor/actor.yaml 中policy_loss段定义了相关参数policy_loss: _target_: verl.workers.config.PolicyLossConfig # Loss function mode: vanilla / clip-cov / kl-cov / gpg来自 https://arxiv.org/abs/2505.22617 loss_mode: vanilla # Ratio of tokens to be clipped for clip-cov loss clip_cov_ratio: 0.0002 # Lower bound for clip-cov loss clip_cov_lb: 1.0 # Upper bound for clip-cov loss clip_cov_ub: 5.0 # Ratio of tokens to be applied kl penalty for kl-cov loss kl_cov_ratio: 0.0002 # KL divergence penalty coefficient ppo_kl_coef: 0.1对应的数据类型定义位于 verl/workers/config/actor.py 的PolicyLossConfigdataclass各参数含义如下loss_mode策略损失模式可选值包括vanilla、gpg、clip_cov、kl_cov、geo_mean、dro、cispo、bypass_mode等其中clip_cov与kl_cov即本文所述熵保护机制clip_cov_ratioClip-Cov 中被裁剪 token 占有效 token 的比例默认 0.00020.02%需大于 0clip_cov_lb/clip_cov_ubClip-Cov 协方差裁剪的上下界默认 1.0 / 5.0只有协方差落在此区间内的 token 才参与裁剪候选kl_cov_ratioKL-Cov 中被施加 KL 惩罚的 top-k token 比例默认 0.0002ppo_kl_coefKL 惩罚系数默认 0.1在kl_cov损失函数中作为abs_kl项的权重。需要注意的是PolicyLossConfig同时包含rollout_correction子配置支持与 rollout correctionrollout 校正机制组合使用。4.2 命令行启用方式与 verl 的其他超参数一样这些配置既可以在 yaml 中修改也可以在启动命令中通过点分路径直接覆盖例如python3 -m verl.trainer.main_ppo \ algorithm.adv_estimatorgrpo \ actor_rollout_ref.actor.policy_loss.loss_modekl_cov \ actor_rollout_ref.actor.policy_loss.kl_cov_ratio0.0002 \ ...切换为 Clip-Cov 只需将loss_mode改为clip_cov并相应调整clip_cov_ratio/clip_cov_lb/clip_cov_ub。4.3 训练脚本示例原文档中给出的启动方式Qwen2.5-7B 单机与 Qwen2.5-32B 多机为运行recipe/dapo/目录下的7b_kl_cov.sh与32b_kl_cov.sh脚本。当前仓库中与 DAPO含 KL-Cov 变体配套的完整可运行脚本分布在 verl/experimental/fully_async_policy/shell/ 与 verl/experimental/one_step_off_policy/shell/ 目录下例如dapo_7b_math_fsdp2_16_16.sh、dapo_7b_math_megatron_4_12.sh等可作为搭建 KL-Cov 训练任务的直接参照。这些脚本的典型结构为cd verl conda activate your_env python3 -m verl.trainer.main_ppo \ algorithm.adv_estimatorgrpo \ data.train_files... \ data.val_files... \ data.train_batch_size... \ actor_rollout_ref.model.pathQwen/Qwen2.5-7B \ actor_rollout_ref.actor.optim.lr1e-6 \ actor_rollout_ref.actor.policy_loss.loss_modekl_cov \ actor_rollout_ref.actor.policy_loss.kl_cov_ratio0.0002 \ actor_rollout_ref.actor.entropy_coeff0 \ actor_rollout_ref.actor.use_kl_losstrue \ actor_rollout_ref.actor.kl_loss_coef0.001 \ ...需要特别说明的配套配置项entropy_coeff0熵正则系数。在 actor.yaml 中默认为 0并配有calculate_entropy开关。由于 Clip-Cov / KL-Cov 通过保护熵而非奖励熵来维持探索通常不需要额外熵奖励DAPO 系列脚本均显式设置entropy_coeff0use_kl_loss/kl_loss_coefGRPO 风格训练中常配合 KL 散度损失而非 KL reward 惩罚使用calculate_entropy当需要监控策略熵曲线如论文中展示的熵随训练变化图时可将其置为true。在 verl/trainer/ppo/ray_trainer.py 中可以看到是否计算熵由actor.calculate_entropy or (actor.entropy_coeff ! 0.0)决定计算得到的熵会通过actor/entropy指标输出用于观察熵保护机制的实际效果。4.4 损失函数注册机制verl 的策略损失采用注册表registry模式新增损失只需在 verl/trainer/ppo/core_algos.py 中通过register_policy_loss(loss_name)装饰器注册并在训练时通过get_policy_loss_fn(loss_mode)按名称取用。clip_cov与kl_cov分别注册于该文件的 L1743 与 L1848。从PolicyLossConfig的注释可见该注册表目前还支持dppo_tv、dppo_kl、gspo、sapo、gpg、geo_mean、dro、cispo等多种策略损失研究者可直接仿照clip_cov/kl_cov的实现注册自定义熵保护损失。五、评估结果在数学推理基准上的提升原文档报告了在 Qwen2.5-7B 与 Qwen2.5-32B 两个规模、GRPO 基线及其变体上的评估结果训练数据基于 DAPO-MATH方法AIME24AIME25AMCMATH-500OMNI-MATHOlympiadBenchMinervaAvg.Qwen2.5-7BGRPO21.29.658.778.827.940.736.738.6w. Clip-higher18.111.556.679.229.843.340.438.8w.CLIP-Cov22.115.858.280.430.544.141.140.4w.KL-Cov22.612.961.480.829.142.638.240.6Qwen2.5-32BGRPO21.816.269.784.235.243.645.545.8w. Clip-higher35.622.369.577.235.142.543.047.2w.CLIP-Cov32.322.767.287.042.057.246.050.3w.KL-Cov36.830.874.584.639.149.046.352.2关键结论全面超越基线与 GRPO 相比两种方法在 7B 模型上平均提升 2.0%在 32B 模型上平均提升 6.4%规模越大收益越明显在更具挑战性的 AIME24 与 AIME25 上32B 模型分别取得 15.0% 与 14.6% 的相对提升熵水平显著更高当基线熵进入平台期而无法再被消耗时KL-Cov 方法仍能维持超过 10 倍于基线的熵水平同时策略模型的响应长度稳步增长、测试集性能持续超越基线——这表明模型在训练中能够更自由地探索从而学到更好的策略。六、总结与使用建议熵坍缩是大规模 LLM RL 训练中制约性能的瓶颈。verl 已完整内置了论文提出的 Clip-Cov 与 KL-Cov 两种熵保护机制使用成本极低快速启用在训练命令中设置actor_rollout_ref.actor.policy_loss.loss_modekl_cov或clip_cov按需微调kl_cov_ratio/clip_cov_ratio等比例参数即可无需改动任何代码组合使用熵保护机制可与 GRPO 优势估计、KL 散度损失use_kl_loss等现有能力自由组合且支持异步训练框架fully_async_policy / one_step_off_policy下的 DAPO 训练脚本监控验证开启calculate_entropy后通过actor/entropy指标观察熵曲线确认熵保护是否生效自定义扩展如需实验新的熵保护策略可参考 core_algos.py 中compute_policy_loss_clip_cov/compute_policy_loss_kl_cov的实现模式通过注册表机制接入训练框架。引用如需引用该论文可使用以下 BibTeX原文见 docs/algo/entropy.mdarticle{cui2025entropy, title{The Entropy Mechanism of Reinforcement Learning for Reasoning Language Models}, author{Cui, Ganqu and Zhang, Yuchen and Chen, Jiacheng and Yuan, Lifan and Wang, Zhi and Zuo, Yuxin and Li, Haozhan and Fan, Yuchen and Chen, Huayu and Chen, Weize and others}, journal{arXiv preprint arXiv:2505.22617}, year{2025} }【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考