RL Algorithms: PPO & GRPO-like
导言
- RL 算法(Reinforcement Learning from Verifiable Rewards (RLVR))在 2025年的GRPO提出后其变种和应用范围迎来了井喷爆发。
- 本文详细介绍 PPO、GRPO以及DAPO。
PPO (2017)¶
PPO(Proximal Policy Optimization)是当前强化学习(RL)中主流的 on-policy 算法之一,因其实现简单、样本效率适中、训练稳定而被广泛应用(如在多模态 RL 或 LLM 的对齐训练中)。
下面逐步解释:
一、PPO 的核心思想¶
PPO 是一种 策略梯度(Policy Gradient) 方法,目标是直接优化策略 \(\pi_\theta(a|s)\),使得期望回报最大化:
但直接优化容易导致策略更新过大,造成训练崩溃。PPO 通过引入 “信赖域”约束(trust region) 来限制策略更新幅度,从而保证稳定性。
具体做法是使用 重要性采样比例(Importance Sampling Ratio):
然后构造 Clipped Surrogate Objective:
其中: - \(\hat{A}_t\) 是 优势函数(Advantage) 的估计(关键!) - \(\epsilon\) 是一个小常数(如 0.2),控制策略更新幅度
回放缓冲区就是存的推理的结果
二、核心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 提供一种 偏差-方差权衡 的估计:
其中:
- \(\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 散度惩罚项:
所以,“三个模型”是 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):
RM 则完全独立: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 headrm = 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.actor、actor_rollout_ref.rollout、critic.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 Model 是actor_rollout_ref内部另一个冻结的副本(和 actor 初始同源) - Reward Model 通常在data模块或自定义 reward function 中加载(该脚本省略了,但实际运行时会用到)
消失的Reward Model¶
- 在 VeRL 中,Reward Model 通常通过 自定义 reward function 注入
- 可能配置在 YAML 或代码中,例如:
- 因此,命令行中不直接出现 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的问题:
- RL流程细节不够,难复现,复现效果差: GRPO 基线存在几个关键问题,如熵崩塌、奖励噪声和训练不稳定性。
- KL 散度非必须:作者认为long-CoT reasoning model不需要和原本模型保持相似。
- 奖励模型非必要:作者使用了基于规则的奖励建模(通过规则计算奖励)
提出Decouple Clip and Dynamic sAmpling Policy Optimization,DAPO2
为了修复GRPO的策略退化问题提出了一下的trick:
- 裁剪偏移(Clip-Shifting)
- 问题:熵坍缩
- 方法:提高了clip高裁切的参数值,来允许低概率token快速提升概率。
- 动态采样(Dynamic Sampling)
- 问题:推理(采样)出来分数全为 0,或者1的case,是没有优势,对训练是无效的
- 方法:剔除这些case,一直推理直到batch填满。
- Token级策略梯度损失(Token-Level Policy Gradient Loss),在长思维链 RL 场景中至关重要;
- 问题:基于sample的loss计算,会导致CoT里长文本回答不被重视,从而导致长文本质量差,相应长度不正常的变化(不是缓慢增长)
- 方法:使用基于token的loss计算。
- 溢出奖励塑造(Overflowing Reward Shaping),减少奖励噪声并稳定训练。
- 问题: GRPO 原本对于超出response长度的回答都一刀切的惩罚,这会导致模型confused。
- 方法: 1. Overlong Filtering strategy:屏蔽截断样本的损失。 2. Soft Overlong Punishment: 引入临界长度缓冲区,来对超长序列给予与长度正相关的连续的惩罚值。
但同时字节DAPO的工作受到质疑:
- 过于工程(trick)、不够优雅、trick是否合理受到争议、
- 训练时间似乎也相对GRPO翻倍。动态采样增加20%的生成开销
- Overfitting的风险:文章提到在训练集上reward很高,但在验证集上效果不明显,这意味着存在过拟合的风险。
🔍 一、“Entropy Collapse” 是什么?¶
1. 策略熵(Policy Entropy)的定义¶
在强化学习中,策略 \(\pi(a|s)\) 是一个概率分布(对 LLM 来说,是 token 的 softmax 分布)。其熵定义为:
- 高熵:策略输出多样,不确定性强(如 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 的正反馈循环¶
- Reward 信号稀疏或有偏
- 例如:只有最终答案正确才有 reward,中间过程无反馈;
-
模型偶然发现一种“高 reward 模板”(如 “解:xxx。答案:3”);
-
PPO 的 Clipping 机制放大优势
- 一旦某个 action 被赋予高 advantage,PPO 会强烈鼓励它;
-
同时 clipping 阻止了负样本的抑制,导致正样本过拟合;
-
缺乏探索机制
- LLM 的策略空间极大,但 on-policy 算法只从当前策略采样;
-
一旦策略集中,后续采样无法跳出局部最优;
-
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 函数有三个参数:
这实际上是 PPO 算法中“非对称裁剪(asymmetric clipping)” 的一种变体,相比标准 PPO 的对称裁剪(通常只用一个 \(\varepsilon\),如 0.2),它允许优势为正和负时使用不同的裁剪边界,从而更精细地控制策略更新。
下面逐个解释这三个参数的含义:
✅ 1. \( r_{i,t}(\theta) \):重要性采样比率(Importance Sampling Ratio)¶
这是 PPO 的核心:
- 表示当前策略 \(\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\)) 的样本:即使动作好,也不允许概率升得太猛。
📊 标准 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 中如何使用?¶
完整目标函数为:
- 当 \(\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_low 和 clip_range_high 的配置项,那就是对应 \(\varepsilon_{\text{low}}\) 和 \(\varepsilon_{\text{high}}\)。





