DGPO: Distribution Guided Policy Optimization for Fine Grained Credit Assignment
Paper: arXiv:2605.03327 Code: 代码搜索未找到开源实现
1. Motivation
当前 critic-free RL for LLM reasoning 的两个核心瓶颈很明确:一是 GRPO / DAPO 这类方法主要做 sequence-level credit assignment,长 CoT 里“哪一步真正推动了正确推理”仍然被平均掉;二是常见的 token-level KL penalty 是无界的,容易带来梯度不稳定和过度保守,反而抑制新的 reasoning trajectory 探索。
这篇论文要解决的是:在不引入 value network / process reward model 的前提下,把 coarse 的 sequence reward 重新分配到 token level,同时避免 KL 带来的不稳定。
如果做成,意义在于:critic-free 框架也能获得接近 process supervision 的细粒度训练信号,而且计算开销仍然接近 GRPO。
2. Idea
DGPO 的核心想法不是把“分布偏移”当成惩罚项,而是把它重解释成探索引导信号。作者用有界的 Hellinger Distance 代替 KL,再用 entropy gating 过滤掉低置信度、可能只是噪声的偏移,最后把 sequence-level advantage 重新分配到 token level。
本质上,它把“偏离参考策略”从危险的惩罚项改成了可控的 credit signal:偏移大不一定坏,但只有在模型自己也高不确定时,这种偏移才更值得被奖励为有效探索。
和 GRPO / DAPO 的主要差别是:后者仍然是 coarse sequence objective,而 DGPO 显式做 token-level redistribution;和直接用 KL 的方法相比,DGPO 用 bounded divergence 避免了训练不稳定。
3. Method

Figure 1 解读:整体流程是先从当前策略和参考策略的 logits 计算 token-level distribution deviation,再用 entropy gating 得到可用的探索强度,最后把原本 sequence-level 的 advantage 重新分配到各 token,形成 fine-grained credit reallocation。图里最关键的变化是:没有 value network,也没有 token-level KL penalty,所有信号都来自现有 logits 张量的可并行计算。
3.1 Overall framework
DGPO 仍然是 critic-free 的 RL pipeline:对每个 prompt 采样一组 responses,先用 outcome reward 得到 group-relative sequence-level advantage ,再把这个 advantage 重写成 token-level local advantage 。它没有引入额外 value network,也不训练 process reward model,而是只复用当前策略和参考策略的 logits 做重分配。
完整流程可以拆成三步。第一步,对每个 token 位置比较 与 的分布差异,得到 exploration 强度。第二步,用 entropy gating 压制“高偏移但高置信度的错误 token”,只给真正不确定的探索步骤更高权重。第三步,把 coarse 的 变成 local 的 ,再代入 clipped objective。
其中 coarse-grained sequence-level advantage 继承自 GRPO 的组内 Z-score 归一化: 这里 是同一 prompt 下 个 sampled responses 的标量奖励。DGPO 不改这个 group-level advantage 的定义,只改它在序列内部的分配方式。
3.2 Distribution-Guided Advantage Redistribution
论文先定义 token-level deviation: 这里用的是 Hellinger Distance,而不是 KL。关键区别是 有界,所以即使当前策略探索到 reference policy 几乎不给概率的区域,也不会像 KL penalty 那样引入无界梯度。
仅靠偏移量还不够,因为“罕见但错误的 hallucination token”也可能有很大分布偏移。为此作者引入 policy entropy gating。正文 Eq. (3) 把偏移量和 token 位置上的 Shannon entropy 直接结合成重分配权重: 其中 是 reallocation temperature, 是序列长度。乘上 的目的是保证 也就是只改变 credit 在序列内部的分布,不改变整条 response 的总体梯度量级。
论文在超参数分析小节又把 gating score 更细地写成 其中 表示归一化后的 policy entropy, 控制 entropy gating 的严格程度;随后再用 temperature-scaled softmax 把 变成 。因此,方法部分可以理解为“Eq. (3) 给出基本形式,而 是对 entropy gating 强度的显式幂次缩放”。
这个设计的直觉是:如果某个 token 同时满足“偏离 reference 较多”和“当前策略在这里不够确定”,那么它更像一个真正推动搜索空间扩张的 reasoning step;反之,那些只是格式延续、语法填充或高置信度错误外推的 token,即使偏移大,也不应该得到太多 credit。
3.3 Fine-Grained Credit Reallocation and Objective
在得到 后,DGPO 把 coarse-grained advantage 重写为: 随后直接把 放进 clipped objective: 其中 importance ratio 为 论文给出的梯度近似是 这里最关键的点不是换了一个 PPO 壳,而是把 reference policy 的作用从显式 KL penalty 改成了有界的重加权因子。于是 只通过 进入梯度,不会像 那样在 时失控。
论文公式与 released code 实现差异:未找到公开实现,无法做逐行对照;当前笔记只依据论文正文整理。
Pseudocode 1: Token-level Hellinger deviation
import torch
def hellinger_distance_sq(policy_probs: torch.Tensor, ref_probs: torch.Tensor) -> torch.Tensor:
overlap = torch.sqrt(policy_probs * ref_probs).sum(dim=-1)
return 1.0 - overlapPseudocode 2: Entropy-gated redistribution weights
import torch
def dgpo_weights(policy_probs: torch.Tensor,
ref_probs: torch.Tensor,
tau: float,
kappa: float) -> torch.Tensor:
d_t = hellinger_distance_sq(policy_probs, ref_probs)
entropy_t = -(policy_probs * torch.log(policy_probs.clamp_min(1e-12))).sum(dim=-1)
norm_entropy_t = entropy_t / entropy_t.clamp_min(1e-12).max()
gated_scores = d_t * norm_entropy_t.pow(kappa)
return torch.softmax(gated_scores / tau, dim=0) * policy_probs.size(0)Pseudocode 3: DGPO loss with local advantage
import torch
def dgpo_loss(new_logprob: torch.Tensor,
old_logprob: torch.Tensor,
seq_advantage: torch.Tensor,
weights: torch.Tensor,
eps_clip: float) -> torch.Tensor:
local_adv = seq_advantage * weights
ratio = torch.exp(new_logprob - old_logprob)
clipped_ratio = torch.clamp(ratio, 1.0 - eps_clip, 1.0 + eps_clip)
token_obj = torch.minimum(ratio * local_adv, clipped_ratio * local_adv)
return -token_obj.mean()上面三段伪代码分别对应 、、 和最终 objective。因为没有公开仓库,这里只能做到 equation-level mapping,不能补 file/class 级 code mapping。

Figure 2 解读:训练曲线显示 DGPO 在 AIME 验证上持续超过 baseline,说明 token-level reallocation 不只是理论上更细,而且在实际优化中确实更能把离散奖励转成稳定的推理提升。

Figure 3 解读:对比图展示 DGPO 相比 baseline 在关键推理 token 上的 credit 分配更集中,也更贴近真正推动正确答案的中间步骤。
3.4 Mechanism notes: why policy distribution is useful credit evidence
DGPO 的关键假设是:在 critic-free RL 中,模型自己输出分布的局部变化可以提供 token-level credit 线索。GRPO 这类方法通常把一个 response 的整体 reward 转成 group-relative advantage,再把同一个 advantage 施加到整段生成上。这样做计算简单,但会把“哪几个 token 真正导致成功或失败”的问题隐藏掉。数学推理里,一个早期变量定义、符号变换或分支选择可能决定后续答案是否正确,而大量格式性 token 只是跟随前文生成;如果所有 token 拿到同样 advantage,优化会同时强化关键决策和无关铺垫,credit assignment 粒度过粗。
论文把 token-level distribution shift 作为重分配依据,直觉上是看当前 policy 在每个位置相对参考分布或旧策略发生了多大偏移。若某个 token 位置的概率分布发生明显变化,说明模型在这里做了更强的决策或更偏离原来的行为模式,这个位置更可能对应推理路径中的关键选择。Hellinger deviation 的好处是它衡量的是两个离散分布的整体差异,而不是只看采样出来的单个 token 概率;因此它能捕捉“模型在这一位置是否变得更确定、是否把质量转移到另一类候选 token 上”。笔记中不应把它解释成真实因果贡献,因为分布偏移只是 proxy,但它比 uniform advantage 更细。
Entropy gate 的作用是防止这种 proxy 在不可靠位置上过度放大。高熵位置往往意味着模型本来就不确定,候选 token 很分散;低熵位置则可能是格式、标点或固定模板,虽然概率尖锐但不一定有推理价值。门控机制相当于给 redistribution 加上置信度约束,避免所有分布变化都被当成 credit。最终的 local advantage 仍然来自 response-level reward,只是通过分布信号在 token 之间重新分配,而不是凭空制造新的 reward。这个设计的另一个动机是保持与 GRPO 的工程兼容性。DGPO 不需要训练额外 critic,也不要求人工标注中间步骤是否正确;
它复用 policy 前向已经能得到的 logits/probabilities,把额外计算集中在分布差异、归一化和权重重分配上。因此它适合复杂数学推理这类 reward 稀疏但中间过程重要的任务。它的限制也很清楚:如果模型分布变化与真实推理贡献不一致,例如某些错误步骤也会产生很大的偏移,DGPO 仍可能把 advantage 分给错误位置;如果 reward 本身噪声很大,token-level redistribution 只会更精细地传播噪声。从优化角度看,DGPO 不是把 outcome reward 改造成 process reward,而是在没有 process label 的情况下模拟一种弱过程监督。
它让“整题做对/做错”的信号沿着模型内部最明显的决策点传播,减少无差别强化。对长链推理尤其重要的是,局部 advantage 可以改变梯度密度:关键推理 token 得到更高权重后,policy update 更集中;无关解释或固定格式 token 的梯度被相对削弱。论文实验主要验证了数学推理设置,迁移到工具调用、代码或视觉生成时,需要重新检查分布偏移是否仍然对应任务中的关键决策。
4. Experimental Setup
- Datasets: DAPO-17K(训练);AIME 2024 / AIME 2025(评测)。
- Baselines: GRPO, DAPO, FIPO。
- Metrics: Avg@32, Cons@32, Pass@32;Qwen2.5-7B 额外报告 Pass@1。
- Training config: Qwen2.5-32B-Base;global batch size 512 prompts;group size ;mini-batch 64 prompts(1024 samples);learning rate ;weight decay 0.1;Qwen2.5-7B-Math 也用于 scaling / ablation。
5. Experimental Results

Figure 4 解读:可视化说明 DGPO 更倾向于把 credit 给真正改变推理方向的 token,而不是把权重平均铺在整段 CoT 上。
Main results
| Method | AIME 2024 Avg@32 | AIME 2024 Cons@32 | AIME 2024 Pass@32 | AIME 2025 Avg@32 | AIME 2025 Cons@32 | AIME 2025 Pass@32 |
|---|---|---|---|---|---|---|
| DAPO | 50.0% | 60.0% | 80.0% | 38.0% | 47.0% | 63.0% |
| FIPO | 56.0% | 73.0% | 83.0% | 43.0% | 50.0% | 67.0% |
| DGPO | 60.0% | 73.0% | 87.0% | 46.0% | 53.0% | 67.0% |
Qwen2.5-7B-Math 上,DGPO 在 AIME 2024 的 Pass@1 达到 43.0%,明显高于 vanilla GRPO 的 22.0%,也高于 DAPO 的 36.0%。这说明即使在较小 backbone 上,token-level credit reallocation 也能从相同的 binary outcome reward 中挖出更多监督信号。
Ablations / sensitivity
- 去掉 entropy gating()时,AIME 2024 Pass@1 为 38.0%; 时到 41.0%; 过强时回落到 36.0%。
- Reallocation temperature 过小会过度集中,过大又趋向均匀;论文在 Qwen2.5-7B 上报告 为 42.0%,比 的 35.0% 和 的 37.0% 更好。
- Reverse KL 变体只到 34.0% Pass@1,说明有界 Hellinger 更利于探索。
Computational profiling
- Table 6 在 Qwen2.5-7B 上比较了 PPO、GRPO、DGPO,训练环境为 2 nodes、8×H20 (96GB) GPU、DeepSpeed ZeRO-3。
- PPO(带 critic)峰值显存 72.4 GB、吞吐 85 tokens/s/GPU、时间开销 +129.4%。
- GRPO baseline 峰值显存 46.2 GB、吞吐 195 tokens/s/GPU、时间开销 0.0%。
- DGPO 峰值显存 46.5 GB、吞吐 188 tokens/s/GPU、时间开销仅 +3.6%。这说明它几乎保留了 GRPO 的效率,同时避免了 critic-based PPO 的显存和吞吐代价。
Limitations
- 论文没有详细给出开源实现,因此无法核对 code-level 细节,也无法补 code-to-paper mapping table 与
github_ref。 - 实验主要集中在 AIME 系列与 Qwen2.5 backbone,泛化到更多模型/任务还需要更多验证。
Conclusion DGPO 证明了:在 critic-free RL 里,分布偏移可以不只是 penalty,也可以是 fine-grained credit 的来源;在保持计算开销接近 GRPO 的同时,它能显著提升复杂数学推理的表现。