方策勾配法シミュレーター 戻る
機械学習

方策勾配法シミュレーター — 強化学習

強化学習の代表的アルゴリズム「方策勾配法(REINFORCE)」を体験するツールです。連続行動のタスクで、ガウス方策の平均がどのように最適行動へ滑り寄っていくか、ベースラインが勾配のばらつきをどれだけ抑えるかを、固定シードの決定論的な計算でリアルタイムに可視化します。

パラメータ設定
学習率 α
方策パラメータを1回でどれだけ更新するか
方策の標準偏差 σ
探索の幅。大きいほど広く試すが勾配ノイズも増える
学習エピソード数
バッチサイズ
1更新あたりの試行回数。多いほど勾配が安定する
ベースライン
報酬から基準値を引いて勾配分散を下げるか
計算結果
最終方策平均 μ
真の最適行動 a*
最終平均報酬
収束エピソード
報酬の改善量
ベースラインの分散低減効果
報酬地形と方策 — 学習アニメーション

青い曲線が報酬地形 R(a) = −(a−a*)²、赤い縦線が最適行動 a*。黄色のベル曲線がガウス方策で、学習が進むと最適行動へ滑り寄ります。

方策平均 μ の学習推移
平均報酬 の学習推移
理論・主要公式

$$\nabla_\theta J=\mathbb{E}\big[\nabla_\theta\log\pi_\theta(a)\,(R-b)\big]$$

方策勾配定理。期待報酬 J の勾配は、行動 a の対数確率の勾配(スコア関数)に、報酬 R からベースライン b を引いた重みを掛けた期待値で表される。

$$\nabla_\mu\log\pi=\frac{a-\mu}{\sigma^{2}}$$

平均 μ・標準偏差 σ のガウス方策のスコア関数。平均より大きい行動が良い報酬を生めば μ が上がる方向に働く。

$$\mu \leftarrow \mu + \alpha\,\widehat{\nabla_\mu J},\qquad b=\overline{R}$$

学習率 α による勾配上昇の更新式。ベースライン b(バッチ平均報酬 R̄)を引いても勾配の期待値は変わらず、推定の分散だけが下がる。

方策勾配法とは

🙋
強化学習って「Q学習」っていうのを聞いたことがあるんですが、「方策勾配法」はそれとは別物なんですか?
🎓
ざっくり言うと、ゴールは同じ「報酬を最大にする行動を学ぶ」なんだけど、やり方が逆向きなんだ。Q学習は「各行動の価値(点数)」をまず推定して、点数が一番高い行動を選ぶ。価値を経由して間接的に方策を決めるんだね。一方、方策勾配法は方策そのものを直接いじる。このツールでは方策を「平均 μ のガウス分布」という関数で持っていて、報酬が増える方向に μ をちょっとずつ動かしていくんだ。
🙋
方策を直接いじるって、具体的にどうやって「報酬が増える方向」を知るんですか?
🎓
それがREINFORCEという推定法で、勾配は ∇J = E[∇log π(a)·(R−b)] という式になる。∇log π(a) は「その行動をもっと選びやすくする方向」、(R−b) は「その行動が基準よりどれだけ良かったか」だ。平均より良い結果を出した行動はその方向に押されて選ばれやすくなり、悪かった行動は逆に押される。何回も試して平均すれば、自然と良い行動寄りに方策が動くんだよ。
🙋
左のパラメータに「ベースライン」っていうのがありますね。あの (R−b) の b のことですか?引いても引かなくても良さそうな気がするんですが…
🎓
そこが面白いところなんだ。ベースライン b を引いても、勾配の「期待値」は1ミリも変わらない。∇log π の期待値がゼロだからね。でも実際の推定はノイズだらけだ。例えば報酬がぜんぶ「+95点」「+98点」みたいに大きな正の値ばかりだと、どの行動も良く見えて勾配が荒れる。そこで平均の +96点くらいを引いてやると「平均より良いか悪いか」の差だけが残って、推定のばらつきがガクッと減る。右上のカードで「ベースラインなし」に切り替えると、勾配分散が増えるのが数字で分かるよ。
🙋
なるほど。じゃあ学習率や σ(方策の標準偏差)は、大きくすればするほど速く学べるんですか?
🎓
残念ながらそう単純じゃない。学習率 α を上げすぎると更新が暴れて、μ が最適行動を通り越して振動したり発散したりする。σ は探索の幅で、大きいと広く試せるけど勾配のノイズも増えるし、小さいと狭いところしか見ない。下のグラフで α を 0.4 くらいにしてみて。報酬曲線がギザギザに荒れるはずだ。実務ではこのバランス調整が肝で、PPOみたいな新しい手法は「1回の更新で行きすぎない」よう工夫した方策勾配法の発展版なんだよ。
🙋
PPO、聞いたことあります!ChatGPTの学習でも使われてるって。あれも方策勾配法の仲間なんですね。
🎓
そのとおり。今日のRLHF(人間のフィードバックによる強化学習)の中心にいるPPOも、actor-critic法も、根っこはこのREINFORCEと同じ「方策を直接、勾配で押す」という考え方なんだ。このツールは行動が1次元の一番シンプルな例だけど、ここで起きていること——スコア関数で押す、ベースラインで分散を下げる——が大規模言語モデルの調整でもそのまま効いている。基礎を体で覚えるには最高の題材だよ。

よくある質問

Q学習のような価値ベース法は「各状態・行動の価値(期待リターン)」をまず推定し、その価値が最大の行動を選ぶことで間接的に方策を決めます。一方、方策勾配法は方策そのものをパラメータ付きの関数(このツールでは連続行動上のガウス分布)として明示的に持ち、期待報酬を増やす方向にそのパラメータを勾配上昇で直接更新します。連続行動や確率的な方策が自然に扱える、方策が滑らかに変化する、といった利点があり、actor-critic法やPPOの基礎になっています。
REINFORCEの勾配推定は ∇J = E[∇log π(a)·(R−b)] です。∇log π(a) は「その行動を選びやすくする方向(スコア関数)」、(R−b) は「その行動が基準よりどれだけ良かったか」を表す重みです。つまり、平均より良い結果を出した行動はスコアの方向に押されて選ばれやすくなり、悪かった行動は逆に押されて選ばれにくくなります。ガウス方策では ∇_μ log π = (a−μ)/σ² となり、平均より大きい行動を取って良い報酬が出れば μ が上がる、という直感どおりの更新になります。
ベースライン b は勾配推定の分散を下げるためのものです。報酬 R から基準値 b(典型的にはバッチ内の平均報酬)を引いても、∇log π の期待値がゼロであるため勾配の期待値(バイアス)は変わりません。しかし、報酬が全体的に大きな正の値ばかりだと「どの行動も良く見える」ためノイズの大きい勾配になります。平均を引くことで「平均より良いか悪いか」の差だけが残り、推定のばらつきが大幅に減って学習が安定します。このツールではベースラインあり/なしの勾配標準偏差の比を表示します。
学習率 α が大きすぎると更新が暴れて方策が発散・振動し、小さすぎると収束が遅くなります。方策の標準偏差 σ は探索の幅で、大きいほど広く探索できますが勾配のノイズも増え、小さいと局所にとどまりやすくなります。バッチサイズを増やすと1回の勾配推定が安定しますが、1更新あたりの試行回数が増えます。実務では学習率を小さめから始め、報酬曲線が滑らかに上昇するよう σ・バッチサイズと合わせて調整し、ベースラインは基本的に常に使います。

実世界での応用

大規模言語モデルのRLHF:方策勾配法の最も注目される応用が、ChatGPTをはじめとする対話AIの「人間のフィードバックによる強化学習(RLHF)」です。言語モデルが生成する文章を「方策」、人間の好みを学習した報酬モデルのスコアを「報酬」とみなし、PPO(方策勾配法の発展版)で方策を更新します。このツールの μ をモデルの膨大なパラメータに置き換えただけで、本質的な仕組みは同じです。

ロボット制御・連続行動タスク:関節トルクや車輪速度のように、行動が連続値をとる制御問題では、価値ベース法より方策勾配法が自然に使えます。歩行ロボットの脚の動かし方、ドローンの姿勢制御、ロボットアームの軌道生成などは、ガウス方策で連続行動を表現し、シミュレーション内で大量に試行して方策を最適化する典型例です。

ゲームAI・意思決定:囲碁・将棋・ビデオゲームのAIや、在庫管理・広告配信・推薦システムのような逐次意思決定問題でも方策勾配法が使われます。特に行動の選択肢が確率的であるべき場面(相手に読まれない戦略など)では、確率的方策を直接学習できる方策勾配法が向いています。actor-criticはこの分野で広く使われる構成です。

学習・教育における基礎理解:このツールのような1次元の連続バンディットは、強化学習の授業や独学で「方策勾配が本当に最適行動へ収束するのか」「ベースラインがなぜ効くのか」を、数式と挙動の両面から確かめる教材として有効です。固定シードで決定論的に動くため、パラメータを1つ変えたときの違いを正確に比較できます。

よくある誤解と注意点

まず多いのが、「ベースラインを引くと結果が変わる(バイアスがかかる)」という誤解です。ベースライン b が行動 a に依存しない限り、E[∇log π·b] = b·E[∇log π] = 0 となるため、勾配の期待値は b の有無で完全に同じです。変わるのは「分散」だけ。だからこそ平均報酬という賢いベースラインを引いても安心して使え、学習を安定させられます。逆に、b を行動に依存させてしまうとバイアスが入るので、状態には依存してよいが行動には依存させない、という設計が重要です。

次に、「方策勾配法は必ず大域最適に収束する」という思い込み。方策勾配法が保証するのは局所最適への収束であって、報酬地形に複数の山があれば初期の方策や探索幅 σ によって低い山に捕まることがあります。このツールの報酬地形は山が1つの単純なものなので必ず a* に向かいますが、実問題では探索を十分に確保する、複数の初期値から学習する、エントロピー項を加えて探索を促すといった工夫が要ります。

最後に、「学習率を上げれば速く学べる」という過信。REINFORCEの勾配推定はもともとノイズが大きく、学習率を上げるとそのノイズごと大きく踏み込むため、方策が最適行動を通り越して振動したり発散したりします。このツールで α を最大付近にすると報酬曲線が荒れるのが確認できます。実務では学習率を小さめにとり、バッチサイズを増やして勾配を安定させ、PPOのように「1回の更新幅を制限する」仕組みを併用するのが定石です。速さと安定はトレードオフだと意識してください。

使い方ガイド

  1. 学習率(0.001~0.1)とガウス方策の標準偏差(0.1~2.0)を設定する
  2. ベースライン機能の有無を選択し、エピソード数(100~5000)を入力する
  3. シミュレーション実行後、報酬曲線の収束パターンと最終方策平均μが真の最適行動a*にどの程度接近したかを確認する

具体的な計算例

連続制御タスク(1次元移動)において、学習率0.01、標準偏差0.5、エピソード数500の設定で実行した場合:初期方策μ=0.2(真の最適値a*=5.0)から開始し、約300エピソード後に平均報酬が4.8に到達。ベースライン適用時は分散が35%低減され、同じエピソード数で収束が安定化。最終平均報酬は4.95に改善される。

実務での注意点

  1. 学習率が0.05を超えると報酬が発散する傾向が見られるため、連続制御タスクでは0.01~0.03の設定を推奨
  2. 標準偏差を0.3未満に設定すると早期に局所最適に陥る。ロボット制御では0.4~0.8が初期探索と収束のバランスに有効
  3. ベースラインなしでは勾配推定の分散が大きく、2000エピソード以上必要な場合がある。計算コストを削減したい場合はベースライン機能を有効化すべき