🗂

Actor Criticの理論

に公開

概要と背景

最近強化学習によるロボットの制御に興味があり、個人的に勉強したり会社で有志で集まって強化学習の勉強会を開催している。具体的には強化学習アルゴリズムの書籍を使って理論の理解を進めていたが、ある程度読み進めてきたので、今度は内容をアウトプットし仕組みをよく理解したいなと思い、備忘録的に自分で理解した内容を残しておく。

今回の記事ではActor Criticの理論についてのみ説明する。

想定読者

  • 強化学習について理解したいと思っている方
  • MDPとか累積報酬の概念はわかったが、具体的なアルゴをもっと知りたいと思っている方

Actor Criticの理論

以前紹介したREINFORCE
アルゴリズムでは以下の式で示す方策勾配というものを算出し、この勾配を用いて目的関数(リターン)を最大化するようにパラメータを更新するというものでした。

\begin{align} \nabla_\theta\sum_{\tau}p(\tau;\theta)R(\tau)=\frac{1}{N}\sum_{i=1}^{N}\sum_{t=0}^{H^i-1}\nabla_{\theta}\log\pi_{\theta}(a_t^i|s_t^i) \cdot \sum_{k=t}^{H^i}\{r_k^i\} \end{align}

上式からわかる通り、方策勾配は方策\pi_\thetaとリターンv_t=\sum_{k=0}^{T-t}\gamma^k \cdot r_kを用いて計算される。リターンは単純に観測した報酬から計算する以外にも、行動価値関数や状態価値関数を用いて計算することもできる。

Actor-Critic法では近似された価値関数を用いた方策勾配を推定し学習する。名前の通り行動を生成するActorと価値関数のCriticを同時に学習していくため、Actor-Critic法と呼ばれている。

価値関数を用いた方策勾配の導出

まず、価値関数を使った場合、方策勾配がどのように計算されるのか導出を行う。ただし、簡単のため状態行動空間は離散とし環境の状態遷移確率はp(s^\prime|s,a)とする。

強化学習の一般的な目的関数であるリターンの期待値は、以下のように記述することができる。

J(\pi)=\mathbb{E}_{s_0\sim d_0(s_0)}\mathbb{E}_{\pi(a|s),p(s^\prime|s,a)}[\sum_{t=0}^{\infty}\gamma^tr_t|s_0]

上式において、\mathbb{E}_{\pi(a|s),p(s^\prime|s,a)}[\sum_{t=0}^{\infty}\gamma^tr_t]の部分は初期状態s_0から方策\piに従ったときに得られるリターンの期待値を表している。また、エージェントがとる軌跡は初期状態にも依存するため、このリターンの期待値をさらに初期状態の分布d_0(s_0)に関する期待値を計算している。また状態価値関数は、V^\pi(s_0)\triangleq\mathbb{E}_{\pi(a|s),p(s^\prime|s,a)}[\sum_{t=0}^{\infty}\gamma^tr_t|s_0]なので、上式は以下のように状態価値関数を用いて記述することができる。

J(\pi)=\mathbb{E}_{s_0\sim d_0(s_0)}[V^\pi(s_0)]

方策勾配は強化学習の目的関数を方策のパラメータ\thetaで微分することで、求められるため以下のように記述できる。

\nabla_\theta J(\pi)=\mathbb{E}_{s_0\sim d_0(s_0)}[\nabla_\theta V^\pi(s_0)]

上式より、状態価値関数を使った方策勾配を計算するには、\nabla_\theta V^\pi(s_0)を求める必要がある。

状態価値関数と行動価値関数の関係式V^\pi(s)=\sum_{a}\pi(a|s)Q^\pi(s, a)より、以下の関係式を得ることができる。

\begin{align} \nabla_{\theta}V^\pi(s)=&\nabla_{\theta}(\sum_{a}\pi(a|s)Q^\pi(s,a)) \notag \\ =&\sum_{a}(\nabla_{\theta}(\pi(a|s)Q^\pi(s,a))) \notag \\ =&\sum_{a}(\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \pi(a|s)\nabla_{\theta}Q^\pi(s,a)) \end{align}

式(2)において第二項をさらに式展開するために、行動価値関数のベルマン方程式を考える。行動価値関数のベルマン方程式は以下のように記述できる。

\begin{align} Q^\pi(s,a)=&\sum_{s^\prime}p(s^\prime|s,a)(r+\gamma\sum_{a^\prime}\pi(a^\prime|s^\prime)Q^\pi(s^\prime, a^\prime)) \notag \\ =&\sum_{s^\prime}p(s^\prime|s,a)(r+\gamma V^\pi(s^\prime)) \end{align}

式(3)を式(2)の第二項に代入する。

\begin{align} \nabla_{\theta}V^\pi(s)=&\nabla_{\theta}(\sum_{a}\pi(a|s)Q^\pi(s,a)) \notag \\ =&\sum_{a}(\nabla_{\theta}\pi(a|s)Q^(s,a) + \pi(a|s)\nabla_{\theta}Q^\pi(s,a)) \notag \\ =&\sum_{a}(\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \pi(a|s)\nabla_{\theta}\sum_{s^\prime}p(s^\prime|s,a)(r+\gamma V^\pi(s^\prime))) \notag \\ =&\sum_{a}(\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma \pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\nabla_{\theta}V^\pi(s^\prime)) \notag \\ =&\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\nabla_{\theta}V^\pi(s^\prime) \end{align}

ここで、状態sにおいて方策\pi行動aをとりかつ次状態がs^\primeになる同時確率を考えると、

p(s^\prime, a|s, \pi) = p(s^\prime|s, a)\pi(a|s)

と記述できる。さらに、上式の左辺に対して行動aに対する周辺化を考えると、

\begin{align} \sum_{a}p(s^\prime, a|s, \pi) = p(s^\prime|s, \pi) \notag \\ \sum_{a}p(s^\prime|s, a)\pi(a|s) = p(s^\prime|s, \pi) \end{align}

式(5)の関係式を式4の第二項に適用すると、

\begin{align} \sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\nabla_{\theta}V^\pi(s^\prime) \notag \\ = \sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{s^\prime}p(s^\prime|s, \pi)\nabla_{\theta}V^\pi(s^\prime) \end{align}

次に、式(6)を1ステップ先のサンプルに対して適用すると、

\nabla_{\theta}V^\pi(s^\prime)=\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime) + \gamma\sum_{a^\prime}\pi(a^\prime|s^\prime)\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s^\prime,a^\prime)\nabla_{\theta}V^\pi(s^{\prime\prime})

上式を式(4)の第二項に代入すると、

\begin{align} \nabla_{\theta}V^\pi(s) =&\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\nabla_{\theta}V^\pi(s^\prime) \notag \\ =&\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\{\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime) + \gamma\sum_{a^\prime}\pi(a^\prime|s^\prime)\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s^\prime,a^\prime)\nabla_{\theta}V^\pi(s^{\prime\prime})\} \notag \\ =&\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime)+\gamma^2\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\sum_{a^\prime}\pi(a^\prime|s^\prime)\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s^\prime,a^\prime)\nabla_{\theta}V^\pi(s^{\prime\prime}) \notag \end{align}

ここで、式(5)の関係を導出したときのように、状態sにおいて方策\piに従って行動を生成し2ステップ進むときの同時確率p(s^{\prime\prime}, s^\prime, a^\prime, a|s, \pi)について考える。MDPの性質よりこの同時確率は以下のように分解することができる。

p(s^{\prime\prime}, s^\prime, a^\prime, a|s, \pi)=p(s^{\prime\prime}|s^\prime, a^\prime)\pi(a^\prime|s^\prime)p(s^\prime|s, a)\pi(a|s)

また、この同時確率のs^\prime, a^\prime, aによる周辺化を考えると、

\begin{align} \sum_{a}\sum{s^\prime}\sum{a^\prime}p(s^{\prime\prime}, s^\prime, a^\prime, a|s, \pi)=&\sum_{a}\sum_{s^\prime}\sum_{a^\prime}p(s^{\prime\prime}|s^\prime, a^\prime)\pi(a^\prime|s^\prime)p(s^\prime|s, a)\pi(a|s) \notag \\ =&\sum_a\pi(a|s)\sum_{s^\prime}p(s^\prime|s, a)\sum_{a^\prime}p(s^{\prime\prime}|s^\prime, a^\prime)\pi(a^\prime|s^\prime) \end{align}

式(7)を上式の3項に適用すると、

\begin{align} \gamma^2\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\sum_{a^\prime}\pi(a^\prime|s^\prime)\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s^\prime,a^\prime)\nabla_{\theta}V^\pi(s^{\prime\prime})=&\gamma^2\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s,\pi)\nabla_\theta V^\pi(s^{\prime\prime}) \notag \end{align}

とあらわせる。

また、式(5)を第二項に適用すると、

\gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime)=\gamma\sum_{s^\prime}p(s^\prime|s,\pi)\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime)

ここまでの結果をまとめると、状態価値関数を方策のパラメータ\thetaによって微分して得られる勾配

\nabla_{\theta}V^\pi(s)=\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a) + \gamma\sum_{a}\pi(a|s)\sum_{s^\prime}p(s^\prime|s,a)\nabla_{\theta}V^\pi(s^\prime)
は以下のように変形することができるということになる。

\begin{align} \nabla_{\theta}V^\pi(s)=&\sum_{a}\nabla_{\theta}\pi(a|s)Q^\pi(s,a)+\notag \\ &\gamma\sum_{s^\prime}p(s^\prime|s,\pi)\sum_{a^\prime}\nabla_{\theta}\pi(a^\prime|s^\prime)Q^\pi(s^\prime,a^\prime)+ \notag \\ &\gamma^2\sum_{s^{\prime\prime}}p(s^{\prime\prime}|s,\pi)\nabla_\theta V^\pi(s^{\prime\prime}) \end{align}

この式は再帰的な関係式になっている。詳細な説明は省略するが、この再帰的な関係を無限回展開することを考えると、以下のように記述することができる。

\nabla_{\theta}V^\pi(s)=\sum_{\tilde{s}}\sum_{k=0}^\infty\gamma^kp(s\rightarrow \tilde{s},k,\pi)\sum_{a}\nabla_{\theta}\pi(a|\tilde{s})Q(\tilde{s},a)

ここで、\sum_{k=0}^\infty\gamma^kp(s\rightarrow \tilde{s},k,\pi)=d^\pi(s|s_0)とし、\nabla_\theta\pi(a|s)=\pi(a|s)\nabla_{\theta}\log\pi(a|s)という関係式を上式に用いると、最終的に状態価値関数の勾配は以下のようにして記述できる。

\nabla_{\theta}V^\pi(s)=\sum_s\sum_a d^\pi(s|s_0)\pi(a|s)\nabla_{\theta}\log\pi(a|s)Q(s,a)

これを使って方策勾配\nabla_\theta J(\pi)を記述すると、下記のようになる。

\begin{align} \nabla_\theta J(\pi)=&\mathbb{E}_{s_0\sim d(s_0)}[\nabla_{\theta}V^\pi(s_0)] \notag \\ =&\sum_{s_0}d(s_0)\sum_s\sum_a d^\pi(s|s_0)\pi(a|s)\nabla_{\theta}\log\pi(a|s)Q(s,a) \notag \\ =&\sum_s\sum_a d^\pi(s)\pi(a|s)\nabla_{\theta}\log\pi(a|s)Q(s,a) \notag \\ =&\mathbb{E}_{s\sim d^\pi(s),a\sim \pi(s|a)}[\nabla_{\theta}\log\pi(a|s)Q(s,a)] \end{align}

最終的に得られた式(9)が状態価値関数を使ったときの方策勾配を表現している。REINFORCEとの大きな違いは、方策の対数尤度に対してリターンの期待値(行動価値関数)を用いているか、実際に得られた即時報酬の累積を用いているかである。

近似した価値関数をを用いた方策勾配による方策の学習

上記で価値関数を用いた場合の方策勾配を導出することは出来た。しかし、行動価値関数は連続的な状態行動空間では計算できないため、式(9)の厳密な値は求められない。

そこで、式(9)の値を実際に求めるために、式(9)における行動価値関数をニューラルネットなどの任意の関数で近似することを考える。したがって、実際に方策勾配を推定する場合は、行動価値関数をパラメータwの関数で近似したQ_w(s,a)を用いて以下のようにして推定する。

\begin{align} \nabla_\theta J(\pi)=\mathbb{E}_{s\sim d^\pi(s),a\sim \pi(s|a)}[\nabla_{\theta}\log\pi(a|s)Q_w(s,a)] \end{align}

このように、行動価値関数あるいは状態価値関数を推定し、その推定結果を用いて方策を更新するような方法を広くactor-criticと呼ぶ。特にニューラルネットを用いて価値関数や方策をモデル化した場合、価値関数を表すニューラルネットをcritic networkと呼び、方策を表すニューラルネットをactor networkなどと呼ぶ。

式(10)で記述される方策勾配は、学習対象の方策\pi_\thetaからの行動のサンプリングとこの方策に従って行動したときに得られる状態の分布からのサンプリングが明示的に数式に含まれていることから、オンポリシーのアルゴリズムとして位置づけられる。そのため、価値関数の近似もオンポリシー型のアルゴリズムで行う必要がある。

オンポリシー型の価値関数の学習方法としてSARSA法が存在する。そのため、式(10)に含まれる行動価値関数をSARSA法の目的関数を最小化することで近似することを考える。SARSA法の目的関数は以下の式で表現されるTD誤差である。

\begin{align} \mathcal{L}_{SARSA}(w)=\frac{1}{N}\sum_{i=1}^{N}\sum_{t=1}^{T_i}(r+\gamma Q(s_{{t+1}}^i,a_{{t+1}}^i) - Q(s_t^i, a_t^i))^2 \end{align}

そして、上式を最小化することによって推定された行動価値関数を用いて式(10)の方策勾配を推定し、方策を更新する。行動価値関数を用いた方策勾配ではこれを繰り返すことによって最適な方策に近づけていく。

Actor-Criticの学習アルゴリズム

ここまでで、行動価値関数を使ったactor-critic法の理論的な説明を行った。実際に学習する際は以下に示す疑似アルゴリズムのような手順で学習を行う。

init θ, w
repeat 
    for i in N:
        for t in T_i:
            action ~ π_θ
            s_t+1, reward ~ env.step(s, action)
            t←t+1
        end for
    式(11)によってcritic networkのパラメータを更新
    式(10)の方策勾配によってactor networkのパラメータを更新
until the policy optimize

最後に

今回はActor Criticの理論的な説明のみ行いましたが、その他のアルゴリズムではできるだけ実装と一緒に説明していこうと思います。

ちなみに、以下のアルゴを今後公開していこうと思っています。

  • Advantage Actor Critic (A2C)
  • DDPG
  • PPO
  • Soft Actor Critic
  • MPO

ひとまず、オンライン強化学習に関する手法を記事にしていこうと思っていますが、オフライン強化学習も書けたらいいななど...
時間を見つけながらひそひそと継続していきます。

また、今回のように強化学習のアルゴリズム以外に、ロボットの制御に関する記事も記載しています!興味のある方は以下の記事たちものぞいていただけると幸いです!

以上、ここまで読んでいただきありがとうございます!
少しでも強化学習を学びたい方の助けになればうれしいです!

Discussion