🤖

PPO(Proximal Policy Optimization):LLMにおける強化学習の実践

に公開

前回の記事では、LLMにおける強化学習の基礎的な概念と理論的枠組みについて解説しました。テキスト生成をマルコフ決定過程として捉え、報酬モデルによって人間の好みを学習し、方策最適化によってLLMの性能を向上させるという全体像を示しました。本稿では、その理論を実際に実装するための中核的なアルゴリズムであるPPO/Proximal Policy Optimizationについて、数学的な詳細から実装上の課題まで包括的に解説します。

強化学習から実装への架け橋

前回の復習:LLMにおける強化学習の設定

前回確認したように、LLMの強化学習では以下のような設定でマルコフ決定過程を定義しました:

  • 状態 s_t:プロンプト x とこれまでに生成されたトークン列 y_{<t} の組
  • 行動 a_t:語彙表から選択される次のトークン
  • 方策 \pi_\theta(a_t|s_t):状態 s_t における行動 a_t の選択確率
  • 報酬 R:通常は系列完了時に報酬モデルから得られるスコア

そして、強化学習の目標は期待累積報酬を最大化することです:

J(\theta) = \mathbb{E}_{x \sim D, y \sim \pi_\theta(\cdot|x)}[R(x, y)] - \beta \cdot D_{KL}[\pi_\theta || \pi_{ref}]

理論から実装への課題

しかし、この目的関数を実際にどのように最適化するかという問題が残ります。勾配降下法を用いて \theta を更新したいのですが、以下の困難があります:

  1. 確率的方策の勾配計算:離散的な行動空間での確率分布の微分
  2. 期待値の推定:サンプリングベースの推定に伴う高分散
  3. 安定性の確保:方策の急激な変化による性能悪化の防止

これらの課題を解決するために開発されたのが方策勾配法/Policy Gradient Methodsであり、その中でも最も成功したアルゴリズムがPPOです。

PPOが解決する根本的な問題

方策勾配法の基本原理

方策勾配法は、方策 \pi_\theta(a|s) のパラメータ \theta を直接最適化する手法です。方策勾配定理/Policy Gradient Theoremにより、期待報酬の勾配は以下のように表現できることが知られています:

\nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \sum_{t=0}^{T} Q^{\pi_\theta}(s_t, a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right]

ここで、Q^{\pi_\theta}(s_t, a_t) は行動価値関数です。実際の実装では、Q 関数の代わりにアドバンテージ関数 A^{\pi_\theta}(s_t, a_t) = Q^{\pi_\theta}(s_t, a_t) - V^{\pi_\theta}(s_t) を使用することが多くあります。

REINFORCEアルゴリズムとその問題点

最も基本的な方策勾配アルゴリズムであるREINFORCEは、上記の方策勾配定理を直接実装したものです:

\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} A^{\pi_\theta}(s_t, a_t) \nabla_\theta \log \pi_\theta(a_t|s_t) \right]

ここで、A^\pi(s_t, a_t) はアドバンテージ関数、\tau は軌道(trajectory)[1]を表します。

しかし、この単純な方策勾配には致命的な問題があります:更新ステップサイズの制御が困難ということです。小さすぎるステップでは学習が遅く、大きすぎるステップでは方策が破綻的に変化し、性能が急激に悪化する可能性があります。

Trust Region の概念

この問題を解決するために、Trust Region Policy Optimization / TRPOが提案されました。TRPOの核心的なアイデアは、本来の目的関数J(\theta)を直接最適化する代わりに、代理目的関数 / surrogate objectiveを使うことです。

代理目的関数の導出

元々の目的関数:

J(\theta) = \mathbb{E}_{s \sim \rho_{\pi_\theta}, a \sim \pi_\theta} [A^{\pi_\theta}(s,a)]

しかし、新しい方策\pi_\thetaでのデータ収集は計算コストが高くなります。そこで、重要度サンプリングを用いて、古い方策\pi_{\theta_{old}}で収集したデータを再利用します:

J(\theta) \approx L(\theta) = \mathbb{E}_{s \sim \rho_{\pi_{\theta_{old}}}, a \sim \pi_{\theta_{old}}} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} A^{\pi_{\theta_{old}}}(s,a) \right]

このL(\theta)代理目的関数です。重要度比\frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)}により、古いデータを新しい方策の期待値推定に転用しています。

Trust Region制約の必要性

ただし、この近似は\pi_\theta\pi_{\theta_{old}}が近い場合にのみ有効です。方策が大きく変わると近似誤差が増大し、実際の性能J(\theta)が悪化する可能性があります。

そこで、TRPOは以下の制約付き最適化問題を解きます:

\max_\theta L(\theta) = \mathbb{E}_{s \sim \rho_{\pi_{\theta_{old}}}, a \sim \pi_{\theta_{old}}} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} A^{\pi_{\theta_{old}}}(s,a) \right]

subject to: \mathbb{E}_{s \sim \rho_{\pi_{\theta_{old}}}} [D_{KL}(\pi_{\theta_{old}}(\cdot|s) \| \pi_\theta(\cdot|s))] \leq \delta

ここで、KL制約により、L(\theta) \approx J(\theta)の近似が成り立つ範囲内で最適化を行います。これがTrust Region / 信頼領域の考え方です。

TRPOの数学的基盤:自然勾配法

TRPOの制約付き最適化問題を解くために、自然勾配法 / Natural Gradient Methodが用いられます。通常の勾配降下法では:

\theta_{new} = \theta_{old} + \alpha \nabla_\theta L(\theta)

しかし、方策空間ではパラメータ空間の距離方策空間の距離が一致しません。例えば、パラメータの小さな変化が方策に大きな影響を与える場合があります。

自然勾配法では、フィッシャー情報行列 F(\theta) を用いて方策空間での「真の」距離を考慮します:

F(\theta) = \mathbb{E}_{s,a \sim \pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a|s) \nabla_\theta \log \pi_\theta(a|s)^T \right]

自然勾配は通常の勾配をフィッシャー情報行列で変換したものです:

\tilde{\nabla}_\theta L(\theta) = F(\theta)^{-1} \nabla_\theta L(\theta)

TRPOの更新手順

TRPOは以下の手順で方策を更新します:

  1. 方策勾配の計算

    g = \nabla_\theta \mathbb{E} \left[ \frac{\pi_\theta(a|s)}{\pi_{\theta_{old}}(a|s)} A^{\pi_{\theta_{old}}}(s,a) \right]

  2. フィッシャー情報行列の計算

    F = \nabla_\theta^2 \mathbb{E}_{s} [D_{KL}(\pi_{\theta_{old}}(\cdot|s) \| \pi_\theta(\cdot|s))]

  3. 自然勾配方向の計算

    d = F^{-1} g

  4. 最適ステップサイズの決定

    \alpha^* = \sqrt{\frac{2\delta}{d^T F d}}

  5. 方策パラメータの更新

    \theta_{new} = \theta_{old} + \alpha^* d

この手順により、KL制約を満たしながら目的関数を最大化する更新が実現されます。

TRPOの実装上の困難

TRPOは理論的には優れていますが、実装が極めて困難です:

  1. 制約付き最適化:KL制約を満たしながら目的関数を最適化する必要がある
  2. 二次近似の計算:フィッシャー行列の逆行列計算が必要で、計算コストが膨大
  3. ハイパーパラメータの調整:適切な \delta の設定が困難

これらの問題により、TRPOは研究用途には有用ですが、大規模な実用システムには適用困難でした。

PPOアルゴリズムの詳細

クリッピングによる近似的Trust Region

PPOは、TRPOの制約付き最適化をクリッピング操作によって近似する画期的なアイデアです。PPOの目的関数は以下のように定義されます:

L^{CLIP}(\theta) = \mathbb{E}_t \left[ \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) \right]

ここで:

  • r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)} は重要度サンプリング比
  • \epsilon はクリッピング範囲(通常0.1〜0.3)
  • A_t はアドバンテージ推定値

クリッピング機構の詳細分析

クリッピング操作の動作を詳しく見てみましょう。アドバンテージ A_t の符号によって、異なる制約が適用されます:

正のアドバンテージの場合(A_t > 0
この行動は平均より良いため、その確率を増加させたいところです。しかし、r_t(\theta) > 1 + \epsilon となった場合、つまり確率が(1+\epsilon)倍を超えて増加した場合は、それ以上の増加を抑制します。

負のアドバンテージの場合(A_t < 0
この行動は平均より悪いため、その確率を減少させたいところです。しかし、r_t(\theta) < 1 - \epsilon となった場合、つまり確率が(1-\epsilon)倍を下回って減少した場合は、それ以上の減少を抑制します。

数学的な効果の分析

クリッピングが実際にどのような効果をもたらすかを数学的に分析してみましょう。

\frac{\partial L^{CLIP}}{\partial \theta} = \mathbb{E}_t \left[ \frac{\partial}{\partial \theta} \min(r_t(\theta) A_t, \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t) \right]

この勾配は、r_t(\theta) がクリッピング範囲 [1-\epsilon, 1+\epsilon] 内にある場合は通常の方策勾配と同じですが、範囲外では勾配がゼロになります。これにより、悲観的な更新 / pessimistic updateが実現されます:

  • 性能向上が期待される更新でも、変化が大きすぎる場合は抑制
  • 性能悪化が予想される更新でも、変化が大きすぎる場合は抑制

LLMにおけるPPOの実装

アクター・クリティック構造

LLMでPPOを実装する際は、通常アクター・クリティック構造を採用します:

アクター(Actor):方策 \pi_\theta(a_t|s_t) を表現するLLM

  • 入力:プロンプトとこれまでに生成されたトークン
  • 出力:次トークンの確率分布

クリティック(Critic):価値関数 V^\pi(s_t) を近似するモデル

  • 通常、アクターと同じアーキテクチャを使用
  • 最終層のみが異なる(スカラー値を出力)

アドバンテージ推定

実際の実装では、アドバンテージ関数はGeneralized Advantage Estimation / GAEによって計算されます:

A_t = \sum_{l=0}^{\infty} (\gamma \lambda)^l \delta_{t+l}

ここで、\delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) はTD誤差、\lambda はGAEパラメータです。

LLMの文脈では、通常以下のような簡略化が行われます:

A_t = R - V(s_t)

ここで、R はエピソード終了時に得られる報酬(報酬モデルからのスコア)です。これは、LLMの生成タスクがエピソディックであり、通常は系列完了時にのみ報酬が与えられるためです。

PPOの理論的性質と限界

TRPOとの理論的差異

PPOは実用性を重視してTRPOを簡略化したアルゴリズムです。TRPO論文では以下のような厳密な単調改善保証が確立されていました:

J(\pi_{\theta_{new}}) \geq J(\pi_{\theta_{old}}) - C \cdot D_{KL}^{\max}(\pi_{\theta_{old}}, \pi_{\theta_{new}})

ここで、C は定数、D_{KL}^{\max} は状態空間での最大KLダイバージェンスです:

D_{KL}^{\max}(\pi_{\theta_{old}}, \pi_{\theta_{new}}) = \max_{s \in \mathcal{S}} D_{KL}(\pi_{\theta_{old}}(\cdot|s) \| \pi_{\theta_{new}}(\cdot|s))

これは、全ての状態の中で新旧方策の行動分布が最も大きく異なる状態での KL ダイバージェンスを表します。

PPOのクリッピング機構は、この厳密な数学的保証を経験的な安定性で置き換えたものです。理論的保証よりも実装の簡単さと実用的性能を優先した設計となっています。

実践的な限界

なお、PPOにもいくつかの限界があります:

  1. サンプル効率:on-policy手法であるため、データ効率が相対的に低い
  2. ハイパーパラメータ感度:適切な設定が問題依存
  3. 長期的依存関係:非常に長い系列での最適化が困難

特にLLMの文脈では、報酬ハッキングと呼ばれる現象が問題となります。これは、モデルが報酬モデルの脆弱性を悪用して、見かけ上高い報酬を得るが実際には品質の低い出力を生成する現象です。この問題は「パターン崩壊」や「報酬モデルを騙す現象」として分析されており、PPOの重要な課題の一つとされています。

最新の改良手法

PPO-ptx(PPO with pretraining mixing)

InstructGPT論文で導入された手法で、PPO損失に事前学習損失を混合します:

L_{ppo-ptx}(\theta) = L_{ppo-clip}(\theta) + \lambda_{ptx} \mathbb{E}_{x \sim D_{pretrain}} \log(\pi_\theta^{RL}(x))

これにより、強化学習中に言語モデルとしての基本能力が退化することを防ぎます。

Adaptive Clipping

PPO-λ論文で提案された手法で、固定的なクリッピング係数 \epsilon の代わりに、ハイパーパラメータ \lambda を用いて適応的にクリッピングを制御します:

\lambda_n = \lambda_0 \frac{\log(\delta_0 + 1)}{\log(\delta_n + 1)}

ここで、\lambda_n\delta_nはそれぞれ第n回学習イテレーションで使用される\lambda\deltaの値です。\deltaは確率比のクリッピング閾値(通常のPPOの\epsilonに相当)で、学習の進行とともに\delta_0から0まで線形減少します。この適応的調整により、重要な状態での方策更新を優先し、破壊的な大幅更新を防ぎます。

Value Function Clipping

アクターのクリッピングに加えて、価値関数にもクリッピングを適用する手法です。PPOの原論文では標準的な回帰損失 L^{V} = (V_{\theta_t} - V_{targ})^2 が提案されましたが、OpenAI Baselinesの実装では以下のPPO様式の目的関数が採用されました:

L^{V} = \max\left[\left(V_{\theta_t} - V_{targ}\right)^2, \left(\text{clip}\left(V_{\theta_t}, V_{\theta_{t-1}}-\varepsilon, V_{\theta_{t-1}} + \varepsilon\right) - V_{targ}\right)^2\right]

ここで、V_{\theta_t}は前回の価値推定値の周りでクリッピングされ、\varepsilonは方策のクリッピングと同じ値が使用されます。この手法は原論文には記載されていない実装詳細であり、実装詳細の重要性を示した研究において「PPOの標準実装に含まれる非自明な最適化の一つ」として詳細に分析されています。

PPOの実用的成功と産業への影響

InstructGPTでの画期的成果

InstructGPT論文では、PPOを用いたRLHFによって従来のGPT-3を大幅に改善することが実証されました:

  • 効率的な性能向上:1.3BパラメータのInstructGPTが175BパラメータのGPT-3よりも人間評価者に好まれる出力を生成
  • 有害性の劇的削減:真偽性(truthfulness)の向上と有害な出力の大幅減少
  • 指示従順性の確立:複雑で多段階の指示に対する理解と実行能力の向上

この成功により、PPOは大規模言語モデルの人間整合化における標準手法として確立されました。

ChatGPTとPPOの普及

InstructGPTの技術を発展させたChatGPTの爆発的普及により、PPOベースのRLHFは次のような影響をもたらしました:

  • 業界標準の確立:主要なAI企業が類似のアプローチを採用
  • 研究コミュニティへの影響:PPOおよびその改良手法の研究が急激に活発化
  • 実用システムでの検証:数億人のユーザーによる大規模な実証実験

技術的インパクトと限界の発見

PPOの実用化により、以下の重要な知見が得られました:

成功要因

  • 実装の安定性とスケーラビリティ
  • 既存のGPUインフラとの高い親和性
  • 比較的単純な調整で良好な結果が得られる

発見された課題

  • 大規模モデルでの計算コストの増大
  • 報酬ハッキング現象の頻発
  • 長期的な対話一貫性の維持困難

今後の展望と課題

新しいアルゴリズムへの発展

PPOの成功を受けて、多くの改良手法が提案されています:

根本的な課題

しかし、PPOを含む現在の方策最適化手法には、解決すべき根本的な課題が残されています:

  1. スケーラビリティ:モデルサイズが大きくなるにつれて訓練コストが急激に増加
  2. 報酬設計の困難:適切な報酬関数の設計と調整の複雑さ
  3. 分布外般化:訓練時とは異なる状況での性能保証の欠如
  4. サンプル効率性:on-policy手法特有のデータ効率の制約

結論

PPOは、理論的な洞察と実装の簡単さを両立させた画期的なアルゴリズムであり、現在のLLMにおける強化学習の基盤技術となっています。そのクリッピング機構による近似的trust regionアプローチは、TRPOの理論的利点を保持しながら、実用的な実装を可能にしました。

InstructGPTやChatGPTでの成功により、PPOの有効性は実証されていますが、同時にその限界も明らかになってきています。特に、計算効率性、サンプル効率性、長期的な安定性などの課題に対しては、次世代のアルゴリズムが必要となるでしょう。

次回の記事では、これらの課題に対応するために開発されたGRPO / Group Relative Policy Optimizationについて詳しく解説し、PPOからの進歩と新たな可能性について論じる予定です。PPOが築いた基盤の上に、どのような革新的なアプローチが生まれているのかを見ていきましょう。

脚注
  1. 軌道τは一連の状態・行動・報酬の連鎖 (s_0, a_0, r_0, s_1, a_1, r_1, ..., s_T, a_T, r_T) を表す。LLMでは「プロンプトから完全な応答生成まで」の全過程に対応。実際の実装では期待値を直接計算できないため、完全な軌道をサンプリングしてMonte Carlo推定を行う。 ↩︎

Discussion