找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2105

积分

1

好友

287

主题
发表于 2025-12-31 06:22:51 | 查看: 20| 回复: 0

在 PPO 和 GRPO 的目标函数中,最核心的量之一是策略比值 r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}

从数学上看,这是一个简单的表达式。但一旦将其放入神经网络训练中,潜在的问题就会浮现。问题的根源在于,策略网络输出的概率值常常处于一个极不稳定的尺度上。以语言模型或连续控制为例,\pi(a|s) 往往是一个极小的数。

假设在某个状态下,旧策略对动作 a 的概率是 \pi_{old}(a|s) = 10^{-22}

而新策略稍微更偏好这个动作: \pi_{new}(a|s) = 2 \times 10^{-22}

从数学上看,它们的比值应该是 r = \frac{2 \times 10^{-22}}{10^{-22}} = 2。这是一个完全合理、温和的数。

但在浮点计算中,事情往往不会按预想发展。单精度甚至双精度浮点数,都很容易在 10^{-20} 这个量级附近发生下溢。一旦其中一个概率被表示为 0,那么这个比值 r 要么直接变成 0,要么出现 infNaN,整个 PPO loss 在这一步就已不可挽回地失效了。

这正是 PPO 实现中几乎从不直接写 r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)},而是统一改写为 r_t(\theta) = \exp(\log \pi_\theta(a_t|s_t) - \log \pi_{\theta_{old}}(a_t|s_t)) 的原因。注意,这一步在数学上是严格等价的,并没有引入任何近似。但一旦进入对数空间,刚才那个例子就变成了:

\log \pi_{old}(a|s) \approx -50.66
\log \pi_{new}(a|s) \approx -50.66 + \log 2 \approx -49.98

两者相减得到 -49.98 - (-50.66) = 0.68,再取指数:\exp(0.68) \approx 1.97。整个计算过程中,没有任何一步将数值推到浮点表示的极限之外,数值稳定性得到了根本性的保障。

这种稳定性并非“恰好有效”,而是与概率分布本身的结构深度契合。以连续动作中最常见的正态分布为例,其概率密度函数是:
p(x|\mu, \sigma) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)
如果直接计算 prob,就不可避免地要面对指数和乘法的叠加;而一旦取对数,log prob 会自然变成:
\log p(x|\mu, \sigma) = -\log(\sigma) - \frac{1}{2}\log(2\pi) - \frac{(x-\mu)^2}{2\sigma^2}
这里不再有任何 exp,只有加、减、除和平方项。这并不是为了“省事”,而是因为在数值计算层面,log prob 本身就是这个分布更“自然”的表示方式。

离散动作的情况看起来不同,但本质完全一致。Categorical 分布表面上由 softmax 给出概率 p_i = \frac{\exp(z_i)}{\sum_j \exp(z_j)}。但任何成熟的深度学习框架,在计算 log prob 时,都会直接使用 \log p_i = z_i - \log\sum_j \exp(z_j),也就是 log-softmax 形式。这一步本质上就是 log-sum-exp trick,它避免了先算 softmax 再取 log 所带来的 \log(0)NaN 问题。换句话说,即便你“想要”的是概率,框架内部真正稳定、可微、可训练的量,依然是 log prob

当这些事实被放回到 PPO 或 GRPO 的语境中时,一个更深层的结论就浮现出来:强化学习真正优化的对象,从来就不是概率本身,而是 log prob 的变化。策略梯度的基本形式是 \nabla_\theta J(\theta) = \mathbb{E}[\nabla_\theta \log \pi_\theta(a|s) \cdot A(s, a)]。梯度天然落在 log prob 上,而不是 prob 上。PPO 的 clip、GRPO 的序列级 reward 重加权,本质上都是在限制或引导 log prob 的更新幅度。如果中间还绕道 prob 空间,再回到 log,不仅在数值上危险,在语义上也是多余的。

所以,在 PPO / GRPO 中用 log prob 计算策略比值,并不是一个工程技巧,而是由概率分布的数值稳定性与策略梯度本身对 \nabla \log \pi 的依赖共同决定的唯一自然选择。

如果你正在准备相关技术面试,深入理解这类底层原理远比死记硬背公式更有价值。我们也在云栈社区持续分享和讨论此类深度技术解析,欢迎交流。




上一篇:GopherCon 2025:Go以简单高效工程化原则,应对AI时代的软件工程挑战
下一篇:抖音支付布局线下收单:从生态闭环到支付数据主权之争
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-9 17:46 , Processed in 0.236582 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表