RLHF with PPO
RLHF with PPO は、reward model と PPO を組み合わせる 古典的な RLHF レシピ です。InstructGPT で確立され、ChatGPT、Llama 2、Claude などの aligned LLM の基礎となりました。
3 段階の pipeline
- SFT: instruction data で fine-tune
- Reward Model: pairwise preference から RM を学習
- PPO: SFT policy を RM の reward で最適化
PPO の objective
LLM RLHF の reward は通常、
の形を取ります。
- : reward model のスコア
- : KL 重み (alignment と SFT 維持の trade-off)
- : 凍結された SFT policy
これで、reward を最大化しつつ SFT から離れすぎない更新を行います。
必要な 4 つの model
| Model | 役割 |
|---|---|
| Policy | 学習対象。SFT model で初期化 |
| Reference | KL 計算用の凍結 SFT model |
| Reward model | スカラー reward を出す |
| Value model | Advantage 計算用 (PPO critic) |
これらを同時に GPU に載せるため、メモリ要求が極めて大きい ことが PPO RLHF の最大の難点です。
なぜ難しいのか
- 4 model 同時稼働でメモリが厳しい
- Reward model の precision が limited な領域に policy が突入しがち
- Hyperparameter (β, lr, clip, ratio) に敏感
- 実装が複雑で再現が難しい
- Reward hacking が起きやすい
これらが DPO や GRPO のような単純な代替を生む動機になりました。
実装系統
- TRL (Hugging Face)
- TRLX (CarperAI)
- DeepSpeed-Chat
- Open-RLHF
- veRL / NeMo Aligner
数式で見る PPO clipping
PPO では、old policy と new policy の確率比を使います。
Clipped surrogate objective は次の通りです。
ここで、 は advantage、 は clip 幅です。この式の気持ちは、「advantage が良い action の確率は上げたいが、一回の update で大きく変えすぎないようにする」というものです。LLM の RLHF では、これに reward model score と KL penalty が組み合わされます。
関連ページ
主なソース
- InstructGPT: https://arxiv.org/abs/2203.02155
- Llama 2: https://arxiv.org/abs/2307.09288
- TRL: https://github.com/huggingface/trl
- DeepSpeed-Chat: https://github.com/microsoft/DeepSpeedExamples/tree/master/applications/DeepSpeed-Chat