強化学習の定番 PPOアルゴリズムを基礎から紹介

強化学習の定番 PPOアルゴリズムを基礎から紹介

1. はじめに

人工知能の分野で近年目覚ましい発展を遂げている強化学習は、「試行錯誤」を通じて最適な行動戦略を獲得する機械学習手法です。ゲームをプレイしたり、ロボットを制御したり、複雑な意思決定を行ったりと、その応用範囲は多岐にわたります。

強化学習においては、様々なアルゴリズムが提案されていますが、その中でも特に広く利用され、多くのタスクで高い性能と安定した学習挙動を示すのが PPO (Proximal Policy Optimization) アルゴリズムです。PPOは、OpenAIによって開発され、そのシンプルさ、効率性、そして堅牢性から、強化学習研究や実応用における定番の一つとなっています。

この記事では、PPOアルゴリズムについて、その基礎となる強化学習の概念から始め、方策勾配法やアクタークリティック法といった関連技術に触れつつ、PPOの核となるアイデア、目的関数、そして具体的なアルゴリズムの流れまでを詳細に解説します。PPOがなぜ安定して学習できるのか、その秘密に迫ります。約5000語のボリュームで、PPOを深く理解するための一歩となることを目指します。

2. 強化学習の基礎をおさらい

PPOを理解するためには、まず強化学習の基本的な枠組みを理解しておく必要があります。

2.1 強化学習の基本要素

強化学習は、環境と相互作用するエージェントが、試行錯誤を通じてより良い行動戦略(ポリシー)を学習するプロセスです。主要な要素は以下の通りです。

  • エージェント (Agent): 学習する主体。環境を観察し、行動を選択します。
  • 環境 (Environment): エージェントが行動する場。エージェントの行動に応答し、状態を変化させ、報酬を与えます。
  • 状態 (State, s): ある時点での環境の状況を表す情報です。エージェントは状態を観測して行動を決定します。
  • 行動 (Action, a): エージェントが環境に対して行う働きかけです。
  • 報酬 (Reward, r): エージェントの行動の結果、環境から与えられる即時的な評価値です。強化学習の目的は、この報酬の合計(累積報酬)を最大化することです。

エージェントは、状態 s_t を観測し、行動 a_t を選択して実行します。環境は行動 a_t を受け取り、新しい状態 s_{t+1} へ遷移し、報酬 r_{t+1} をエージェントに与えます。このプロセスが時間ステップ t に従って繰り返されます。

2.2 マルコフ決定過程 (Markov Decision Process, MDP)

多くの強化学習問題は、マルコフ決定過程という数学的な枠組みでモデル化されます。MDPでは、「現在の状態は、過去の状態や行動の履歴に関係なく、将来の状態の確率分布を決定するのに十分である」というマルコフ性(Markov property)が仮定されます。つまり、次の状態 s_{t+1} と報酬 r_{t+1} は、現在の状態 s_t と行動 a_t のみに依存して確率的に決まります。

MDPは通常、以下の要素で定義されます。

  • 状態空間 S
  • 行動空間 A
  • 状態遷移確率 P(s’ | s, a)
  • 報酬関数 R(s, a, s’)
  • 割引率 γ (0 ≤ γ ≤ 1)

割引率 γ は、将来得られる報酬を現在の価値に割り引くための係数です。γが1に近いほど将来の報酬を重視し、0に近いほど即時的な報酬を重視します。強化学習の目的は、割引累積報酬(Return, G_t)の期待値を最大化するようなポリシーを見つけることです。

G_t = r_{t+1} + γ * r_{t+2} + γ^2 * r_{t+3} + … = Σ_{k=0}^∞ γ^k * r_{t+k+1}

2.3 ポリシー(方策)とは

ポリシー π とは、エージェントがどのような状態でどのような行動をとるかを定める規則です。ポリシーは以下の2種類に分けられます。

  • 決定論的ポリシー (Deterministic Policy): 各状態 s に対して、取るべき行動 a を一つだけ決定的に定めます。π(s) = a.
  • 確率的ポリシー (Stochastic Policy): 各状態 s において、取りうる行動 a のそれぞれに対して、その行動を選択する確率を定めます。π(a | s).

PPOは確率的ポリシーを使用します。ニューラルネットワークでポリシーを表現する場合、ネットワークの入力が状態 s、出力が各行動を選択する確率分布となります。

2.4 価値関数とは

価値関数は、ある状態やある状態・行動ペアが、将来どれだけの累積報酬をもたらすかの期待値を表します。

  • 状態価値関数 (State-Value Function, V^π(s)): ポリシー π に従って行動した場合に、状態 s から開始して得られる割引累積報酬の期待値です。
    V^π(s) = E_π [G_t | s_t = s]
  • 状態行動価値関数 (State-Action Value Function, Q^π(s, a)): ポリシー π に従って、状態 s で行動 a をとった後、それ以降はポリシー π に従って行動した場合に得られる割引累積報酬の期待値です。
    Q^π(s, a) = E_π [G_t | s_t = s, a_t = a]

これらの価値関数は、ベルマン方程式と呼ばれる再帰的な関係を満たします。価値関数を知ることで、エージェントは各状態においてどの行動が最も「良い」かを判断できるようになります。

2.5 強化学習の主要なアプローチ

強化学習アルゴリズムは、学習のアプローチによっていくつかのカテゴリに分けられます。

  • 価値ベース学習 (Value-based Learning): 価値関数を学習し、その価値関数に基づいて最適な行動を選択します(例:Q-learning, DQN)。ポリシーは価値関数から派生的に得られます(例えば、greedyポリシー:常にQ値が最大となる行動を選択する)。
  • 方策ベース学習 (Policy-based Learning): ポリシー自体を直接学習します。ポリシーは通常、パラメータ化された関数(例:ニューラルネットワーク)として表現され、累積報酬の期待値を最大化するようにパラメータを更新します。
  • アクタークリティック法 (Actor-Critic Learning): 方策ベース学習と価値ベース学習の両方を組み合わせた手法です。ポリシー(アクター)と価値関数(クリティック)の両方を学習します。アクターはポリシーに基づいて行動を選択し、クリティックはその行動や状態の価値を評価し、アクターの学習を助けます。PPOはこのアクタークリティックの枠組みに属します。

3. 方策勾配法(Policy Gradient)の基礎

PPOは方策ベース学習、特に方策勾配法に基づいています。ここでは、方策勾配法の基本的な考え方を見ていきます。

3.1 方策ベース学習の考え方

方策ベース学習では、ポリシー π をパラメータ θ を持つ関数 π_θ(a | s) として表現します。例えば、ニューラルネットワークを使って、入力された状態 s に対して各行動をとる確率を出力するようにします。学習の目的は、累積報酬の期待値 J(θ) = E_{s~ρ^π, a~π_θ} [G_t] を最大化するパラメータ θ を見つけることです(ρ^π はポリシー π の下での定常状態分布)。

最大化には勾配上昇法を用います。つまり、目的関数 J(θ) の勾配 ∇_θ J(θ) を計算し、パラメータを θ ← θ + α * ∇_θ J(θ) のように更新します(αは学習率)。

3.2 方策勾配定理 (Policy Gradient Theorem)

方策勾配法の核心は、目的関数 J(θ) の勾配を効率的に計算するための「方策勾配定理」です。この定理により、複雑な期待値の勾配が、比較的計算しやすい形に変形されます。

離散行動空間の場合、方策勾配定理は以下のようになります。

θ J(θ) = E{s~ρ^π, a~π_θ} [ ∇_θ log π_θ(a | s) * Q^π(s, a) ]

この式の意味するところは、「ある状態 s で行動 a をとる確率の対数の勾配 (∇_θ log π_θ(a | s)) に、その状態・行動ペアの価値 (Q^π(s, a)) を掛け合わせたものの期待値」が、目的関数の勾配になる、ということです。

∇_θ log π_θ(a | s) は、パラメータ θ を少し変化させたときに、状態 s で行動 a をとる確率がどれだけ変わりやすいかを示します。これは、ディープラーニングでよく使う「勾配」そのものです。

Q^π(s, a) は、状態 s で行動 a をとったことがどれだけ良かったか(将来どれだけ報酬が得られるか)を示します。

つまり、方策勾配定理は「良い行動(Q^π(s, a) が大きい行動)をとった確率を上げる方向にパラメータを更新し、悪い行動(Q^π(s, a) が小さい行動)をとった確率を下げる方向にパラメータを更新する」という直感的なアイデアを数学的に定式化したものです。

3.3 REINFORCEアルゴリズム

方策勾配定理に基づいた最も基本的なアルゴリズムの一つが、REINFORCE (または Monte Carlo Policy Gradient) です。

REINFORCEでは、エージェントはまずポリシー π_θ に従って1エピソード(ゲームの開始から終了まで)プレイし、状態、行動、報酬の系列 (s_1, a_1, r_2, s_2, …, s_T, a_T, r_{T+1}) を収集します。

次に、各タイムステップ t における割引累積報酬 G_t = Σ_{k=t}^T γ^{k-t} r_{k+1} を計算します。これは、そのタイムステップ以降に得られた報酬の合計を割引率で考慮した値であり、Q^π(s_t, a_t) のサンプル値とみなすことができます。

最後に、方策勾配の推定値として、以下の式を使ってパラメータを更新します。

θ ← θ + α * ∇θ J(θ)
ここで、∇_θ J(θ) のサンプル推定値は、
∇_θ J(θ) ≈ (1/N) * Σ
{i=1}^N [ Σ_{t=1}^{T_i} ∇θ log π_θ(a{i,t} | s_{i,t}) * G_{i,t} ]
(Nはエピソード数、T_iはi番目のエピソードの長さ、G_{i,t}はi番目のエピソードのタイムステップtにおける累積報酬)

実際には、期待値の代わりにサンプル平均を用いるため、1エピソードのデータを使ってまとめて更新することが多いです。
θ J(θ) ≈ Σ{t=1}^T ∇_θ log π_θ(a_t | s_t) * G_t

3.4 REINFORCEの課題

REINFORCEは方策勾配法の基本的な考え方を示しますが、いくつかの課題があります。

  • 高分散 (High Variance): 勾配の推定にエピソード全体の累積報酬 G_t を使うため、サンプルごとの G_t の値のばらつき(分散)が大きくなりやすいです。これは学習を不安定にさせ、収束を遅くする原因となります。
  • ベースライン (Baseline) の必要性: 分散を減らすために、方策勾配定理の Q^π(s, a) を Q^π(s, a) – b(s) のようにベースライン b(s) で置き換えることがよく行われます。これにより勾配の期待値は変わりませんが、分散を減らすことができます。状態価値関数 V^π(s) がよくベースラインとして使われます。修正された勾配は E [∇_θ log π_θ(a | s) * (Q^π(s, a) – V^π(s))] となり、Q^π(s, a) – V^π(s) はアドバンテージ関数 A^π(s, a) と呼ばれます。
  • ステップサイズの難しさ: 方策の更新は、学習率 α の選び方によって大きく影響されます。学習率が大きすぎると方策が急激に変化しすぎて不安定になり、小さすぎると学習が進みません。良い学習率を見つけるのが難しいという問題があります。

4. アクタークリティック法(Actor-Critic)の基礎

REINFORCEのような純粋な方策勾配法は、価値関数を学習しません。一方、アクタークリティック法は、ポリシー(アクター)と価値関数(クリティック)の両方を学習することで、方策勾配法の課題(特に分散)を克服しようとします。

4.1 アクター(方策)とクリティック(価値関数)の役割

  • アクター (Actor): ポリシー π_θ を表現します。現在の状態 s を観測し、それに基づいて行動 a を選択します。ニューラルネットワークで実装される場合、入力は状態、出力は行動の確率分布(または連続値行動)です。アクターは方策勾配を用いてパラメータ θ を更新します。
  • クリティック (Critic): 価値関数(通常は状態価値関数 V_φ(s))を表現します。現在の状態 s がどれだけ「良い」か(将来どれだけ累積報酬が得られるか)を評価します。ニューラルネットワークで実装される場合、入力は状態、出力は状態価値の推定値です。クリティックは、経験(観測された報酬や次の状態)から価値関数を学習し、その情報を使ってアクターの学習を助けます。

4.2 アドバンテージ関数 A(s, a)

アクタークリティック法では、方策勾配定理の Q^π(s, a) の代わりに、アドバンテージ関数 A^π(s, a) = Q^π(s, a) – V^π(s) を用いるのが一般的です。これは前述のベースラインとして機能し、勾配の分散を減らす効果があります。

アドバンテージ関数 A^π(s, a) は、「状態 s において行動 a をとることが、その状態の平均的な価値 (V^π(s)) と比べてどれだけ良かったか」を示します。A > 0 ならばその行動は平均より良く、A < 0 ならば平均より悪い行動だったと解釈できます。

方策勾配は以下のようになります。
θ J(θ) = E{s~ρ^π, a~π_θ} [ ∇_θ log π_θ(a | s) * A^π(s, a) ]

4.3 アドバンテージの推定

アクタークリティック法では、Q^π(s, a) も V^π(s) も未知のため、クリティックがこれらの価値関数を学習し、アドバンテージ A^π(s, a) を推定します。最も一般的なアドバンテージ推定方法は、以下のTD誤差(Temporal Difference error)を用いるものです。

δ_t = r_{t+1} + γ * V_φ(s_{t+1}) – V_φ(s_t)

これは、現在の価値推定値 V_φ(s_t) と、観測された即時報酬 r_{t+1} および次の状態の価値推定値 V_φ(s_{t+1}) から計算される「より正確な」価値推定値 (r_{t+1} + γ * V_φ(s_{t+1})) との差です。TD誤差 δ_t は、1ステップ先の情報を用いたアドバンテージの推定値とみなすことができます (A(s_t, a_t) ≈ r_{t+1} + γ * V_φ(s_{t+1}) – V_φ(s_t))。

クリティックは、このTD誤差を用いて価値関数 V_φ(s) を学習します。例えば、L2誤差 (V_φ(s_t) – (r_{t+1} + γ * V_φ(s_{t+1})))^2 を最小化するようにパラメータ φ を更新します。

アクターは、クリティックが推定したアドバンテージを用いて、ポリシーのパラメータ θ を更新します。
∇_θ J(θ) ≈ ∇_θ log π_θ(a_t | s_t) * δ_t

4.4 Generalized Advantage Estimation (GAE)

TD誤差を用いたアドバンテージ推定は1ステップ先の情報しか使いませんが、より長期間の情報も考慮に入れたい場合があります。そこで用いられるのが Generalized Advantage Estimation (GAE) です。

GAEは、異なるステップ数(1ステップ、2ステップ、…、nステップ、エピソード終了まで)の累積報酬推定値を組み合わせ、それらを指数移動平均のように滑らかにしたアドバンテージ推定値 A_t を計算します。GAEにはパラメータ λ (0 ≤ λ ≤ 1) があり、λ=0 の場合は1ステップのTD誤差による推定、λ=1 の場合はモンテカルロ法(エピソード全体の累積報酬)による推定に近づきます。通常、0 < λ < 1 の値が用いられ、バイアスとバリアンスのバランスをとります。PPOでは、このGAEによるアドバンテージ推定が広く利用されています。

4.5 基本的なアクタークリティックの課題

基本的なアクタークリティック手法(例:A2C/A3C)は、REINFORCEより分散が低いという利点がありますが、やはり方策更新のステップサイズの問題に直面します。ポリシーが大きく変化すると、学習の安定性が損なわれたり、これまでに収集した経験データ(サンプル)の妥当性が失われたりする可能性があります。

これを解決するため、TRPOやPPOといったアルゴリズムが開発されました。

5. PPO誕生の背景と目的

基本的な方策勾配法やアクタークリティック法の課題、特に「方策更新のステップサイズが適切でないと学習が不安定になる」という問題を克服するために開発されたのが、PPOの先行研究である TRPO (Trust Region Policy Optimization) です。

5.1 Trust Region Policy Optimization (TRPO)

TRPOは、方策を更新する際に、新しい方策と古い方策との乖離を制限するというアイデアに基づいています。具体的には、KLダイバージェンス(Kullback-Leibler divergence)という指標を用いて、新しい方策 π_θ と現在の(古い)方策 π_θ_old の違いがある閾値 δ 以内に収まるように制約を設けながら、目的関数を最大化します。

TRPOの目的は、古い方策 π_θ_old で収集したデータを用いて、以下の制約付き最適化問題を解くことで新しい方策 π_θ を見つけることです。

maximize_θ L(θ) = E_{s~ρ^π_old, a~π_θ_old} [ (π_θ(a|s) / π_θ_old(a|s)) * A_θ_old(s, a) ]
subject to E_{s~ρ^π_old} [ KL[π_θ_old(.|s) || π_θ(.|s)] ] ≤ δ

ここで、L(θ)は古い方策のデータを用いた目的関数の推定値、A_θ_old は古い方策の下でのアドバンテージ関数推定値、KL[π_θ_old(.|s) || π_θ(.|s)] は状態 s における古い方策と新しい方策の分布間のKLダイバージェンスです。

この制約により、方策の更新ステップが「信頼領域 (Trust Region)」内に制限され、学習の安定性が向上します。

5.2 TRPOの課題

TRPOは理論的には強力ですが、以下の課題がありました。

  • 計算コストが高い: 制約付き最適化問題を解くために、共役勾配法 (Conjugate Gradient) や線探索 (Line Search) といった比較的計算コストのかかる手法が必要になります。特に、KLダイバージェンスの計算や、フィッシャー情報行列(KLダイバージェンスの二階微分の期待値)の計算・反転(あるいはそれと同等の操作)が計算負荷となります。
  • 実装が複雑: 上記の計算処理のため、TRPOの実装は複雑になりがちです。

これらの課題を解決し、TRPOの安定性を引き継ぎつつ、より計算効率が高く実装が容易なアルゴリズムとして開発されたのが PPO です。

5.3 PPOの目的

PPOの目的は、TRPOと同様に、方策の更新ステップを制限することで学習の安定性を確保することです。しかしTRPOのように複雑な制約付き最適化問題を解くのではなく、目的関数自体を工夫することで、この「信頼領域的な」更新を実現します。

PPOの主なアイデアは、以下の2つです。

  1. 重要度サンプリング(Importance Sampling)の利用: 古い方策で収集したデータを用いて新しい方策の目的関数の勾配を推定するために重要度サンプリングを用います。
  2. 目的関数のクリッピング(Clipping): 重要度サンプリングにおける確率比率(新しい方策と古い方策の確率の比)が大きくならないようにクリッピングすることで、方策の急激な変化を防ぎます。これがPPOの核となるアイデアです。

6. PPOの核心:方策の信頼領域的更新

PPOの核となるアイデアは、方策の更新ステップを制限し、TRPOのように古い方策から新しい方策への変化が大きくなりすぎないようにすることです。これを目的関数に直接組み込むことで実現します。

6.1 重要度サンプリング (Importance Sampling)

方策勾配法やアクタークリティック法では、目的関数 J(θ) = E_{s~ρ^π_θ, a~π_θ} [A_θ(s, a)] の勾配 ∇θ J(θ) = E{s~ρ^π_θ, a~π_θ} [∇_θ log π_θ(a | s) * A_θ(s, a)] を計算するために、現在のポリシー π_θ に従って収集したデータ (s, a, A_θ(s, a) の推定値) を使用する必要があります。しかし、ポリシーを更新するたびにゼロからデータを収集するのは非効率です。

古いポリシー π_θ_old で収集したデータ (s_t, a_t) を使って、新しいポリシー π_θ での期待値を推定したい場合、重要度サンプリングを用いることができます。期待値 E_x [f(x)] を、別の確率分布 q(x) からサンプリングされたデータを使って推定する場合、E_x [f(x)] = E_q [f(x) * (p(x)/q(x))] となります。ここで p(x)/q(x) が重要度重みです。

これを方策勾配定理に適用すると、古い方策 π_θ_old の下で収集したデータ (s, a) を用いて、現在の(新しい)方策 π_θ の方策勾配を推定できます。

θ J(θ) = E{s~ρ^π_θ, a~π_θ} [ ∇θ log π_θ(a | s) * A_θ(s, a) ]
= E
{s~ρ^π_old, a~π_θ_old} [ (π_θ(a | s) / π_θ_old(a | s)) * ∇_θ log π_θ(a | s) * A_θ_old(s, a) ]

ここで、ρ^π_θ は新しい方策での状態分布、ρ^π_old は古い方策での状態分布です。状態分布に関しても重要度サンプリングが必要ですが、実際にはデータ収集時の状態分布 ρ^π_old を固定し、行動選択確率 π_θ(a|s) についてのみ重要度サンプリングを行う近似がよく用いられます。

この重要度サンプリングを用いた目的関数(の勾配計算に使われる Surrogate Objective)は以下のように定義されます。

L^{IS}(θ) = E_{s_t~ρ^π_old, a_t~π_θ_old} [ (π_θ(a_t | s_t) / π_θ_old(a_t | s_t)) * A_θ_old(s_t, a_t) ]
= E_t [ ρ_t(θ) * A_t ]

ここで、ρ_t(θ) = π_θ(a_t | s_t) / π_θ_old(a_t | s_t) は確率比率 (probability ratio)、A_t = A_θ_old(s_t, a_t) は古い方策の下で推定されたアドバンテージです。期待値 E_t は、古い方策 π_θ_old で収集したデータによるサンプル平均を表します。

この目的関数 L^{IS}(θ) の勾配は、∇_θ log π_θ(a_t | s_t) * ρ_t(θ) * A_t = ∇_θ log π_θ(a_t | s_t) * (π_θ(a_t | s_t) / π_θ_old(a_t | s_t)) * A_t = ∇_θ π_θ(a_t | s_t) / π_θ_old(a_t | s_t) * A_t となり、元の勾配 E [∇_θ log π_θ(a | s) * A(s, a)] を重要度サンプリングで推定した形と一致します(勾配計算は通常自動微分で行うため、目的関数 L^{IS}(θ) 自体を最大化すれば良い)。

6.2 重要度サンプリングの課題とPPOの解決策

重要度サンプリングは古いデータで学習できる便利な手法ですが、大きな問題があります。それは、新しい方策 π_θ が古い方策 π_θ_old から大きく乖離すると、確率比率 ρ_t(θ) が極端に大きな値や小さな値を取り、勾配の推定値の分散が非常に大きくなってしまうことです。これにより、学習が不安定になったり、望ましくない方策に収束したりする可能性があります。TRPOはこの問題を、KLダイバージェンス制約によって新しい方策と古い方策の乖離を直接制限することで解決しました。

PPOは、この確率比率 ρ_t(θ) が極端な値を取らないように、目的関数自体にクリッピング (Clipping) を導入するという、よりシンプルかつ効果的な手法でこの問題を解決します。これがPPO-Clipアルゴリズムの核となるアイデアです。

7. PPOの目的関数(Clipped Objective Function)

PPOの目的関数は、重要度サンプリングを用いた目的関数 L^{IS}(θ) = E_t [ ρ_t(θ) * A_t ] を修正したものです。特にPPO-Clipで用いられる目的関数は、以下の形をしています。

L^{CLIP}(θ) = E_t [ min(ρ_t(θ) * A_t, clip(ρ_t(θ), 1 – ε, 1 + ε) * A_t) ]

この式を詳しく見ていきましょう。

  • E_t […]: 古い方策 π_θ_old で収集したデータセットにおけるサンプル平均を表します。
  • ρ_t(θ) = π_θ(a_t | s_t) / π_θ_old(a_t | s_t): 確率比率です。現在のパラメータ θ を持つ方策 π_θ が、状態 s_t で行動 a_t を選択する確率と、データを収集した際の古い方策 π_θ_old が同じ行動を選択する確率の比です。
  • A_t: タイムステップ t におけるアドバンテージ推定値です。通常、古い方策 π_θ_old と古い価値関数 V_θ_old を用いてGAEによって計算されます。A_t は学習を通じて固定され、θ の勾配計算時には定数として扱われます。
  • clip(ρ_t(θ), 1 – ε, 1 + ε): ρ_t(θ) の値を区間 [1 – ε, 1 + ε] の範囲にクリップする関数です。
    • もし ρ_t(θ) < 1 – ε なら、clip の値は 1 – ε となります。
    • もし 1 – ε ≤ ρ_t(θ) ≤ 1 + ε なら、clip の値は ρ_t(θ) そのものとなります。
    • もし ρ_t(θ) > 1 + ε なら、clip の値は 1 + ε となります。
    • ε (イプシロン) はクリッピングの範囲を決定するハイパーパラメータです。通常、0.1 や 0.2 といった小さな正の値が使われます。
  • min(…, …): 2つの項のうち小さい方を選択します。
    • 第1項: ρ_t(θ) * A_t – これはクリッピングをしない場合の通常の重要度サンプリングを用いた目的関数項です。
    • 第2項: clip(ρ_t(θ), 1 – ε, 1 + ε) * A_t – これは確率比率をクリップした値を用いた目的関数項です。

7.1 クリップされた目的関数の意味

この L^{CLIP}(θ) の定義により、目的関数は以下のようになります。

  • A_t > 0 の場合(良い行動だった場合): ポリシーを更新する目的は、その行動をとる確率 π_θ(a_t | s_t) を上げる方向にパラメータ θ を更新することです。これにより、確率比率 ρ_t(θ) が増加します。目的関数は min(ρ_t(θ) * A_t, (1 + ε) * A_t) となります。

    • ρ_t(θ) が 1 + ε より小さい間は、第1項 ρ_t(θ) * A_t が選択され、通常の重要度サンプリングによる目的関数と同様に ρ_t(θ) を増加させる方向(つまり π_θ(a_t | s_t) を上げる方向)に勾配が生じます。
    • しかし、ρ_t(θ) が 1 + ε を超えると、第2項 (1 + ε) * A_t が選択されます。この項は ρ_t(θ) に依存しない定数(A_t > 0 なので A_t は正)となります。したがって、目的関数の勾配はゼロになり、それ以上 ρ_t(θ) を増加させる方向には更新されなくなります。
    • つまり、A_t > 0 の場合、π_θ(a_t | s_t) / π_θ_old(a_t | s_t) が 1 + ε を超えない範囲で π_θ(a_t | s_t) を増やすように学習が行われます。これは「良い行動を採る確率を上げるが、上げすぎない」という効果を持ちます。
  • A_t < 0 の場合(悪い行動だった場合): ポリシーを更新する目的は、その行動をとる確率 π_θ(a_t | s_t) を下げる方向にパラメータ θ を更新することです。これにより、確率比率 ρ_t(θ) が減少します(1に近づくか、1より小さくなる)。目的関数は min(ρ_t(θ) * A_t, clip(ρ_t(θ), 1 – ε, 1 + ε) * A_t) となりますが、A_t が負なので、これは effectively max(ρ_t(θ) * |A_t|, clip(ρ_t(θ), 1 – ε, 1 + ε) * |A_t|) を最小化するのと同じです。

    • ρ_t(θ) が 1 – ε より大きい間は、第1項 ρ_t(θ) * A_t が選択され、ρ_t(θ) を減少させる方向(つまり π_θ(a_t | s_t) を下げる方向)に勾配が生じます。
    • しかし、ρ_t(θ) が 1 – ε を下回ると、第2項 (1 – ε) * A_t が選択されます。A_t < 0 なので、この項は (1 – ε) * A_t は負の定数となります。目的関数はそれ以上 ρ_t(θ) を減少させる方向には勾配を生じさせません。
    • つまり、A_t < 0 の場合、π_θ(a_t | s_t) / π_θ_old(a_t | s_t) が 1 – ε を下回らない範囲で π_θ(a_t | s_t) を減らすように学習が行われます。これは「悪い行動を採る確率を下げるが、下げすぎない」という効果を持ちます。

このように、クリップされた目的関数 L^{CLIP}(θ) は、確率比率 ρ_t(θ) が [1 – ε, 1 + ε] の範囲外に出たときに、それ以上方策が更新されないように(または更新度合いが小さくなるように)することで、方策の更新ステップを制限します。これにより、古い方策から新しい方策への急激な変化を防ぎ、学習の安定性を実現しています。これは、TRPOがKLダイバージェンス制約で行っていたことと似ていますが、目的関数自体を修正する方が勾配計算が容易で、SGDによる最適化に適しています。

7.2 価値関数誤差項 (Value Function Loss)

PPOはアクタークリティック手法なので、ポリシー(アクター)と同時に価値関数(クリティック)も学習します。価値関数は、ポリシーの学習を助けるアドバンテージの推定に使われるだけでなく、ベースラインとしても重要です。

価値関数の学習は、通常、状態価値関数 V_φ(s_t) と目標値 V_t^{target} との間のL2誤差を最小化することによって行われます。目標値 V_t^{target} は、収集されたデータから計算される割引累積報酬(またはGAEの目標値)です。

L^{VF}(θ) = E_t [ (V_θ(s_t) – V_t^{target})^2 ]

ここで V_θ(s_t) は、ポリシーネットワークとは独立した(あるいは一部の層を共有する)価値ネットワークの出力です。ここでは記号の簡略化のため θ を使っていますが、実際には価値ネットワーク独自のパラメータ φ を持つ場合が多いです (V_φ(s_t))。

7.3 エントロピーボーナス項 (Entropy Bonus)

確率的ポリシーを使う場合、エージェントが多様な行動を探索できるように、ポリシーのエントロピー(確率分布の不確実性を示す指標)を目的関数に加えることがあります。エントロピーが高いほど、各行動をとる確率が均等に近く、探索が促進されます。

エントロピー S(π_θ)(s) は、状態 s におけるポリシー π_θ のエントロピーです。

S(π_θ)(s) = – Σ_a π_θ(a|s) log π_θ(a|s)

目的関数にエントロピーボーナス項 c2 * S(π_θ)(s_t) を加えることで、ポリシーが過度に決定論的になるのを防ぎ、未知の領域の探索を促します。c2 はエントロピー項の重みを調整するハイパーパラメータです。

7.4 PPOの総合的な目的関数

PPOアルゴリズムでは、これらの3つの項を組み合わせた目的関数を最大化します。

L^{PPO}(θ) = E_t [ L^{CLIP}(θ) – c1 * L^{VF}(θ) + c2 * S(π_θ)(s_t) ]

  • L^{CLIP}(θ): ポリシー更新の核となるクリップされた目的関数項。
  • L^{VF}(θ): 価値関数誤差項。これは最小化したい項なので、目的関数全体としてはマイナス c1 をつけて最大化します(SGDでは勾配降下するので、L^{CLIP} + c1 * L^{VF} – c2 * S を最小化する)。c1 は価値関数誤差の重み。
  • S(π_θ)(s_t): エントロピーボーナス項。最大化したい項なので、目的関数全体としてはプラス c2 をつけて最大化します。c2 はエントロピー項の重み。

この総合的な目的関数を、ミニバッチ確率的勾配降下法 (SGD) などを用いて最適化することで、ポリシーパラメータ θ と価値関数パラメータ φ を(ニューラルネットワークとして実装されている場合)同時に更新します。

8. PPOアルゴリズムのステップバイステップ解説

PPOアルゴリズムは、通常、以下のステップを繰り返し実行します。

  1. データ収集フェーズ:

    • 現在のポリシー π_θ_old と価値関数 V_θ_old を用いて、環境と一定期間(例えば T タイムステップ、または一定数のエピソード)相互作用します。
    • この相互作用を通じて、以下のデータを収集し、バッファに保存します:状態 s_t、行動 a_t、報酬 r_{t+1}、次の状態 s_{t+1}、終端フラグ(エピソードが終了したかどうか)。通常、複数の並列環境インスタンスを使用して効率的にデータを収集します。
  2. アドバンテージの計算:

    • 収集したデータを用いて、各タイムステップ t におけるアドバンテージ推定値 A_t を計算します。一般的には、GAE(Generalized Advantage Estimation)を用います。
    • GAE(λ, γ) を用いたアドバンテージ A_t の計算には、収集された報酬 r と、現在の価値関数 V_θ_old による状態価値推定値 V_θ_old(s_t) が必要です。
    • また、価値関数の学習目標値 V_t^{target} も計算します。これは通常、A_t と V_θ_old(s_t) を足し合わせた値 V_t^{target} = A_t + V_θ_old(s_t) となります。(GAEの計算式から自然に導出されます)
  3. 目的関数の構築と最適化:

    • 収集したデータ (s_t, a_t)、計算したアドバンテージ A_t、および目標価値 V_t^{target} を用いて、PPOの総合的な目的関数 L^{PPO}(θ) を定義します。この際、確率比率 ρ_t(θ) = π_θ(a_t | s_t) / π_θ_old(a_t | s_t) を計算するために、古いポリシー π_θ_old の行動確率も保持しておきます。
    • 収集したデータセットに対して、複数エポック(例えば K エポック)にわたってパラメータ θ を更新します。各エポックでは、データセットをミニバッチに分割し、SGD(例えばAdamオプティマイザ)を用いて目的関数 L^{PPO}(θ) の勾配を計算し、パラメータ θ を更新します。ポリシーネットワークと価値ネットワークが別々のパラメータを持つ場合、それぞれの勾配を計算して更新します。
  4. 方策の更新:

    • 複数エポックの最適化が終了したら、パラメータ θ は更新されています。この新しいパラメータ θ を持つ方策 π_θ が、次のデータ収集フェーズで使用する新しい古い方策 π_θ_old となります。

これらのステップ(データ収集、アドバンテージ計算、複数エポックの最適化、方策更新)を、学習が収束するか、所定のステップ数に達するまで繰り返します。

PPOは、データ収集と学習を分離して行う「オフラインポリシー学習」の側面を持ちつつ、複数エポック学習を行うことでサンプルの効率を上げています。また、クリッピングによって古いデータでも比較的安全に複数回学習できるのが PPO の強みです。

9. PPOの実装とパラメータ設定

PPOを実装する際には、ポリシーネットワークと価値ネットワークをニューラルネットワークで表現するのが一般的です。

9.1 ニューラルネットワークアーキテクチャ

  • ポリシーネットワーク: 入力は状態 s、出力は行動 a の確率分布を表すパラメータです。
    • 離散行動空間の場合: 通常、各行動を選択する確率の対数(log-probabilities)を出力し、ソフトマックス関数を通して確率分布を得ます。
    • 連続行動空間の場合: 通常、正規分布の平均 μ(s; θ) と標準偏差 σ(s; θ) を出力します。行動は N(μ(s; θ), σ(s; θ)) からサンプリングします。log π_θ(a | s) は正規分布の確率密度関数の対数として計算できます。標準偏差 σ は、学習可能なパラメータとするか、状態 s に依存するようにネットワークで出力させます。探索のために、標準偏差の初期値を大きめに設定することがあります。
  • 価値ネットワーク: 入力は状態 s、出力はその状態の価値 V(s) の推定値です。単一の線形出力層を持つ回帰問題として学習されます。
  • ネットワークの共有: ポリシーネットワークと価値ネットワークは、一部の下位層を共有し、それぞれの目的(ポリシーの出力と価値の出力)のために独立した出力層を持つことがよくあります。これにより、学習の効率や性能が向上する場合があります。

9.2 最適化手法

PPOの目的関数の最大化(または最小化)には、Adamなどの確率的勾配降下法が広く用いられます。適切な学習率の設定が重要です。

9.3 ハイパーパラメータの重要性

PPOにはいくつかの重要なハイパーパラメータがあり、タスクや環境によって適切な値を設定することが性能に大きく影響します。

  • クリッピングパラメータ ε: [1 – ε, 1 + ε] の範囲を決定します。通常、0.1 または 0.2 が使われます。εが小さいと方策の変化がより厳密に制限されますが、学習が遅くなる可能性があります。εが大きいと方策の変化が大きくなり、不安定になるリスクが増えます。
  • 学習率 (Learning Rate): ニューラルネットワークのパラメータ更新のステップサイズです。ポリシーネットワークと価値ネットワークで異なる学習率を使用することも可能です。アニーリング(学習を進めるにつれて学習率を小さくする)が用いられることもあります。
  • 割引率 (Discount Factor) γ: 将来報酬の重要度を決定します。0.99 や 0.995 など、1に近い値が使われることが多いです。
  • GAEパラメータ λ: アドバンテージ推定におけるバイアス・バリアンスのトレードオフを調整します。0.95 など、1に近い値がよく使われます。
  • データ収集ステップ数 (T, Horizon): 1回のデータ収集フェーズで環境から収集するステップ数です。このステップ数のまとまりごとにアドバンテージや目標価値を計算し、パラメータ更新に用います。Tが小さいと更新頻度が高まりますが、収集できる情報が限られます。Tが大きいと一度に多くの情報を収集できますが、古いデータを使うことになるため学習が遅れる可能性があります。環境の特性やエピソードの長さによって適切な値を設定します。
  • SGDエポック数 (K): 収集したデータセットを用いて、ニューラルネットワークを学習する回数です。Kが大きいほどデータセットをより活用できますが、クリッピングの効果があっても古いデータに過度に適合してしまうリスクがあります。通常、3〜30程度の値が使われます。
  • ミニバッチサイズ: SGDで勾配計算に使うデータのバッチサイズです。
  • 価値関数誤差重み c1: 総合目的関数における価値関数誤差項の重みです。ポリシー学習と価値学習のバランスを調整します。
  • エントロピーボーナス重み c2: 総合目的関数におけるエントロピーボーナス項の重みです。探索の度合いを調整します。学習が進むにつれて小さくしていく(アニーリング)ことが一般的です。

これらのハイパーパラメータのチューニングは、PPOの性能を最大化するために非常に重要です。タスクに応じてグリッドサーチやランダムサーチなどの手法を用いて最適な組み合わせを探すことが推奨されます。

10. PPOの利点と欠点

10.1 利点

  • 安定した学習: 方策更新を制限するクリッピングにより、学習が安定しやすいです。TRPOのような複雑な制約無しに信頼領域的な更新を実現しています。
  • 比較的良好な性能: 多くの標準的なベンチマークタスクで高い性能を示します。
  • 実装が比較的容易: TRPOと比較して、KLダイバージェンス制約を解くような複雑な計算が不要なため、ニューラルネットワークと標準的な自動微分ライブラリがあれば比較的容易に実装できます。
  • サンプルの効率性: 収集したデータを複数エポックにわたって再利用するため、完全に新しいデータでしか更新できないアルゴリズム(例:REINFORCE)に比べてサンプルの効率が良いです。ただし、オフポリシーアルゴリズム(例:DQN, SAC)ほどではありません。
  • 並列化しやすい: 複数の環境インスタンスで同時にデータ収集を行い、集めたデータをまとめて学習に利用するという並列化戦略が容易です。

10.2 欠点

  • ハイパーパラメータチューニング: 性能がハイパーパラメータの設定に比較的敏感であり、タスクごとに調整が必要な場合があります。
  • 離散行動と連続行動: 離散行動空間と連続行動空間で、ポリシーネットワークの出力層や目的関数の計算に若干の違いがあります。
  • 最適性の保証: クリッピングというヒューリスティックな手法を用いているため、TRPOのように最適性の理論的な保証は強くありません。しかし、実践的には多くの場合で十分な性能を発揮します。
  • 非常に複雑なタスク: 一部の非常に複雑で探索が難しいタスクにおいては、他のアルゴリズム(例:SACのようにオフポリシー学習とエントロピー最大化を組み合わせたもの)の方が優れる場合もあります。

11. PPOの応用例

PPOは、その安定性と性能から様々な強化学習タスクで広く利用されています。

  • ロボティクス: ロボットアームの制御、歩行ロボットの制御など、連続行動空間を持つタスク。
  • ゲームプレイ: Atariゲーム、MuJoCo環境(物理シミュレーション)、さらにはDota 2といった複雑なマルチプレイヤーゲーム(OpenAI FiveがPPOを大規模並列化して使用)。
  • シミュレーション環境: 車両制御、ドローン制御、物理シミュレーション内のエージェント制御など。
  • 自動運転: 運転ポリシーの学習の一部。
  • その他: 自然言語処理における強化学習、レコメンデーションシステム、資源配分など、方策ベース学習が有効なあらゆる領域。

12. まとめ

この記事では、強化学習の定番アルゴリズムであるPPO(Proximal Policy Optimization)について、その基礎から詳細までを解説しました。

まず、強化学習の基本的な概念(エージェント、環境、状態、行動、報酬、MDP、ポリシー、価値関数)を確認しました。次に、PPOのルーツである方策勾配法(REINFORCE)とその課題(高分散、ステップサイズの難しさ)、そしてアクタークリティック法(分散低減、アドバンテージ推定、GAE)の基礎を解説しました。

PPOは、これらの先行研究の課題、特に方策更新のステップサイズ問題を解決するために開発されました。PPOはTRPOのアイデアである「方策更新の信頼領域」を、よりシンプルかつ効率的なクリップされた目的関数によって実現しています。この目的関数は、古い方策と新しい方策の確率比率を一定範囲にクリッピングすることで、方策の急激な変化を防ぎ、学習の安定性を大幅に向上させます。

PPOアルゴリズムは、現在のポリシーでデータを収集し、そのデータを用いてクリップされたポリシー目的関数、価値関数誤差項、エントロピーボーナス項を組み合わせた総合目的関数を構成し、これを複数エポックにわたって最適化するという流れを繰り返します。

PPOは、その安定性、性能、実装の容易さから、強化学習の研究開発や実応用において非常に人気があり、多くのタスクで強力なベースラインアルゴリズムとして機能しています。もちろん、タスクに応じて適切なハイパーパラメータチューニングが必要であり、すべてにおいて最良のアルゴリズムというわけではありませんが、まず試してみるべきアルゴリズムの一つと言えるでしょう。

PPOを理解することは、現代の深層強化学習を学ぶ上で非常に重要です。この記事が、PPOの仕組みとその強みを深く理解するための一助となれば幸いです。PPOを足がかりに、さらに多様な強化学習アルゴリズムの世界を探求してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール