跳转至

RL Algorithms: PPO & GRPO-like

导言

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

4

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),控制策略更新幅度

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

3


二、核心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):

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

🧩 总结:初始权重关系图

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 架构分布式推理/训练优化。它的配置层级如下:

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 或代码中,例如:
    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)1相对于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,DAPO2

为了修复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 信号稀疏或有偏
  2. 例如:只有最终答案正确才有 reward,中间过程无反馈;
  3. 模型偶然发现一种“高 reward 模板”(如 “解:xxx。答案:3”);

  4. PPO 的 Clipping 机制放大优势

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

  7. 缺乏探索机制

  8. LLM 的策略空间极大,但 on-policy 算法只从当前策略采样;
  9. 一旦策略集中,后续采样无法跳出局部最优;

  10. KL Penalty 若未启用或太弱,无法约束退化

  11. 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\) 的样本:即使动作好,也不允许概率升得太猛。

3


📊 标准 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}}\)

参考文献


  1. DeepSeekMath: Pushing the limits of mathematical reasoning in open language models 

  2. DAPO: An Open-Source LLM Reinforcement Learning System at Scale 

  3. https://github.com/changyeyu/LLM-RL-Visualized 

  4. Rethinking RL Scaling for Vision Language Models: A Transparent, From-Scratch Framework and Comprehensive Evaluation Scheme 

评论