Vanilla Policy Gradient(VPG)入門:REINFORCEの基本と分散削減・実装解説
Vanilla Policy Gradient とは — 概要
Vanilla Policy Gradient(VPG)は、強化学習における方策勾配法(policy gradient methods)のもっとも基本的な形の一つで、しばしば「REINFORCE」と呼ばれるアルゴリズムに対応します。方策(policy)を直接パラメータ化し、その期待報酬(目的関数)を最大化するためにパラメータの勾配を推定・更新するアプローチです。VPGはモンテカルロサンプリングに基づくオンポリシー手法で、単純かつ理論的に理解しやすい反面、サンプル効率や分散の大きさといった実務上の課題も持ちます。
方策勾配の基本的アイデア(数式での直感)
方策をパラメータ θ で表す πθ(a|s) とし、目的関数を期待累積報酬 J(θ) = E[return] とします。VPG のコアは次の「尤度比(likelihood ratio)トリック」に基づく勾配推定です。
エピソード(trajectory)τ の報酬和を R(τ) とすると、方策勾配の推定式は次の形になります:
∇θ J(θ) = Eτ [ (∑_t ∇θ log πθ(a_t|s_t)) · R(τ) ]
上式は、各時刻における行動の対数確率の勾配を報酬(または時刻 t 以降の報酬)で重み付けすることで、方策の改善方向を示します。実装上はエピソードを複数サンプリングしてその平均を取り、確率的勾配上昇により θ を更新します。
REINFORCE(典型的なVPG実装)の流れ
- 1) 現在の方策 πθ で複数のエピソード(または複数の軌跡)をサンプルする。
- 2) 各エピソードの各時刻 t について、報酬の累積(return)G_t を計算する。通常は将来割引報酬 G_t = ∑_{t'≥t} γ^{t'-t} r_{t'}。
- 3) 勾配推定量を計算する:g ≈ 1/N ∑_{episodes} ∑_t ∇θ log πθ(a_t|s_t) · G_t。
- 4) パラメータを更新(上昇): θ ← θ + α g(α は学習率)。
分散の問題とその軽減策
VPG(REINFORCE)は分散が非常に大きくなりがちで、収束が遅い・不安定になることがよくあります。実用では次のような手法で分散を下げます。
- reward-to-go:単純にエピソード全体の R(τ) を使う代わりに、時刻 t における将来報酬 G_t(t 以降のみ)を使う。これにより不必要な分散が削減される。
- baseline の導入:G_t から状態依存の基準値 b(s_t) を引く。すなわち ∇θ log πθ(a_t|s_t) · (G_t − b(s_t)) を用いる。適切な baseline は無偏(バイアスを導入しない)で分散を減らす。よく用いられる baseline は状態価値関数 Vφ(s) で、別のネットワークで学習する(これが actor-critic に繋がる)。
- advantage の利用:A(s_t,a_t) = Q(s_t,a_t) − V(s_t) の推定を用いる。代表的に GAE(Generalized Advantage Estimation)などがあるが、これはVPGの発展系に相当する。
- ミニバッチ化・正規化:報酬や advantage を平均0・分散1 に正規化するだけでも学習安定化に寄与する。
- entropy bonus:方策のエントロピーに対して正則化項を加え、探索性を保つ。目的関数に −β H(πθ(·|s)) を引く(最小化問題なら+)ことで早期収束を防ぐ。
VPG のアルゴリズム(擬似コード)
for each iteration:
collect N episodes by running policy πθ
for each episode and each time step t:
compute return G_t = Σ_{t'≥t} γ^{t'-t} r_{t'}
compute gradient estimate g = average_over_samples( ∇θ log πθ(a_t|s_t) * (G_t - b(s_t)) )
θ ← θ + α * g
実装上の注意点とハイパーパラメータ
- オンポリシー性:VPGはオンポリシー手法のため、サンプルは常に最新の方策から収集する必要がある。過去のデータをそのまま再利用することはできない(重要度サンプリング等で補正すれば可能だが複雑)。
- バッチサイズとエピソード長:分散を減らすために、十分な数の遷移やエピソードを収集する必要がある。だが長いエピソードは計算コストとメモリを増やす。
- 学習率(α)の調整:方策勾配はステップに敏感なので小さめから試し、学習曲線を見ながら調整する。勾配クリッピングは有効。
- 方策の表現:離散アクションはソフトマックス、連続アクションは平均と分散を出すガウス方策が一般的。分散(分散パラメータ)の扱いは探索に直接影響する。
- 初期化とシード:再現性のために乱数シードや初期化方法を明確にしておく。
VPG と他手法との比較
- Actor-Critic:VPG がモンテカルロ推定で高分散なのに対し、actor-critic は value(または advantage)を学習して baseline として使うことで分散を減らし、サンプル効率を高める。
- TRPO / PPO:VPG は大きなパラメータ更新で方策が急変しやすい。Trust Region Policy Optimization (TRPO) や Proximal Policy Optimization (PPO) は方策の急激な変化を抑える制約やクリッピングを導入し、安定化と高速化を達成している。
- オフライン / オフポリシー手法(DQN, DDPG, SAC 等):これらは経験再利用(リプレイバッファ)によりサンプル効率が高いが、方策の表現や理論、適用領域が異なる。
長所・短所のまとめ
- 長所:概念がシンプルで実装しやすく、理論的にクリーン(方策を直接学習、連続・離散どちらにも自然に対応)。
- 短所:分散が大きくサンプル効率が悪い、ハイパーパラメータに敏感、オンポリシー制約。
実世界での応用と推奨される実践
教育的な実験やプロトタイピング、方策勾配の基礎理解にはVPGが適しています。しかし、実際のタスク(特に高次元・長時間のタスク)では、actor-critic、PPO、SAC 等の改良手法を用いることが一般的です。実装時は以下を推奨します:
- reward-to-go と baseline(もしくは単純な平均差引き)を必ず試す。
- advantage の正規化(平均0、分散1)を行う。
- エントロピー正則化で探索性を維持する。
- 学習率スケジュールや勾配クリッピングで安定化を図る。
まとめ
Vanilla Policy Gradient(REINFORCE)は方策勾配法の基礎であり、方策を直接パラメータ化して勾配上昇で学習するシンプルかつ重要なアルゴリズムです。理論的に明快で教育的価値は高い一方、分散の大きさやオンポリシー制約による実用上の限界があり、現代の多くの実問題では actor-critic や PPO 等の改良手法が採用されます。まずVPGで概念と実装を理解し、その後に分散削減・安定化技術を順に学ぶのが効率的です。
参考文献
- Sutton, R.S. & Barto, A.G., "Reinforcement Learning: An Introduction" (2nd ed.) — Chapter on Policy Gradient Methods
- REINFORCE algorithm — Wikipedia
- OpenAI Spinning Up: Vanilla Policy Gradient (VPG) 解説
- Schulman et al., "Trust Region Policy Optimization" (TRPO), arXiv:1502.05477
- Schulman et al., "Proximal Policy Optimization" (PPO), arXiv:1707.06347


