プロフィールはこちら

GPSARSAにKISSGPを適用するためのメモ

GPSARSAは、ガウス過程(隠れ層数を無限大まで極限に飛ばしたニューラルネットはガウス過程に収束する)をつかった強化学習アルゴリズム。

参考 Reinforcement learning with Gaussian processeshttp://www.billhowell.ca/

論文では、

\(\mathbf{\Sigma}_t=\sigma^2 \mathbf{H}_t \mathbf{H}_t^T\)

として、

\(\mathbf{\alpha}_t=\mathbf{H}_t^T (\mathbf{H}_t \mathbf{K}_t \mathbf{H}_t^T + \mathbf{\Sigma}_t)^{-1}\mathbf{r}_{t-1}\)

\(\mathbf{C}_t=\mathbf{H}_t^T (\mathbf{H}_t \mathbf{K}_t \mathbf{H}_t^T + \mathbf{\Sigma}_t)^{-1}\mathbf{H}_t\)

と表記してる。パット見、KISSGPのようなスケーリング手法を使えないように見えてしまうけども、そんなことはない。

表記

ここでは、論文とは違って

\(\mathbf{C}_t=\mathbf{K}_t+\sigma^2 \mathbf{I}\)

と表記するので、要注意。

論文での\(\mathbf{C}_t\)(本記事のとは別物)にて\(\mathbf{\Sigma}_t\)を展開してやると、

\(\mathbf{H}_t^T (\mathbf{H}_t \mathbf{K}_t \mathbf{H}_t^T +\sigma^2 \mathbf{H}_t \mathbf{H}_t^T)^{-1}\mathbf{H}_t\)

こうなる。ここで分配法則をつかってやると、

\(\mathbf{H}_t^T (\mathbf{H}_t (\mathbf{K}_t + \sigma^2 \mathbf{I}) \mathbf{H}_t^T)^{-1}\mathbf{H}_t\)

こうなる。

さらに一般化逆行列\(A^+\)の概念を用いると、正則行列においては\(A^{-1}=A^+\)だから

\(\mathbf{H}_t^T (\mathbf{H}_t \mathbf{C}_t \mathbf{H}_t^T)^+\mathbf{H}_t\)

さらになんと、

\(rank(\mathbf{H}_t \mathbf{C}_t)=rank(\mathbf{H}_t^T)=t\)

であるので、一般化逆行列を以下のように分解できる。

\(\mathbf{H}_t^T (\mathbf{H}_t^T)^+ (\mathbf{H}_t \mathbf{C}_t)^+\mathbf{H}_t\)

さらにさらに、\(\mathbf{H}_t\)が列フルランクであり、\(\mathbf{C}_t\)は行フルランクであるから、

\((\mathbf{H}_t \mathbf{C}_t)^+\mathbf{H}_t=\mathbf{C}_t^{-1} \mathbf{H}_t^+\)

こうなることを利用して

\(\mathbf{H}_t^T (\mathbf{H}_t^T)^+\mathbf{C}_t^{-1} \mathbf{H}_t^+\mathbf{H}_t\)

転置をまとめて

\((\mathbf{H}_t^+\mathbf{H}_t)^T\mathbf{C}_t^{-1} \mathbf{H}_t^+\mathbf{H}_t\)

論文での\(\mathbf{C}_t\)は、ここまで整理できる。

ちなみに、\(m\times n\)行列\(\mathbf{A}\)で

\(rank(\mathbf{A})=m \Rightarrow \mathbf{A}^+=\mathbf{A}^T(\mathbf{A}\mathbf{A}^T)^{-1}\)

\(rank(\mathbf{A})=n \Rightarrow \mathbf{A}^+=(\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\)

だから、

\(\mathbf{H}_t^+=\mathbf{H}_t^T(\mathbf{H}_t\mathbf{H}_t^T)^{-1}\)

である。これは予め解析的に解けるはず。つまり逆行列の計算時間を消耗する必要はない。

これによって、固有値分解などで対角化\(\mathbf{K}_t=\mathbf{P} \mathbf{\Lambda} \mathbf{P}^{-1}\)がなりたつとき、

\(\mathbf{C}_t^{-1} = \mathbf{P} (\mathbf{\Lambda} + \sigma^2 \mathbf{I})^{-1} \mathbf{P}^{-1}\)

こうなるようなスケーリング手法をつかったあとで、GPSARSAを使えるようになる。これ、論文になってないわりと良い発見(簡単だけども重大)な気がするぞ。間違ってたらマサカリ投げてほしいです。一般化逆行列あたりあんまり強い自信があるわけではない。

表記

\(\mathbf{\mu}=(\mathbf{H}_t^+\mathbf{H}_t \mathbf{C}_*)^T \mathbf{C}_t^{-1} \mathbf{H}_t^+ \mathbf{r}_{t-1}\)

\(\mathbf{\Sigma}=\mathbf{C}_{**}-(\mathbf{H}_t^+\mathbf{H}_t \mathbf{C}_*)^T \mathbf{C}_t^{-1} \mathbf{H}_t^+ \mathbf{H}_t \mathbf{C}_*\)

こう整理するときれいになる。

実装

未テスト(暇ができたらテストやる)の実装を貼っておきます。

参考 gpsarsa-rsgithub.com