从反向传播角度理解 PPO 损失函数
从反向传播角度理解 PPO 损失函数
PPO (Proximal Policy Optimization) 是当前强化学习领域应用最广的算法之一,尤其是在大语言模型的 RLHF 训练中。但很多人看 PPO 论文时,会被那个复杂的损失函数绕晕——为什么有三个部分?为什么要 clip?熵项又是干嘛的?
如果我们把 PPO 放在反向传播的框架下看,这些设计的意图就会清晰很多。本质上,PPO 的损失函数是在反向传播过程中构建了一个受约束的多目标优化系统,三股梯度流同时作用在 Actor 和 Critic 两个网络上。
为什么需要 PPO?
在 PPO 出现之前,策略梯度方法面临一个核心问题:更新步长很难控制。步子太大,策略可能崩掉;步子太小,训练效率太低。TRPO 算法用复杂的 KL 约束来解决这个问题,但计算成本高。
PPO 的思路更简单:用一个巧妙的损失函数,在反向传播时自动限制更新幅度。
PPO 损失函数拆解
核心公式
先看 PPO 的核心部分——Clipped Surrogate Objective:
$$
L^{\mathrm{CLIP}}(\theta) = \mathbb{E}_t[\min(r_t(\theta)\hat{A}_t,\ \mathrm{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)\hat{A}_t)]
$$
其中:
$$
r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t \mid s_t)}
$$
$r_t(\theta)$ 是概率比率,表示新策略和旧策略在同一状态下采取同一动作的概率比。如果这个比率是 2,说明新策略对当前动作的信心是旧策略的两倍。
$\hat{A}_t$ 是优势函数,表示当前动作比平均动作好多少。$\hat{A}_t > 0$ 说明这个动作值得加强,$\hat{A}_t < 0$ 说明应该减弱。
Clip 是如何工作的?
假设 $\epsilon = 0.2$,那么 clip 范围是 $[0.8, 1.2]$。
当 $\hat{A}_t > 0$(动作值得加强):
- 如果 $r_t = 1.1$,在 clip 范围内,正常更新
- 如果 $r_t = 1.5$,超过 1.2,clip 后变成 1.2,限制了更新幅度
当 $\hat{A}_t < 0$(动作需要减弱):
- 如果 $r_t = 0.9$,在 clip 范围内,正常更新
- 如果 $r_t = 0.5$,低于 0.8,clip 后变成 0.8,同样限制了幅度
这个设计的巧妙之处在于:当更新方向正确时允许更新,但当更新”过头”时自动刹车。
完整损失函数
$$
L(\theta, \phi) = -L^{\mathrm{CLIP}}(\theta) + c_1 L^{\mathrm{VF}}(\phi) - c_2 H(\pi_\theta)
$$
三项各自负责:
- $-L^{\mathrm{CLIP}}(\theta)$:策略损失,负号是因为我们要最大化它
- $c_1 L^{\mathrm{VF}}(\phi)$:价值损失,让 Critic 准确估计状态价值
- $-c_2 H(\pi_\theta)$:熵正则,负号表示我们想最大化熵
反向传播视角下的梯度流
Policy 梯度
Actor 的梯度来自两部分:
$$
\nabla_\theta L = \nabla_\theta L^{\mathrm{CLIP}} - c_2 \nabla_\theta H(\pi_\theta)
$$
第一股梯度来自 clip objective,告诉网络哪些动作需要加强或减弱。第二股来自熵项,推动策略保持一定的随机性。
为什么要保持随机性?如果策略过早收敛成确定性策略(某个动作概率接近 1),就失去了探索能力,可能陷入局部最优。熵正则像是一个”探索税”,防止策略变得太自信。
Value 梯度
Critic 的梯度比较直接:
$$
\nabla_\phi L = c_1 \nabla_\phi L^{\mathrm{VF}}
$$
其中:
$$
L^{\mathrm{VF}}(\phi) = \mathbb{E}t[(V\phi(s_t) - R_t)^2]
$$
$$
\nabla_\phi L^{\mathrm{VF}} = 2 (V_\phi(s_t) - R_t)\nabla_\phi V_\phi(s_t)
$$
这就是一个标准的回归损失,让价值函数的预测逼近实际回报。Critic 准确了,Actor 才能依赖优势函数做出正确的更新决策。
训练过程中的动态变化
PPO 的训练不是静态的,三个损失项的权重关系会随时间变化:
初期阶段:策略接近随机,Value Loss 主导。Critic 需要快速学习状态价值,为后续的策略更新提供可靠的信号。
中期阶段:策略开始优化,clip 机制频繁触发。这是 PPO 发挥作用的关键时期,通过限制更新幅度避免策略崩掉。
后期阶段:策略与熵达到平衡。此时策略已经相对稳定,熵正则确保仍有一定的探索空间,避免过拟合到特定策略。
PPO 稳定性的四个来源
- Clipping 限制更新幅度:当策略变化过大时自动截断梯度
- Actor-Critic 解耦:策略优化和价值估计分别进行,互相配合
- 熵正则维持探索:防止策略过早收敛
- 概率比率提供动态约束:$r_t(\theta)$ 本身就是一个变化幅度的度量
实际应用中的调参经验
在 RLHF 训练中,PPO 的超参数选择很有讲究:
- $\epsilon$(clip 范围):通常取 0.1 或 0.2。太小训练慢,太大容易不稳定
- $c_1$(价值系数):一般在 0.5 左右。让 Critic 跟上策略的学习速度
- $c_2$(熵系数):0.01 左右。太小策略坍缩,太大探索效率低
这些值不是固定的,需要根据具体任务和训练阶段调整。有些实现还会让熵系数随训练进程衰减——前期探索为主,后期利用为主。
总结
从反向传播的角度看,PPO 损失函数的设计哲学很清晰:
不是靠硬性约束或复杂算法,而是通过精心设计的损失函数,在梯度层面实现自适应控制。当更新”合理”时,梯度正常流动;当更新”过头”时,clip 机制自动限制;当策略变得太确定时,熵项推一把。
这种设计让 PPO 在保持训练稳定的同时,又能获得不错的样本效率。这也是它成为 RLHF 标准算法的原因——简单、稳定、好用。