REINFORCEとは?方策勾配定理との関係をわかりやすく解説

1. REINFORCE
REINFORCE は、強化学習における「方策勾配法(Policy Gradient)」の最も基本的な手法です。エージェントが行動を選び、その結果得られる「収益(return)」の期待値を最大化するように、確率的な方策を直接学習します。
ちなみに、REINFORCE は
REward Increment = Nonnegative Factor × Offset Reinforcement × Characteristic Eligibility
の略です。なんか思ってたのと違うという感想です。
2. 設定
2.1. 方策と収益
強化学習では、時刻 \(t\) における状態・行動・報酬を確率変数 \(S_t, A_t, R_t\) で表します。1エピソード全体の流れはMDPに従って、次のように書けます。
$$\tau = (S_0, A_0, R_0, S_1, A_1, R_1, \ldots, S_T)$$
また、$\tau$に従う方策(policy) \(\pi_\theta(a|s)\) は「状態 \(s\) で行動 \(a\) を選ぶ確率」を表す関数で、パラメータ \(\theta\) によって形が決まります。ここで、収益$G(\tau)$を次のように定義します。
$$G(\tau) = R_0 + \gamma R_{1} + \gamma^2 R_{2} + \cdots + \gamma^{T-t}R_T, \quad \gamma \in [0,1)$$


2.2. 目的関数
エージェントの目的は「収益を最大化すること」です。したがって、目的関数は収益$G(\tau)$を使って表されます。
$$J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[G(\tau)]$$
つまり、「方策 \(\pi_\theta\) に従って行動したときに得られる総収益 \(G_0\) の期待値」を大きくするように学習します。
2.3. 方策勾配定理
方策のパラメータ \(\theta\) に関する勾配は、次のように方策勾配定理で表されます。
$$\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta}[\nabla_\theta \log \pi_\theta(A|S)\,(Q^\pi(S,A) – b(S))]$$
ここで:
- \(Q^\pi(S,A)\):行動価値関数(状態と行動が与えられたときの収益の期待値)
- \(b(S)\):ベースライン
3. 実データでの近似
実際には、方策勾配定理の計算が大変であるため、REINFORCE では観測されたデータを使って近似します。行動価値関数 \(Q^\pi(S,A)\) は収益 \(G_t\) で近似されます。
$$Q^\pi(S,A) \approx G_t$$
これを用いると、方策勾配は次のように近似されます。
$$\nabla_\theta J(\theta) \approx \mathbb{E} \Big[\sum_t \nabla_\theta \log \pi_\theta(a_t|s_t)\,(G_t – b(s_t)) \Big]$$
この勾配は実装上、別の形で書かれますが、実際は同じ意味です。例えば、次のような表現があります。
$$\nabla_\theta J(\theta) \approx \frac{1}{N} \sum_t \gamma^t \nabla_\theta \log \pi_\theta(a_t|s_t)\,(g_t – b(s_t))$$
3.1. 方策の更新
さて、ここまでの内容で方策勾配定理を近似できたので、次のようにパラーメター$\theta$を更新できます。
$$\theta = \theta +\alpha \frac{1}{N} \sum_t \gamma^t \nabla_\theta \log \pi_\theta(a_t|s_t)\,(g_t – b(s_t)) $$
$\alpha$は学習率です。
4. ベースライン
次にベースラインをどうするのか問う問題が出てきますね。一般的に平均が使われるので、行動価値関数の平均を使うのがよさそうです。ですので、ベースラインとして行動価値関数の期待値である「状態価値関数」が使われます。
$$b(s_t) = V^\pi(s_t)$$
これを代入すると、
$$\nabla_\theta J(\theta) \approx \sum_t \nabla_\theta \log \pi_\theta(a_t|s_t)\,(g_t – V^\pi(s_t))$$
4.1. 価値関数の学習(関数近似)
状態価値関数がわかればいいんですが、実際には状態価値関数 \(V^\pi(s_t)\) は未知なので、パラメータ \(\phi\) を持つ関数近似器(深層学習モデル) \(V_\phi(s_t)\) で学習します。
$$\phi = \phi + \alpha\frac{1}{N}(g_t – V^\pi(s_t)) \nabla V^\pi(s_t)$$
5. まとめ
REINFORCE法は、エピソードごとに得られた収益 \(g_t\) を使って方策を更新する、とてもシンプルな手法です。ただし、サンプルのばらつきが大きく、学習が不安定になることもあります。そのため、これを改良した Actor-Critic法 や PPO などが広く使われています。