Skip to main content

RLHF with PPO

RLHF with PPO は、reward model と PPO を組み合わせる 古典的な RLHF レシピ です。InstructGPT で確立され、ChatGPT、Llama 2、Claude などの aligned LLM の基礎となりました。

3 段階の pipeline

  1. SFT: instruction data で fine-tune
  2. Reward Model: pairwise preference から RM を学習
  3. PPO: SFT policy を RM の reward で最適化

PPO の objective

LLM RLHF の reward は通常、

rtotal(x,y)=rϕ(x,y)βKL(πθ(x)πref(x))r_{\text{total}}(x, y) = r_\phi(x, y) - \beta\, \mathrm{KL}\bigl(\pi_\theta(\cdot \mid x) \,\|\, \pi_{\text{ref}}(\cdot \mid x)\bigr)

の形を取ります。

  • rϕr_\phi: reward model のスコア
  • β\beta: KL 重み (alignment と SFT 維持の trade-off)
  • πref\pi_{\text{ref}}: 凍結された SFT policy

これで、reward を最大化しつつ SFT から離れすぎない更新を行います。

必要な 4 つの model

Model役割
Policy学習対象。SFT model で初期化
ReferenceKL 計算用の凍結 SFT model
Reward modelスカラー reward を出す
Value modelAdvantage 計算用 (PPO critic)

これらを同時に GPU に載せるため、メモリ要求が極めて大きい ことが PPO RLHF の最大の難点です。

なぜ難しいのか

  • 4 model 同時稼働でメモリが厳しい
  • Reward model の precision が limited な領域に policy が突入しがち
  • Hyperparameter (β, lr, clip, ratio) に敏感
  • 実装が複雑で再現が難しい
  • Reward hacking が起きやすい

これらが DPOGRPO のような単純な代替を生む動機になりました。

実装系統

  • TRL (Hugging Face)
  • TRLX (CarperAI)
  • DeepSpeed-Chat
  • Open-RLHF
  • veRL / NeMo Aligner

数式で見る PPO clipping

PPO では、old policy と new policy の確率比を使います。

rt(θ)=πθ(atst)πθold(atst)r_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{old}}(a_t\mid s_t)}

Clipped surrogate 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]

ここで、AtA_t は advantage、ϵ\epsilon は clip 幅です。この式の気持ちは、「advantage が良い action の確率は上げたいが、一回の update で大きく変えすぎないようにする」というものです。LLM の RLHF では、これに reward model score と KL penalty が組み合わされます。

関連ページ

主なソース