PPOとは
Proximal Policy Optimization / 近接方策最適化
方策の更新幅をクリッピングで制限し安定した学習を実現する強化学習アルゴリズムで、RLHFの方策最適化段階で広く使われる
ひとことで言うと
概要
PPO(Proximal Policy Optimization)は、OpenAIが2017年に発表した強化学習アルゴリズム。 方策(モデルの挙動を決めるパラメータ)を更新する際、更新前後の方策の差が大きくなりすぎないようクリッピングした目的関数を用いることで、学習を安定させつつ効率的に方策を改善する。 TRPO(Trust Region Policy Optimization)が信頼領域を制約として厳密に扱うのに対し、PPOはクリッピングという単純な仕組みで近い効果を得られるようにし、実装のしやすさと性能のバランスから広く普及した。 RLHFでは、人間の選好データから学習した報酬モデルのスコアを最大化するようLLM本体(方策)を更新する段階で、PPOが標準的に使われてきた。
背景
強化学習では、方策の更新幅が大きすぎると学習が不安定になったり性能が急激に悪化したりする問題があった。TRPOはこれを信頼領域による制約で解決したが計算コストが高く実装も複雑だった。PPOは、クリッピングという簡便な手法で同様の安定性を達成し、汎用強化学習アルゴリズムとして広く採用された。
歴史
2017年: OpenAIのSchulmanらが論文「Proximal Policy Optimization Algorithms」を発表。 2022年: InstructGPT/ChatGPTのRLHFパイプラインにおける強化学習アルゴリズムとして採用され、LLMアライメントの主要な最適化手法として広く知られるようになった。
コード例
クリッピング付きサロゲート目的関数の実装例
import torch
def ppo_clip_loss(new_log_probs, old_log_probs, advantages, epsilon=0.2):
# 方策の変化率(重要度サンプリング比)
ratio = torch.exp(new_log_probs - old_log_probs)
unclipped = ratio * advantages
clipped = torch.clamp(ratio, 1 - epsilon, 1 + epsilon) * advantages
# 悲観的な(小さい方の)値を採用して更新幅を制限する
loss = -torch.min(unclipped, clipped).mean()
return loss利点
- クリッピングにより方策の急激な変化を抑え、学習を安定させやすい
- TRPOに比べ実装がシンプルで、様々な強化学習タスクに適用しやすい
欠点
比較
関連用語
よくある質問
PPOとTRPOはどちらを使うべき?
PPOはTRPOと比べ実装がシンプルで、計算コストも低い。そのため多くの実用場面で優先して使われる。TRPOの信頼領域制約による理論的な保証を重視する場合には、TRPOが選択されることもある。
PPOのクリッピング範囲(epsilon)はどのように決める?
0.1〜0.2程度の値が経験的によく使われる。値を小さくすると方策の更新は保守的になり安定しやすいものの、学習速度は遅くなる。逆に値を大きくすると学習は速まるものの、不安定になりやすい。
参考文献
- Research PaperProximal Policy Optimization Algorithms