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)$$

はるか
はるか
状態、行動、報酬の流れ。
ふゅか
ふゅか
それで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 などが広く使われています。

 

PR