強化学習についてまとめる(3) 方策勾配

Nov 17, 2017  

前回、 前々回 では、価値関数を求め、それを基に行動を決定する手法について扱ってきた。 しかし、そもそもロボットの行動を決めるのは方策であるのだから、その方策を直接学習できないのだろうか?という疑問が湧く。

今回は、前回までとは全く違うアプローチとして、方策勾配法 をまとめる。 方策勾配法は、方策をあるパラメタで表される関数とし、そのパラメタを学習することで、直接方策を学習していくアプローチである。

方策を直接扱うことで

  • $V^{\pi}$や$Q^{\pi}$を求めるような複雑でメモリを消費する手法を使わなくて良い
  • 連続空間での行動が扱いやすくなる

などの利点がある。 一方で、

  • 方策オン型の学習になるため、行動のタイミングで方策を更新しなくてはならず、学習効率が落ちる
  • 価値反復による方法と違って、最適な状態への収束を保証するものがない。つまり、局所最適に陥る可能性がある。
  • 行動に対して学習が敏感に影響を受けてしまうため、学習ステップの決定が難しい

などの欠点がある。

方策のモデルと勾配

$\theta$でパラメタライズされた確率的な方策$\pi_{\theta}$を求める問題を考える。 $\tau$をステップ$0$から$H$までの状態-行動の系列(状態-行動空間でのパス)$\tau=(s_0, a_0, \dots, s_H, a_H)$としたとき、方策の評価関数として以下を考える。

\begin{equation} \begin{aligned} U(\theta) &=& E [\sum_{t=0}^H R(s_t, u_t) ; \pi_{\theta}] \\
&=& \sum_{\tau} P(\tau ; \theta) R(\tau) \end{aligned} \end{equation} ここで、$R(\tau) = \sum_{t=0}^H R(s_t, u_t)$としている。 また$P(\tau ; \theta)$はパスの生成モデルであり、定義より \begin{equation} P(\tau ; \theta) = \prod_{t=0}^H P(s_{t+1} | s_t, u_t) \pi_{\theta}(u_t | s_t) \label{eq:p_tau_theta} \end{equation} である。

以上の設定において、方策の学習は最終的に \begin{equation} \max_{\theta} U(\theta) = \max_{\theta} \sum_{\tau} P(\tau ; \theta) R(\tau) \end{equation} を求める問題となる。 そこで、微小ステップごとに評価関数の$\theta$での微分方向 \begin{equation} \nabla_{\theta} U(\theta) = \nabla_{\theta} \sum_{\tau} P(\tau ; \theta) R(\tau) \end{equation} に方策を更新することで、方策を最適化することを考える。 これは以下のように変形できる。

\begin{equation} \begin{aligned} \nabla_{\theta} U(\theta) &=& \nabla_{\theta} \sum_{\tau} P(\tau ; \theta) R(\tau) \\
&=& \sum_{\tau} \nabla_{\theta} P(\tau ; \theta) R(\tau) \\
&=& \sum_{\tau} \frac{P(\tau ; \theta)}{P(\tau ; \theta)} \nabla_{\theta} P(\tau ; \theta) R(\tau) \\
&=& \sum_{\tau} P(\tau ; \theta) \frac{\nabla_{\theta} P(\tau ; \theta)}{P(\tau ; \theta)} R(\tau) \\
&=& \sum_{\tau} P(\tau ; \theta) \nabla_{\theta} \log P(\tau ; \theta) R(\tau) \\
\end{aligned} \end{equation}

$P(\tau ; \theta)$で期待値を取る操作は、以下の平均を取る操作として近似する。 \begin{equation} \nabla_{\theta} U(\theta) \approx \hat{g} = \frac{1}{m} \sum_{i=0}^m \nabla_{\theta} \log P(\tau^{(i)} ; \theta) R(\tau^{(i)}) \end{equation}

この式を見ると、更新則によって、

  • 報酬$R$が高いパスの存在確率を上げる
  • 報酬$R$が低いパスの存在確率を下げる

方向に方策が更新されることがわかる。 これをパスではなく方策と遷移確率について立式するとどうなるだろうか。 式\eqref{eq:p_tau_theta}より、

\begin{equation} \begin{aligned} \nabla_{\theta} \log P(\tau^{(i)} ; \theta) &=& \nabla_{\theta} \log \left[ \prod_{t=0}^H P(s_{t+1}^{(i)} | s_t^{(i)}, u_t^{(i)}) \pi_{\theta}(u_t^{(i)} | s_t^{(i)}) \right] \\
&=& \nabla_{\theta} \left[ \sum_{t=0}^H \log P(s_{t+1}^{(i)} | s_t^{(i)}, u_t^{(i)}) \right] + \nabla_{\theta} \left[ \sum_{t=0}^H \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) \right] \\
&=& \nabla_{\theta} \sum_{t=0}^H \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) \\
&=& \sum_{t=0}^H \nabla_{\theta} \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) \end{aligned} \end{equation}

となる。状態遷移確率$P(s_{t+1}^{(i)} | s_t^{(i)}, u_t^{(i)})$は$\theta$をパラメタとして持たないので、$\theta$で微分するとこの項が消えるのである。

結局、勾配は \begin{equation} \begin{aligned} \hat{g} = \frac{1}{m} \sum_{i=0}^m \nabla_{\theta} \log P(\tau^{(i)} ; \theta) R(\tau^{(i)}) \\
where \hspace{15pt} \nabla_{\theta} \log P(\tau^{(i)} ; \theta) = \sum_{t=0}^H \nabla_{\theta} \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) \end{aligned} \end{equation}

すなわち \begin{equation} \hat{g} = \frac{1}{m} \sum_{i=0}^m \sum_{t=0}^H \nabla_{\theta} \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) R(\tau^{(i)}) \label{eq:policy_gradient} \end{equation}

で表され、方策の$\theta$での勾配のみで表現できることがわかる。

Baseline

式\eqref{eq:policy_gradient}にbaseline $b$という値を追加する。 \begin{equation} \hat{g} = \frac{1}{m} \sum_{i=0}^m \sum_{t=0}^H \nabla_{\theta} \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) (R(\tau^{(i)}) - b) \label{eq:base_lined_policy_gradient} \end{equation}

baselineは$\hat{g}$の値には影響を与えないが、調整前に比べて$\nabla_{\theta} \log \pi_{\theta} (u_t^{(i)} | s_t^{(i)}) (R(\tau^{(i)}) - b)$の分散を減少させる効果がある。

$R(\tau^{(i)}) - b$が小さいほど分散が小さくなるので、$b$の決定法としては、$R(\tau^{(i)})$との二乗距離を小さくするように調整すればよい。