Re Reference AI

技術

PPOとは

Proximal Policy Optimization / 近接方策最適化

方策の更新幅をクリッピングで制限し安定した学習を実現する強化学習アルゴリズムで、RLHFの方策最適化段階で広く使われる

強化学習アライメント

ひとことで言うと

AIの方針(方策)を一度に大きく変えすぎないよう制限しながら少しずつ改善する強化学習の手法。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に比べ実装がシンプルで、様々な強化学習タスクに適用しやすい

欠点

  • 報酬モデル・方策・価値関数など複数のモデルを同時に扱うため、RLHFのパイプライン全体としては計算コストが高い
  • クリッピング範囲等のハイパーパラメータ調整が学習の安定性に影響しやすい

比較

  • RLHFRLHFは報酬モデルの学習と方策最適化から成る枠組み全体を指し、PPOはその方策最適化段階で使われる代表的な強化学習アルゴリズム
  • GRPOGRPOはPPOの価値関数(クリティック)を省略し、グループ内の相対的な報酬から方策を最適化することで計算コストを削減した派生手法

関連用語

RLHF強化学習GRPO報酬モデルQ学習

よくある質問

PPOとTRPOはどちらを使うべき?

PPOはTRPOと比べ実装がシンプルで、計算コストも低い。そのため多くの実用場面で優先して使われる。TRPOの信頼領域制約による理論的な保証を重視する場合には、TRPOが選択されることもある。

PPOのクリッピング範囲(epsilon)はどのように決める?

0.1〜0.2程度の値が経験的によく使われる。値を小さくすると方策の更新は保守的になり安定しやすいものの、学習速度は遅くなる。逆に値を大きくすると学習は速まるものの、不安定になりやすい。

参考文献