Skip to main content

TRPO and PPO

TRPO (Trust Region Policy Optimization) と PPO (Proximal Policy Optimization) は、policy 更新が過度に大きくならないように制約する policy gradient algorithm です。PPO は RLHF の標準として LLM の世界でも中核を担っています。

なぜ trust region なのか

純粋な policy gradient は、step size を大きく取りすぎると policy が崩壊することがあります。Trust region 系は、

  • 1 step の更新で policy 分布が 大きく変わらない ことを保証
  • 結果として安定した monotonic な改善

を狙います。

TRPO

TRPO は、KL 制約付き の surrogate objective を解きます。

maxθE ⁣[πθ(as)πθold(as)A(s,a)]\max_\theta \mathbb{E}\!\left[\frac{\pi_\theta(a \mid s)}{\pi_{\theta_{\text{old}}}(a \mid s)}\, A(s, a)\right]

subject to

E[KL(πθold(s)πθ(s))]δ\mathbb{E}\bigl[\mathrm{KL}\bigl(\pi_{\theta_{\text{old}}}(\cdot \mid s) \,\|\, \pi_\theta(\cdot \mid s)\bigr)\bigr] \leq \delta

実装は二次計画と conjugate gradient が必要で重いです。

PPO

PPO は TRPO を clipped surrogate に置き換えた、単純で実用的な algorithm です。

rt(θ)=πθ(atst)πθold(atst)r_t(\theta) = \frac{\pi_\theta(a_t \mid s_t)}{\pi_{\theta_{\text{old}}}(a_t \mid s_t)} LCLIP(θ)=Et ⁣[min(rt(θ)At,  clip(rt(θ),1ϵ,1+ϵ)At)]L^{\text{CLIP}}(\theta) = \mathbb{E}_t\!\left[\min\bigl(r_t(\theta) A_t,\; \mathrm{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon)\, A_t\bigr)\right]
  • rt>1+ϵr_t > 1 + \epsilon の領域では更新を抑制
  • rt<1ϵr_t < 1 - \epsilon の領域でも同様
  • 結果として policy 更新の大きさを暗黙的に制限

PPO の構成要素

実用 PPO loss は通常:

L=LCLIPc1LV+c2LentropyL = L^{\text{CLIP}} - c_1 L^{V} + c_2 L^{\text{entropy}}
  • LVL^V: value function の loss
  • LentropyL^{\text{entropy}}: entropy bonus (exploration)

なぜ LLM で PPO なのか

InstructGPT 以来、RLHF の reward optimization は PPO で行うのが標準でした。

理由:

  • on-policy で安定
  • KL を reward に組み込めば、SFT policy から離れすぎない
  • 実装が枯れている

ただし、reward model + value model + reference model + policy で 4 つの大規模 model が必要なため、メモリ要求が大きいです。これを単純化するために DPOGRPO が提案されました。

数式で見る trust region と clipping

TRPO は、policy を改善しつつ、old policy から離れすぎないように KL 制約を置きます。

maxθ  Et[πθ(atst)πold(atst)At]s.t.Et[DKL(πoldπθ)]δ\max_\theta\;\mathbb{E}_t\left[\frac{\pi_\theta(a_t\mid s_t)}{\pi_{old}(a_t\mid s_t)}A_t\right] \quad\mathrm{s.t.}\quad \mathbb{E}_t[D_{KL}(\pi_{old}\|\pi_\theta)]\le \delta

この式の気持ちは、「良い action の確率を上げたいが、policy を一度に大きく変えすぎると学習が壊れる」というものです。

PPO は、この KL 制約をより実装しやすい clipping に置き換えます。確率比を rt(θ)r_t(\theta) とすると、clipped objective は次の通りです。

LCLIP(θ)=Et[min(rt(θ)At,clip(rt(θ),1ϵ,1+ϵ)At)]\mathcal{L}^{\mathrm{CLIP}}(\theta)= \mathbb{E}_t\left[ \min\left(r_t(\theta)A_t, \mathrm{clip}(r_t(\theta),1-\epsilon,1+\epsilon)A_t\right) \right]

この式は、advantage が正のときに確率を上げすぎること、advantage が負のときに確率を下げすぎることを防ぎます。

関連ページ

主なソース