【強化学習】アクタークリティック

アクタークリティック(actor-critic)とは

アクタークリティックは
行動を選択肢するアクター(actor)と、
アクターが選択した行動を評価するクリティック(critic)で構成される
強化学習のフレームワークの1つです。

以下はイメージ図です。

f:id:ttt242242:20190402183908j:plain:w350

学習の流れはシンプルで、
①:アクターは、方策\(\pi(s,a)\)をもとに行動を選択し、実行します。
②:環境から状態\(s’\)及び報酬\(r\)をクリティックが観測します。
③:得られた状態\(s’\)、報酬\(r\)を使ってアクターの取った行動の評価し、アクターに通知。アクターは評価をもとに方策の更新します。

この①、②、③を繰り返します。

アクターとクリティックが具体的にどのような操作をするかを
述べていきます。

アクター(actor)

アクターは実際の行動を決定し実行するので、行動器とも呼ばれます。
実際に行動した結果に関しては、クリティックにより評価されます。
クリティックにより評価された結果(例:TD誤差)を使って、
自らの行動の価値を修正します。

アクターは 方策\(\pi(s, a)\)と行動優先度 \(p(s, a)\)を保持しています。
ちなみに方策\(\pi(s, a)\)は状態\(s\)において行動\(a\)を行う確率を表しています。
方策\(\pi(s, a)\)は行動が離散値であり、softmax行動選択を行動選択手法とする場合には、行動優先度 \(p(s, a)\)を用いて、以下のように表現できます。

$$\begin{aligned}
\pi(s, a) = \frac{\mathrm{e}^{p(s, a)}}{\sum_{b \in A}\mathrm{e}^{p(s, b)}}
\end{aligned}$$

最もシンプルな行動優先度 \(p(s, a)\)の更新方法は、
クリティックから得られるTD誤差に用いて更新する方法です。
基本的には良い報酬が得られる行動を多く取るように行動優先度を修正していきます。
参考文献では、2つの方法を紹介しています。
1つが単純にTD誤差\(\delta\)分だけ行動優先度を更新する方法です。

$$\begin{aligned}
p(s, a) \leftarrow p(s, a) + \beta \delta
\end{aligned}$$

\(\beta\) は学習率で、どの程度TD誤差を反映するかを決定するパラメータです。

もう1つの行動優先度の更新方法が、
更新度合いに方策を用いるものになります。
頻繁に選択する行動の、更新幅を小さく、
逆に選択確率の低い行動(珍しい行動)は更新幅を大きくとる方法
です。

$$\begin{aligned}
p(s, a) \leftarrow p(s, a) + \beta \delta (1-\pi(s, a))
\end{aligned}$$

クリティック(critic)

クリティックとは評価器と呼ばれますが、
クリティック(critic)は批評家という意味で、
アクターを批評するという役割を持ちます。
参考文献でも紹介されている
シンプルなクリティックでは、
得られた報酬や遷移先の状態を用いてTD誤差\(\delta\)を計算します。

$$\begin{aligned}
\delta \leftarrow r + \gamma V(s’) – V(s)
\end{aligned}$$

\(V(s)\) は状態価値関数です。 アクターに計算したTD誤差\(\delta\)を送ります。
\(V(s)\) に関しても、得られた報酬\(r\)をもとに更新していきます。
最もシンプルな形は以下のようになると思います。

$$\begin{aligned}
V(s) \leftarrow V(s) + \alpha (r – V(s))
\end{aligned}$$

\(\alpha\) も学習率になります。

終わりに

今回は簡単にアクタークリティックの紹介をしました。
アクタークリティック自体はフレームワークですので、
目的に合わせてアクターとクリティックを適切に設計することが重要になります。

参考文献

機械学習スタートアップシリーズ Pythonで学ぶ強化学習 [改訂第2版] 入門から実践まで

コメント

タイトルとURLをコピーしました