verl 中的熵机制(Entropy Mechanism):Clip-Cov 与 KL-Cov 策略解决 RL 熵坍缩实战指南
2026/9/12 16:28:49 网站建设 项目流程

verl 中的熵机制(Entropy Mechanism):Clip-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_covkl_cov损失模式。

一、背景:大规模 RL 训练中的熵坍缩问题

在大语言模型(LLM)的强化学习(RL)后训练中,研究者观察到一种普遍现象:随着训练推进,策略(policy)的熵(entropy)会急剧下降,模型对已见过的解题路径迅速变得"过度自信",导致训练性能提前饱和。这一现象被称为熵坍缩(entropy collapse)

该配方文档指出,熵坍缩并非偶然现象,而是与性能之间存在可量化的经验关系:

$$R = -a\exp(H) + b$$

其中 $H$ 为策略熵,$R$ 为性能指标,$a>0$、$b$ 为常数。该式表明:性能被熵的耗竭所"卡脖子"——当策略熵趋近于零时,无论继续训练多久,性能提升空间都极其有限。换言之,想要持续提升 RL 训练效果,就必须在训练过程中保持足够的策略熵,让模型持续保有探索空间。

二、理论分析:熵的变化由"协方差"驱动

仅停留在"熵会下降"的现象层面是不够的,该配方文档进一步给出了理论解释:

熵的变化由动作概率更新与 logit 更新的协方差(covariance)驱动,而这一协方差与 Policy Gradient 方法中的优势(advantage)直接相关。

直觉上可以这样理解:

  • 对于高概率且高优势的动作(模型已经比较确定的正确路径),参数更新会进一步推高其概率,从而压缩分布、降低熵;
  • 对于低概率但高优势的动作(罕见但正确的路径),更新会提升其概率,从而分散分布、升高熵。

理论推导表明,熵的变化率正比于"优势与概率更新之间的协方差项"。而实证观察显示,这一协方差项在真实训练中始终保持正值,因此策略熵呈现单调下降的趋势——这正是熵坍缩的底层原因。

基于这一分析,配方提出了两种简单而有效的缓解策略:Clip-CovKL-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):

  1. 将 padding 位置与标准 PPO 裁剪已经生效的位置的协方差置为-inf
  2. 仅保留协方差落在区间(clip_cov_lb, clip_cov_ub)内的候选 token;
  3. clip_cov_ratio(默认 0.0002,即 0.02%)计算需裁剪的 token 数量clip_num = max(int(clip_cov_ratio * response_mask.sum()), 1)
  4. 从候选集中随机采样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 惩罚项

随后:

  1. 收集所有有效 token 的优势与 log 概率,计算协方差列表(adv - adv.mean()) * (logp - logp.mean())
  2. 通过torch.topk选取协方差最大的max(1, int(len(cov_lst_all) * kl_cov_ratio))个 token;
  3. 将这些 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.0002)kl_cov_ratio(默认 0.0002)
额外参数clip_cov_lb=1.0、clip_cov_ub=5.0ppo_kl_coef=0.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:策略损失模式,可选值包括vanillagpgclip_covkl_covgeo_meandrocispobypass_mode等,其中clip_covkl_cov即本文所述熵保护机制;
  • clip_cov_ratio:Clip-Cov 中被裁剪 token 占有效 token 的比例,默认 0.0002(0.02%),需大于 0;
  • clip_cov_lb/clip_cov_ub:Clip-Cov 协方差裁剪的上下界,默认 1.0 / 5.0,只有协方差落在此区间内的 token 才参与裁剪候选;
  • kl_cov_ratio:KL-Cov 中被施加 KL 惩罚的 top-k token 比例,默认 0.0002;
  • ppo_kl_coef:KL 惩罚系数,默认 0.1(在kl_cov损失函数中作为abs_kl项的权重)。

需要注意的是,PolicyLossConfig同时包含rollout_correction子配置,支持与 rollout correction(rollout 校正)机制组合使用。

4.2 命令行启用方式

与 verl 的其他超参数一样,这些配置既可以在 yaml 中修改,也可以在启动命令中通过点分路径直接覆盖,例如:

python3 -m verl.trainer.main_ppo \ algorithm.adv_estimator=grpo \ actor_rollout_ref.actor.policy_loss.loss_mode=kl_cov \ actor_rollout_ref.actor.policy_loss.kl_cov_ratio=0.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.sh32b_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.shdapo_7b_math_megatron_4_12.sh等,可作为搭建 KL-Cov 训练任务的直接参照。这些脚本的典型结构为:

cd verl conda activate your_env python3 -m verl.trainer.main_ppo \ algorithm.adv_estimator=grpo \ data.train_files=... \ data.val_files=... \ data.train_batch_size=... \ actor_rollout_ref.model.path=Qwen/Qwen2.5-7B \ actor_rollout_ref.actor.optim.lr=1e-6 \ actor_rollout_ref.actor.policy_loss.loss_mode=kl_cov \ actor_rollout_ref.actor.policy_loss.kl_cov_ratio=0.0002 \ actor_rollout_ref.actor.entropy_coeff=0 \ actor_rollout_ref.actor.use_kl_loss=true \ actor_rollout_ref.actor.kl_loss_coef=0.001 \ ...

需要特别说明的配套配置项:

  • entropy_coeff=0:熵正则系数。在 actor.yaml 中默认为 0,并配有calculate_entropy开关。由于 Clip-Cov / KL-Cov 通过"保护熵"而非"奖励熵"来维持探索,通常不需要额外熵奖励;DAPO 系列脚本均显式设置entropy_coeff=0
  • use_kl_loss/kl_loss_coef:GRPO 风格训练中常配合 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_covkl_cov分别注册于该文件的 L1743 与 L1848。从PolicyLossConfig的注释可见,该注册表目前还支持dppo_tvdppo_klgsposapogpggeo_meandrocispo等多种策略损失,研究者可直接仿照clip_cov/kl_cov的实现注册自定义熵保护损失。

五、评估结果:在数学推理基准上的提升

原文档报告了在 Qwen2.5-7B 与 Qwen2.5-32B 两个规模、GRPO 基线及其变体上的评估结果(训练数据基于 DAPO-MATH):

方法AIME24AIME25AMCMATH-500OMNI-MATHOlympiadBenchMinervaAvg.
Qwen2.5-7B
GRPO21.29.658.778.827.940.736.738.6
w. Clip-higher18.111.556.679.229.843.340.438.8
w.CLIP-Cov22.115.858.280.430.544.141.140.4
w.KL-Cov22.612.961.480.829.142.638.240.6
Qwen2.5-32B
GRPO21.816.269.784.235.243.645.545.8
w. Clip-higher35.622.369.577.235.142.543.047.2
w.CLIP-Cov32.322.767.287.042.057.246.050.3
w.KL-Cov36.830.874.584.639.149.046.352.2

关键结论:

  1. 全面超越基线:与 GRPO 相比,两种方法在 7B 模型上平均提升 2.0%,在 32B 模型上平均提升 6.4%;
  2. 规模越大收益越明显:在更具挑战性的 AIME24 与 AIME25 上,32B 模型分别取得 15.0% 与 14.6% 的相对提升;
  3. 熵水平显著更高:当基线熵进入平台期而无法再被"消耗"时,KL-Cov 方法仍能维持超过 10 倍于基线的熵水平,同时策略模型的响应长度稳步增长、测试集性能持续超越基线——这表明模型在训练中能够更自由地探索,从而学到更好的策略。

六、总结与使用建议

熵坍缩是大规模 LLM RL 训练中制约性能的瓶颈。verl 已完整内置了论文提出的 Clip-Cov 与 KL-Cov 两种熵保护机制,使用成本极低:

  1. 快速启用:在训练命令中设置actor_rollout_ref.actor.policy_loss.loss_mode=kl_cov(或clip_cov),按需微调kl_cov_ratio/clip_cov_ratio等比例参数即可,无需改动任何代码;
  2. 组合使用:熵保护机制可与 GRPO 优势估计、KL 散度损失(use_kl_loss)等现有能力自由组合,且支持异步训练框架(fully_async_policy / one_step_off_policy)下的 DAPO 训练脚本;
  3. 监控验证:开启calculate_entropy后通过actor/entropy指标观察熵曲线,确认熵保护是否生效;
  4. 自定义扩展:如需实验新的熵保护策略,可参考 core_algos.py 中compute_policy_loss_clip_cov/compute_policy_loss_kl_cov的实现模式,通过注册表机制接入训练框架。

引用

如需引用该论文,可使用以下 BibTeX(原文见 docs/algo/entropy.md):

@article{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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询