RL Algorithms: PPO & GRPO-like

导言

  • RL 算法在 2025年的GRPO提出后其变种和应用范围迎来了井喷爆发。
  • 本文详细介绍 PPO、GRPO以及DAPO。

PPO (2017)

PPO(Proximal Policy Optimization)是当前强化学习(RL)中主流的 on-policy 算法之一,因其实现简单、样本效率适中、训练稳定而被广泛应用(如在多模态 RL 或 LLM 的对齐训练中)。

下面逐步解释:


一、PPO 的核心思想

PPO 是一种 策略梯度(Policy Gradient) 方法,目标是直接优化策略 $\pi_\theta(a|s)$,使得期望回报最大化:

$$
\max_\theta \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_t \gamma^t r_t \right]
$$

但直接优化容易导致策略更新过大,造成训练崩溃。PPO 通过引入 “信赖域”约束(trust region) 来限制策略更新幅度,从而保证稳定性。

具体做法是使用 重要性采样比例(Importance Sampling Ratio)

$$
r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{\text{old}}}(a_t|s_t)}
$$

然后构造 Clipped Surrogate Objective

$$
L^{\text{PPO}}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) \hat{A}_t,\ \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) \hat{A}_t \right) \right]
$$

其中:

  • (\hat{A}_t) 是 优势函数(Advantage) 的估计(关键!)
  • (\epsilon) 是一个小常数(如 0.2),控制策略更新幅度

回放缓冲区就是存的推理的结果

[^13]


二、核心GAE(Generalized Advantage Estimation)

1. 优势函数 (A(s,a)) 的作用

策略梯度中,我们希望知道:

“在状态 (s) 下采取动作 (a),比平均策略好多少?”

这由 优势函数 定义:
$$
A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s)
$$

  • (Q^\pi(s,a)):执行动作 (a) 后按策略 (\pi) 继续的回报
  • (V^\pi(s)):在状态 (s) 下按策略 (\pi) 继续的期望回报

优势函数 降低方差(相比直接用回报 (R_t)),使训练更稳定。

2. GAE 是优势函数的高效低方差估计器

真实 (A(s,a)) 无法直接计算,GAE 提供一种 偏差-方差权衡 的估计:

$$
\hat{A}t^{\text{GAE}(\gamma,\lambda)} = \sum{l=0}^{T-t-1} (\gamma \lambda)^l \delta_{t+l}
$$

其中:

$$
\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t)
$$

  • (\gamma):折扣因子
  • (\lambda):GAE 超参((\lambda=0) → 高偏差低方差;(\lambda=1) → 低偏差高方差)

GAE 的优势

  • 利用 learned value function (V(s)) 来减少回报估计的方差
  • 通过 (\lambda) 平滑地插值 between Monte Carlo(无偏)和 TD(0)(低方差)
  • 是 PPO 稳定训练的关键组件

所以,GAE 不是 PPO 的“可选”组件,而是其高效梯度估计的核心


三、涉及模型

“为什么需要 reward、reference、value 三个 model”?

这里可能存在一些术语混淆。标准 PPO 并不需要三个独立模型,但某些扩展场景(尤其是 LLM 的强化学习对齐,如 RLHF)会引入额外组件。

我们分情况说明:

✅ 标准 PPO(如 Atari、MuJoCo):

只需要 两个网络(通常共享底层):

  1. Policy Network(Actor):输出动作分布 (\pi_\theta(a|s))
  2. Value Network(Critic):输出状态价值 (V_\phi(s)),用于计算 GAE

所以是 两个 head,一个或两个 model,但没有 reward model 或 reference model

✅ 在 LLM + RLHF 场景中(如 InstructGPT、Llama-2-Chat):

为对齐人类偏好,PPO 被用于微调语言模型,此时引入 三个模型

模型 作用 是否更新
Policy Model(Actor) 当前要优化的 LLM(如 Llama) ✅ 是,通过 PPO 更新
Reward Model(RM) 输入 prompt + response,输出人类偏好打分(标量) ❌ 冻结,不更新
Reference Model 初始 SFT 模型(监督微调后的 checkpoint) ❌ 冻结,用于 KL penalty

此时 reward 并非环境反馈,而是由 Reward Model 预测;同时为防止策略偏离太远,加入 KL 散度惩罚项:

$$
L^{\text{KL}} = \beta \cdot D_{\text{KL}}(\pi_\theta(\cdot|s) | \pi_{\text{ref}}(\cdot|s))
$$

所以,“三个模型”是 RLHF 框架的特征,而非 PPO 本身的必需

📌 总结:

  • 经典 PPO:1 个策略 + 1 个价值网络(共两个模型/heads)
  • PPO in LLM(RLHF):Policy + Reward Model + Reference Model(三个)
    • Reward Model:提供 reward 信号
    • Reference Model:防止策略坍塌或胡说(通过 KL 约束)
    • Value Model:依然需要(用于 GAE)

总结

问题 回答
PPO 核心是什么? 通过 clipping 机制限制策略更新幅度,保证稳定训练
为什么 GAE 是核心? GAE 提供低方差、可调偏差的优势估计,是策略梯度有效的关键
为什么需要三个模型? 标准 PPO 不需要;但在 LLM 的 RLHF 场景中,为实现人类偏好对齐,引入了冻结的 Reward Model 和 Reference Model

如果你是在多模态强化学习或 LLM RL 场景下使用 PPO(如基于 VeRL 框架),那么三个模型的架构确实常见,但其动机来自于 对齐目标稳定性约束,而非 PPO 算法本身。

PPO 初始权重

我们来逐个分析这四个模型在 PPO for LLM(RLHF) 场景中的来源与初始化关系:


✅ 四个模型的角色回顾

模型 作用 是否训练 典型来源
Policy Model 当前待优化的策略(生成 response) ✅ 是 SFT checkpoint
Value Model 估计状态价值 (V(s)),用于 GAE ✅ 是(通常从头训或微调) 可能来自 Policy 的副本,但 head 不同
Reward Model (RM) 给出 prompt + response 的标量 reward ❌ 否(冻结) 独立训练的偏好模型(pairwise ranking)
Reference Model 提供 KL 散度基准,防策略崩溃 ❌ 否(冻结) 与 Policy 初始相同(即 SFT checkpoint)

🔑 关键问题:初始权重是否一样?

1. Policy Model 与 Reference Model

  • 初始完全相同

  • 两者都初始化自 监督微调(SFT)后的 checkpoint

  • 在 PPO 开始后:

    • Policy 被更新;

    • Reference 冻结,用于计算 KL penalty:

      $$
      \mathcal{L}^{\text{KL}} = \beta \cdot D_{\text{KL}}\left( \pi_{\theta}(a|s) ,|, \pi_{\text{ref}}(a|s) \right)
      $$

  • 这是防止语言模型“过度优化 reward 而胡说八道”的关键机制。

2. Value Model 的初始化

  • 通常初始化自 Policy Model 的主干(backbone),但:
    • 最后的 LM head 被替换为 scalar value head(一个线性层输出标量);
    • 有些实现中,value head 是随机初始化的,主干权重 copy 自 SFT model;
    • 也有做法是从头训练 value model(但效率低,不稳定)。
  • 所以:主干权重 ≈ Policy 初始权重(即 SFT checkpoint),但输出 head 不同。

📌 示例(如 HuggingFace TRL 或 OpenAI 的 InstructGPT):

1
2
3
4
policy = AutoModelForCausalLM.from_pretrained("sft_model")
reference = AutoModelForCausalLM.from_pretrained("sft_model") # same weights
value = AutoModelForCausalLM.from_pretrained("sft_model")
value.lm_head = nn.Linear(hidden_size, 1) # replace LM head with value head

RM 则完全独立:rm = RewardModel.from_pretrained("rm_model")

3. Reward Model (RM)

  • 权重与其他三个无关
  • RM 是通过 人类偏好数据(如 chosen/rejected pairs) 单独训练的(通常用 ranking loss,如 Bradley-Terry);
  • 结构上可能和 LLM 主干相同(如 Llama backbone + reward head),但:
    • 训练目标不同
    • 数据不同
    • 通常不共享任何训练过程
  • 因此,RM 的权重 ≠ SFT checkpoint

🧩 总结:初始权重关系图

1
2
3
4
5
6
7
8
9
SFT Checkpoint

├───▶ Policy Model (trainable)

├───▶ Reference Model (frozen, identical to Policy at t=0)

└───▶ Value Model backbone (frozen or trainable; value head usually new)

Reward Model ──▶ Trained separately on preference data (unrelated weights)

所以:

Policy 与 Reference 初始权重完全相同(都来自 SFT)
Value Model 主干通常 copy 自 SFT(即与 Policy 初始一致),但 head 不同
Reward Model 是独立训练的,权重与其他三个无关


💡 工程提示(结合你的背景)

你在使用 VeRL 或自研框架 做多模态 RL + LLM 对齐时,需要注意:

  • 显存优化:Policy 和 Reference 可共享 embedding 等只读参数(若框架支持 weight tying / shared read-only views);
  • Value head 初始化:建议用 small init(如 zero-mean Gaussian),避免 GAE 初期偏差过大;
  • Reward Model 一致性:确保 RM 的 tokenizer、prompt format 与 Policy 严格一致,否则 reward 会失真;
  • NPU 优化:Policy/Reference/Value 主干结构相同,可复用同一份编译图(如 on NPU),仅 head 分支不同,有利于融合算子(如 GMM)优化。

VeRL参数对应 (PPO)

你提出的问题非常精准:如何将 VeRL 的 PPO 配置参数(如 actor_rollout_ref.actoractor_rollout_ref.rolloutcritic.model)与 LLM+RLHF 中“Policy / Reference / Reward / Value” 四个模型的概念对应起来?

我们来系统地拆解 VeRL 框架中这些模块的实际角色,并和理论中的四个模型一一映射。


🔍 一、先明确:VeRL 的模块命名逻辑

VeRL(Vectorized Efficient Reinforcement Learning)是一个面向大模型 PPO 训练的高性能 RL 框架,其设计融合了 actor-critic 架构分布式推理/训练优化。它的配置层级如下:

1
2
3
4
5
6
7
8
9
actor_rollout_ref:
├── actor → 策略模型(Policy),可训练
├── rollout → 用于生成样本的推理引擎(通常是 vLLM)
└── ref (隐含) → Reference Model(冻结)

critic:
└── model → Value Network(Critic),可训练

reward model → 通常在 data pipeline 或 reward function 中指定(本脚本未显式出现)

注意:**actor_rollout_ref 是一个复合组件,包含 actor(Policy)rollout(推理引擎)** 和 reference(Reference Model) 三者。


🧩 二、理论四模型 ↔ VeRL 实际组件映射

理论中的模型(RLHF) VeRL 中的对应项 是否训练 权重来源
Policy Model actor_rollout_ref.actor ✅ 是 Qwen/Qwen3-8B(SFT checkpoint)
Reference Model 隐式包含在 actor_rollout_ref(通常和 actor 初始相同但冻结) ❌ 否 同 actor 初始权重(SFT)
Value Model (Critic) critic.model ✅ 是 Qwen/Qwen3-8B(主干 copy 自 SFT,但 head 替换为 value head)
Reward Model (RM) 未在该命令中显式配置(通常在 reward pipeline 中加载) ❌ 否 独立训练的 RM(如 Qwen3-RM

关键结论

  • actor_rollout_ref.actor = Policy
  • actor_rollout_ref.rollout ≠ 模型,而是 用 vLLM 引擎执行 actor(或 ref)前向推理 的工具(用于高效生成 response + logprob)
  • critic.model = Value Network
  • Reference Modelactor_rollout_ref 内部另一个冻结的副本(和 actor 初始同源)
  • Reward Model 通常在 data 模块或自定义 reward function 中加载(该脚本省略了,但实际运行时会用到)

消失的Reward Model

  • 在 VeRL 中,Reward Model 通常通过 自定义 reward function 注入
  • 可能配置在 YAML 或代码中,例如:
    1
    2
    def compute_rewards(prompts, responses):
    return reward_model(prompts, responses)
  • 因此,命令行中不直接出现 RM 路径是正常的

但经常实际上并不在使用 Reward Model(RM),而是采用了一种 基于规则或自动评分的 reward 函数(比如格式分 + 答案相似度),常见于数学推理、选择题、判断题等结构化任务(如 MATH、GSM8K 等)。

这意味着PPO 设置不属于典型的 RLHF(Reinforcement Learning from Human Feedback),而更接近 “Supervised Reward + PPO”“Automated Reward Shaping” 的范式。


✅ 修正后的模型角色映射(真实场景)

只有三个模型参与训练和推理:

模型 VeRL 中的对应项 是否训练 作用
Policy (Actor) actor_rollout_ref.actor ✅ 是 生成 response(如数学解答)
Reference Model 隐含在 actor_rollout_ref 中(但当前未启用) ❌ 否(若 use_kl_loss=False 用于 KL penalty(防止策略偏离太远)
Value Network (Critic) critic.model ✅ 是 估计状态价值,用于 GAE

🚫 Reward Model:不存在
Reward:由规则函数计算(如:reward = 0.5 * format_score + 0.5 * answer_correctness


🔍 为什么这种设计是合理的?

数学推理、编程、选择题等任务中:

  • 答案具有客观标准(对/错、匹配/不匹配);
  • 人工标注偏好数据(如 RM 所需的 chosen/rejected pairs)成本高;
  • 自动评分规则(如正则匹配、AST 比较、字符串相似度)足够可靠。

因此,直接用程序化 reward 替代 RM 是工业界和学术界的常见做法(例如:AlphaCode、LeanDojo、MAmmoTH 等工作)。


GRPO (DeepSeek 2024)

Group Relative Policy Optimization (GRPO)[^11]相对于PPO省略了value model,而是从组中估计baseline,显著减少了资源消耗。

具体来说, 在PPO中,GAE需要与policy model一起训练value model,来减轻奖励模型的过度优化,标准方法是在每个token的reward中添加来自reference模型的每个token的KL惩罚


1. 用多回答均值替代 GAE(优势估计)

  • PPO:依赖 critic(value network)估计状态价值 (V(s)),再通过 GAE 计算优势 (\hat{A}_t)。

  • GRPO不要 critic!对同一个 prompt 生成 (K) 个 responses(即 rollout_n=K),用这 (K) 个 reward 的样本均值作为 baseline,计算每个 response 的中心化 reward

    $$
    \tilde{r}^{(i)} = r^{(i)} - \frac{1}{K} \sum_{j=1}^K r^{(j)}
    $$

    这个 $\tilde{r}^{(i)}$ 直接替代了 PPO 中的 $\hat{A}_t$。

✅ 这本质上是一种 无 critic 的优势估计,假设同一 prompt 下不同 response 的 reward 波动反映了“好坏相对性”。

2. KL 散度定义一样在 policy 与 reference 之间(而非 policy 与旧 policy)

  • 标准 PPO:KL penalty 通常用于 LLM RLHF 中约束新策略 $\pi_\theta$ 与 **reference model $\pi_{\text{ref}}$**(SFT checkpoint)的距离。

  • GRPO:明确将 KL 项写为:

    $$
    \mathcal{L}^{\text{KL}} = \beta \cdot D_{\text{KL}}\left( \pi_{\theta}(\cdot|s) ,|, \pi_{\text{ref}}(\cdot|s) \right)
    $$

    而不是像某些 PPO 实现那样用 old policy($\pi_{\text{old}}$)做 KL。

✅ 这和你观察到的 VeRL 中 compute_old_logp(用于 importance ratio)和 compute_ref_logp(用于 KL)的分离是一致的。


3. 完全移除了 Value Network(Critic)

  • GRPO 不需要训练 critic,省去了:
    • critic 模型的显存
    • critic 的训练超参(lr、batch size 等)
    • GAE 的 (\lambda, \gamma) 调参
  • 这极大简化了系统,尤其适合 reward 可靠、任务结构清晰 的场景(如你的数学题)。

4. Policy Update 使用 “平均梯度” 而非 clipped ratio

  • GRPO 的 loss 为:

    $$
    \mathcal{L}^{\text{GRPO}} = -\mathbb{E}{i=1}^K \left[ \tilde{r}^{(i)} \cdot \log \pi_\theta(a^{(i)}|s) \right] + \beta \cdot D{\text{KL}}(\pi_\theta | \pi_{\text{ref}})
    $$

  • 没有 importance sampling ratio,也没有 clipping!

  • 相当于把每个 response 看作一个样本,用 中心化 reward 作为权重,直接做加权 MLE。

💡 这比 PPO 更简单,但依赖 多回答采样(rollout_n > 1) 来获得 reward 方差估计。

5. 对并行采样的强依赖

  • GRPO 要求 每次训练 step 对每个 prompt 生成 K 个 response(通常 K=4~16)。
  • 这对 rollout 引擎(如 vLLM)的 batched generation 能力要求高。
  • VeRL 正好通过 rollout_n 控制这个行为,天然适配 GRPO。

6. 更适合“轨迹级 reward”任务

  • GRPO 假设 整个 response 对应一个 scalar reward(如 0/1 正确性),而不是 step-wise reward。
  • 这和 LLM 生成任务天然匹配(端到端 reward),而 PPO 最初为 step-wise RL(如 Atari)设计。

  • GRPO 本质是 PPO 在 LLM + 自动 reward 场景下的简化特化版
    • 去掉 critic → 降低系统复杂度
    • 用多回答采样替代 GAE → 避免 critic 训练不稳定
    • 保留 KL(ref) → 防止语言退化

DAPO (2503 字节&清华)

GRPO的问题:

  1. RL流程细节不够,难复现,复现效果差: GRPO 基线存在几个关键问题,如熵崩塌、奖励噪声和训练不稳定性。
  2. KL 散度非必须:作者认为long-CoT reasoning model不需要和原本模型保持相似。
  3. 奖励模型非必要:作者使用了基于规则的奖励建模(通过规则计算奖励)

提出Decouple Clip and Dynamic sAmpling Policy Optimization,DAPO[^12]

为了修复GRPO的策略退化问题提出了一下的trick:

  1. 裁剪偏移(Clip-Shifting)
    1. 问题:熵坍缩
    2. 方法:提高了clip高裁切的参数值,来允许低概率token快速提升概率。
  2. 动态采样(Dynamic Sampling)
    1. 问题:推理(采样)出来分数全为 0,或者1的case,是没有优势,对训练是无效的
    2. 方法:剔除这些case,一直推理直到batch填满。
  3. Token级策略梯度损失(Token-Level Policy Gradient Loss),在长思维链 RL 场景中至关重要;
    1. 问题:基于sample的loss计算,会导致CoT里长文本回答不被重视,从而导致长文本质量差,相应长度不正常的变化(不是缓慢增长)
    2. 方法:使用基于token的loss计算。
  4. 溢出奖励塑造(Overflowing Reward Shaping),减少奖励噪声并稳定训练。
    1. 问题: GRPO 原本对于超出response长度的回答都一刀切的惩罚,这会导致模型confused。
    2. 方法:
      1. Overlong Filtering strategy:屏蔽截断样本的损失。
      2. Soft Overlong Punishment: 引入临界长度缓冲区,来对超长序列给予与长度正相关的连续的惩罚值。

但同时字节DAPO的工作受到质疑:

  1. 过于工程(trick)、不够优雅、trick是否合理受到争议、
  2. 训练时间似乎也相对GRPO翻倍。动态采样增加20%的生成开销
  3. Overfitting的风险:文章提到在训练集上reward很高,但在验证集上效果不明显,这意味着存在过拟合的风险。

🔍 一、“Entropy Collapse” 是什么?

1. 策略熵(Policy Entropy)的定义

在强化学习中,策略 (\pi(a|s)) 是一个概率分布(对 LLM 来说,是 token 的 softmax 分布)。其定义为:

$$
H[\pi(\cdot|s)] = -\sum_a \pi(a|s) \log \pi(a|s)
$$

  • 高熵:策略输出多样,不确定性强(如 softmax 接近 uniform)→ 探索性强
  • 低熵:策略集中在少数动作上(如 softmax 尖峰)→ 确定性强,但可能过拟合

对 LLM 而言,每一步 token 的熵 可平均得到 序列级策略熵

2. Entropy Collapse(熵崩溃)的含义

Entropy collapse 指在 PPO/GRPO 训练过程中,策略熵迅速下降至接近 0,导致模型输出趋于 deterministic(确定性)甚至 degenerate(退化)

典型表现:

  • 模型对所有问题都输出几乎相同的 token 序列(如固定开头、重复模式);
  • 生成内容缺乏多样性,即使问题不同;
  • 多回答采样(rollout_n)失效:K 个回答几乎完全一样;
  • 在数学题中:总用同一种套路,甚至直接输出 “答案:X” 而无推理。

⚠️ 这不是收敛,而是训练崩溃的一种形式——模型“学会作弊”后停止探索。


🤔 二、为什么会出现 Entropy Collapse?(尤其在 LLM + PPO 中)

根本原因:Reward Signal + Policy Update 的正反馈循环

  1. Reward 信号稀疏或有偏

    • 例如:只有最终答案正确才有 reward,中间过程无反馈;
    • 模型偶然发现一种“高 reward 模板”(如 “解:xxx。答案:3”);
  2. PPO 的 Clipping 机制放大优势

    • 一旦某个 action 被赋予高 advantage,PPO 会强烈鼓励它;
    • 同时 clipping 阻止了负样本的抑制,导致正样本过拟合
  3. 缺乏探索机制

    • LLM 的策略空间极大,但 on-policy 算法只从当前策略采样;
    • 一旦策略集中,后续采样无法跳出局部最优;
  4. KL Penalty 若未启用或太弱,无法约束退化

    • use_kl_loss=False(如你当前配置),模型可自由坍缩到 deterministic policy。

💡 Entropy collapse 是“奖励 hack”的自然结果:模型找到 reward 最大化路径后,不再尝试其他可能性。


📊 三、如何观测 Entropy Collapse?

在训练日志中监控:

  • 平均策略熵(mean policy entropy):应缓慢下降,但不应趋近 0;
  • 回答多样性:对同一 prompt 多次采样,计算 BLEU/Embedding 相似度;
  • token 分布:观察 softmax 是否出现“one-hot”倾向。

在 VeRL 中,可以启用 trainer.log_policy_entropy=True(或类似选项)来记录。

DAPO clip higher

clip 函数有三个参数

$$
\text{clip}\left( r_{i,t}(\theta),\ 1 - \varepsilon_{\text{low}},\ 1 + \varepsilon_{\text{high}} \right)
$$

这实际上是 PPO 算法中“非对称裁剪(asymmetric clipping)” 的一种变体,相比标准 PPO 的对称裁剪(通常只用一个 (\varepsilon),如 0.2),它允许优势为正和负时使用不同的裁剪边界,从而更精细地控制策略更新。

下面逐个解释这三个参数的含义:


✅ 1. ( r_{i,t}(\theta) ):重要性采样比率(Importance Sampling Ratio)

这是 PPO 的核心:

$$
r_{i,t}(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)}
$$

  • 表示当前策略 (\pi_\theta)旧策略 (\pi_{\theta_{\text{old}}}) 在状态 (s_t) 下采取动作 (a_t) 的概率之比;
  • 若 (r_{i,t} > 1):当前策略更偏好该动作;
  • 若 (r_{i,t} < 1):当前策略更不偏好该动作。

💡 它衡量了“策略更新的幅度”,但直接优化它会导致训练不稳定,因此需要 clip


✅ 2. (1 - \varepsilon_{\text{low}})下界裁剪阈值(针对负优势或策略减小)

  • (\varepsilon_{\text{low}} > 0)(如 0.2)
  • 当 (r_{i,t}(\theta) < 1 - \varepsilon_{\text{low}}) 时,说明当前策略大幅降低了某动作的概率;
  • PPO 会将其 裁剪到 (1 - \varepsilon_{\text{low}}),防止策略过快放弃某些动作(保留探索性)。

📌 这主要影响 负优势((\hat{A}_t < 0)) 的样本:即使动作不好,也不允许概率降得太快。


✅ 3. (1 + \varepsilon_{\text{high}})上界裁剪阈值(针对正优势或策略增大)

  • (\varepsilon_{\text{high}} > 0)(如 0.2,也可设为不同值)
  • 当 (r_{i,t}(\theta) > 1 + \varepsilon_{\text{high}}) 时,说明当前策略大幅提升了某动作的概率;
  • PPO 会将其 裁剪到 (1 + \varepsilon_{\text{high}}),防止策略过激地偏向某些动作(避免崩溃)。

📌 这主要影响 正优势((\hat{A}_t > 0)) 的样本:即使动作好,也不允许概率升得太猛。

^13


📊 标准 PPO vs 非对称 Clip

类型 裁剪函数 特点
标准 PPO (\text{clip}(r_t, 1-\varepsilon, 1+\varepsilon)) 对称,(\varepsilon_{\text{low}} = \varepsilon_{\text{high}} = \varepsilon)
非对称 PPO(如 DAPO) (\text{clip}(r_t, 1-\varepsilon_{\text{low}}, 1+\varepsilon_{\text{high}})) 可分别控制“增大”和“减小”的步长

例如:

  • 设 (\varepsilon_{\text{low}} = 0.1),(\varepsilon_{\text{high}} = 0.3)
    → 允许策略更激进地增加好动作的概率,但更保守地减少坏动作的概率(保留探索)。

🧠 为什么需要非对称裁剪?(DAPO 的动机)

在 LLM 强化学习中:

  • 正优势样本(正确回答)非常稀疏 → 需要更强的学习信号(允许更大的 (r_t),即更大的 (\varepsilon_{\text{high}}));
  • 负优势样本(错误回答)很多 → 但不能一刀切地抛弃,否则 entropy collapse(需更小的 (\varepsilon_{\text{low}}),即裁剪更紧)。

因此,非对称 clip 是对标准 PPO 的改进,尤其适合 reward 稀疏、高维动作空间(如 LLM)的场景。


📌 在 PPO Loss 中如何使用?

完整目标函数为:

$$
L^{\text{PPO}} = \mathbb{E}t \left[ \min\left(
r_t(\theta) \hat{A}t,\
\text{clip}\left(r_t(\theta), 1 - \varepsilon
{\text{low}}, 1 + \varepsilon
{\text{high}} \right) \hat{A}_t
\right) \right]
$$

  • 当 (\hat{A}_t > 0)(好动作):clip 上限防止过拟合;
  • 当 (\hat{A}_t < 0)(坏动作):clip 下限防止过放弃。

✅ 总结

参数 含义 典型值 作用
(r_{i,t}(\theta)) 当前策略 vs 旧策略的概率比 动态变化 衡量策略变化幅度
(1 - \varepsilon_{\text{low}}) 概率减小的下限 0.8–0.9 防止过快放弃动作(保探索)
(1 + \varepsilon_{\text{high}}) 概率增大的上限 1.1–1.3 防止过激偏向动作(保稳定)

DAPO 等改进算法中,这种非对称设计能缓解 entropy collapse提升样本利用效率,特别适合你正在做的 多回答、程序化 reward 的 LLM 数学推理训练

如果你在 VeRL 中看到类似 clip_range_lowclip_range_high 的配置项,那就是对应 (\varepsilon_{\text{low}}) 和 (\varepsilon_{\text{high}})。

参考文献

[^11]: DeepSeekMath: Pushing the limits of mathematical reasoning in open language models

[^12]: DAPO: An Open-Source LLM Reinforcement Learning System at Scale

Author

Shaojie Tan

Posted on

2025-11-25

Updated on

2025-11-25

Licensed under