PPO
Swift Lv6

PPO(Proximal Policy Optimization)是近年来接触LLM始终绕不过去的RL算法,其核心思想如下:

根据经验调整Policy,但限制新旧Policy之间的变化幅度。

算法背景

基于策略的方法包括PG和Actor-Critic算法,这些方法简单直观,但存在训练不稳定的情况。

假设现在 Policy 是:

1
2
左: 50%
右: 50%

经过一次训练,发现左边这个动作很好,于是梯度这样指引策略更新:
1
2
左: 50% → 90%
右: 50% → 10%

看起来没问题,但这次数据很可能只是偶然数据。到了下一次训练可能又发现,朝右动作也很好,那么:
1
2
左:90% → 10%
右:10% → 90%

如此策略就会疯狂震荡,无法收敛。为了解决这个问题,TRPO应运而生,其通过复杂的数学约束,强行规定“新策略不能偏离老策略太远”,从而保证了稳定。但是TRPO的数学推导极其复杂,计算成本极高,很难在实际工程中落地。

PPO的解法

PPO是TRPO的完美平替,它用一种极其简单巧妙的方法,实现了和TRPO一样的“限制更新幅度”的效果,而且代码实现简单、计算速度快。

PPO的核心目标函数如下:

  • $r_t(\theta)$:概率比
    • 公式:$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$
    • 含义:新策略采取这个动作的概率除以旧策略采取这个动作的概率
    • 如果 $r>1$,意味着新策略比旧策略更倾向于做这个动作
  • $\hat{A}_t$:优势函数,一般采用GAE计算
    • 公式:$\sum_{l=0}^{\infty}(\gamma\lambda)^l \delta_{t+l}$
    • 含义:评估该动作是否优于平均水平
    • 如果 $\hat{A}_t>0$,意味着说明在状态 $s$ 下采取动作 $a$,比状态 $s$ 下的平均动作水平要好,值得鼓励;如果 $\hat{A}_t<0$,说明该动作拖后腿了,要惩罚它
  • $\text{clip}$:裁剪函数
    • 公式:$\text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)$
    • 含义:限制策略更新幅度,防止新旧策略差异过大,即“近端”的安全区域内
    • 设定 $\epsilon=0.2$,如果 $r>1.2$,裁剪函数将其强制拉回$1.2$;如果$r<0.8$,将其拉回$0.8$,从而保证了策略更新的稳定性

为了实现目标最大化,分如下两种情况:

当 $\hat{A}_t>0$,说明这个动作的价值高于平均,需要鼓励这个动作,则最大化 $r_t$,但不能超过 $1+\epsilon$

当 $\hat{A}_t<0$,说明这个动作的价值不如平均,需要抑制这个动作,则最小化 $r_t$,但不能低于 $1-\epsilon$

总结

PPO是在Policy Gradient的基础上,通过比较新旧Policy的概率比例,并用Clip限制这个比例的变化范围,从而让 Policy能够朝着高Advantage的动作优化,同时避免一次更新过猛导致训练不稳定。


参考

Powered by Hexo & Theme Keep
This site is deployed on
Unique Visitor Page View