強化学習:再・迷路問題1(Q学習、線形関数近似)

f:id:shirakonotempura:20190314233006p:plain

春休みなどもあり少し間が空きましたが、引き続き強化学習についていろいろ書いていきます.
先に書いておくと、今回の記事では迷路の内容まで至っていません.

!!これは私の勉強用ノートです!!

はじめに

今回の主な目的は、線形関数近似の実装です.
というのも、これまでの記事で関数近似の理論について整理してきましたが、具体的なことをやっていなかったので実はよくイメージがつかめていませんでした.

強化学習:関数近似(その1:導入) - 他力本願で生き抜く(本気)

強化学習:関数近似(勾配法とか) - 他力本願で生き抜く(本気)

強化学習:関数近似(パラメータの更新) - 他力本願で生き抜く(本気)

そこで具体的に何かやろうということで、プランニングのときに扱った迷路問題を少し改良して、関数近似で学習するということをしていきたいと思います.といっても、タイトルにあるとおり、線形関数近似になります.

以下、線形の関数近似の復習からはじめて説明していきます.
一応Sutton本だと9.4章あたりの範囲になるかと思います.

線形近似をおさらい

関数近似は、表形式(Tabular)で扱っていた価値関数を \boldsymbol{w}をパラメータに持つ関数(\hat v(s,\boldsymbol{w})\hat q(s,a; \boldsymbol{w}))で表現してしまおうというものでした.その中でも最もベーシックな近似の方法が以下(1)式で示す表現方法になります.今回の記事では行動価値を関数近似で表現することを扱いますので、以降の数式も行動価値を対象にしています.

$$ \hat q(s,a; \boldsymbol{w}) = w_1 \phi_1 + w_2 \phi_2+ \cdots + w_N \phi_N \qquad \qquad \cdots \qquad (1)$$

ここで、\phiは基底関数を表します.基底関数とパラメータ \boldsymbol{w}が一次線形結合でつながっているので、この近似方法を線形近似と呼びます.

(1)式をベクトル表現を使って書き直すと以下のように書くことができます.

$$ \hat q(s,a; \boldsymbol{w}) = \boldsymbol{w} \boldsymbol{\phi}^T \qquad \qquad \cdots \qquad (2)$$

ここで、\boldsymbol{w}および\boldsymbol{\phi} は、それぞれ以下のようなベクトルを意味しています.

\qquad \boldsymbol{w} = [w_1, w_2, \cdots , w_N]
\qquad \boldsymbol{\phi} = [\phi_1, \phi_2, \cdots , \phi_N]

これで、行動価値を線形近似の形で示すことができました.

関数の表現力について

上記で示した式中のNの値、つまり基底関数の数が増えれば、この関数の表現力は高くなります.
関数の表現力というのは、この関数がどのくらいいろんな値を返すことができるかということなのですが、少し図を使って表現力について考えてみます

例として分散=0.5(固定)としたガウス分布の図を例にして線形近似関数が示す関数の形状を見ていきます.なお、このガウス関数の値zは、分布の中心を(\mu_1, \mu_2)として、以下の式で計算しています.

 z = \exp \biggl( - \frac{(x-\mu_1)^2 + (y-\mu_2)^2}{2\sigma^2} \biggr)
  • 基底関数1つの例:
    どんなに頑張ってパラメータを調整しても、ガウス関数のベル型の形状を表現することしかできません. f:id:shirakonotempura:20190315044045p:plain

  • 基底関数4つの例:
    パラメータを調整すれば、基底関数が1つだった場合と比べると複雑な形状を示すことができそうです.しかし、パラメータを変えたところでほとんど変化しないところもまだまだあります. f:id:shirakonotempura:20190315044103p:plain

  • 基底関数25個:
    これくらいあれば、かなり複雑な形状を示すことができそうな気がします. f:id:shirakonotempura:20190315044115p:plain

基底関数にどんな関数を選んで、Nをどの程度にするかということは、人が決める必要があります. Nが少なすぎるといくら学習を繰り返してたとしても表現できない部分が出てきてしまいますので、けっこう大きな値を設定しておけばいいのかなと思っています.もちろんその分計算負荷は増えますので、時間がかかりすぎるようであれば減らしていく必要があります.

パラメータの更新における線形近似のメリットについて

以前の記事の最後に、パラメータ[\tex:\boldsymbol{w}]の更新式を以下のように書きました.

$$\boldsymbol{w_{t+1}} \leftarrow \boldsymbol{w}_{t} + \alpha \Bigl[R_{t+1} + \gamma \hat{q}_(s_{t+1}, a_{t+1}:\boldsymbol{w}) - \hat{q}(s_t, a_t; \boldsymbol{w}_{t})\Bigr] \nabla \hat{q}(s_t, a_t; \boldsymbol{w}_t) \qquad \cdots (3)$$

パラメータ更新に関する詳細は今回は省きますが、この式の末尾にある\nabla \hat{q}(s_t, a_t; \boldsymbol{w}_t)の部分は、近似関数\hat{q}のパラメータ\boldsymbol{w}による偏微分を示しています.仮定した近似関数の微分が簡単に求められればいいのですが、複雑な関数を仮定すればするほど微分の計算は複雑になってきます.ここで、線形近似のメリットが現れます

線形近似で表現した行動価値の近似関数\hat{q}をもう一度以下に示します.簡単のため、\hat q(s,a; \boldsymbol{w})\hat qとだけ表します.

$$ \hat q(s,a; \boldsymbol{w}) = w_1 \phi_1 + w_2 \phi_2+ \cdots + w_N \phi_N \qquad \qquad \cdots \qquad (1)$$

この式をパラメータ\boldsymbol{w}偏微分するということは、以下のような計算を行うことになります.

$$ \frac{\partial \hat q}{\partial \boldsymbol{w}} = \biggl[ \frac{\partial \hat q}{\partial w_1}, \frac{\partial \hat q}{\partial w_2}, \cdots, \frac{\partial \hat q}{\partial w_N} \biggr] \qquad \qquad \cdots \qquad (4)$$

(4)式中の\frac{\partial \hat q}{\partial w_1}を詳細に見てみます.

$$\frac{\partial \hat q}{\partial w_1} = \frac{w_1 \phi_1}{w_1} + \frac{w_2 \phi_2}{w_1}+ \cdots + \frac{w_N \phi_N}{w_1}\qquad \qquad \cdots \qquad (5)$$

くどいですが、(5)式は\hat qw_1による微分を示しています.第1項以外はw_1に関してみれば、定数項になりますのでw_1微分すれば0になり、\phi_1だけが残ることになります.
同様にして、\hat qw_2w_3、・・・w_N微分を考えると、(4)式は以下のように基底関数そのものになります.

$$ \frac{\partial \hat q}{\partial \boldsymbol{w}} = \biggl[ \phi_1, \phi_2, \cdots \phi_N \biggr] \qquad \qquad \cdots \qquad (6)$$

これにより関数近似に線形近似を用いた場合、(3)式で示したパラメータの更新式は(7)式のように書くことができます.

$$\boldsymbol{w_{t+1}} \leftarrow \boldsymbol{w}_{t} + \alpha \Bigl[R_{t+1} + \gamma \hat{q}_(s_{t+1}, a_{t+1}:\boldsymbol{w}) - \hat{q}(s_t, a_t; \boldsymbol{w}_{t})\Bigr] \boldsymbol{\phi} \qquad \cdots (7)$$

このように、仮定した近似関数の微分を計算しなくてもよいという簡便さが線形近似の大きなメリットになります.

本当は迷路まで一気にまとめてしまいたかったのですが、一旦区切ります.

まとめ

迷路問題に対する線形関数近似の実装に向けて、線形近似部分の説明のみを行いました.
実はなんか計算がうまくいっていないのですが、次回は一気に、迷路問題の解説・結果までを記事にしたいと思います.

以下の記事を参考にさせていただきました.式展開の部分はほぼトレースです.

qiita.com