いものやま。

雑多な知識の寄せ集め

強化学習とニューラルネットワークを組合せてみた。(その15)

昨日は関数近似にHMEを使ったSarsa( \lambda)法の実装を行った。

今日はそれを使って実際に学習を行ってみる。

HMEの構成

学習を行うにあたって、HMEの構成は、TD Learning of Game Evaluation Functions with Hierarchical Neural Architecturesとほぼ同じ構成にした。
すなわち、以下の通り:

これで、1,000,000回、2,000,000回の学習を行ってみた。

学習結果

○側の結果

1,000,000回学習

初手は中央。

それに対して、2手目によって以下のような結果に分かれた:

  • 上、左、下:○勝ち
  • 左上、右上、左下、右下:引き分け
  • 右:×勝ち

かなりいい感じだけど、2手目右のときだけ相手のリーチを防げずに負けている。

2,000,000回学習

初手は中央。

それに対して、2手目によって以下のような結果に分かれた:

  • 上、左、右、下:○勝ち
  • 左上、右上、左下、右下:引き分け

ちゃんと2手目が辺のときにはダブルリーチをかけて勝っているし、2手目が角のときにも引き分けに出来ている。

×側の結果

1,000,000回学習

初手中央に対する応手は左下。
これに対して、2手目に右上を選んだ場合もそうでない場合も引き分け。

初手角に対する応手は中央。
これに対して対角の角をとったとき、左上-右下の形だと○勝ち、右上-左下の形だと引き分け。

初手中央には対応できているけど、初手角への対応はまだ不十分。

2,000,000回学習

初手中央に対する応手は左下。
これに対して、2手目に右上を選んだ場合もそうでない場合も引き分け。

初手角に対する応手は中央。
これに対して、2手目に対角の角をとったときも引き分け。

どの形でもちゃんと引き分けに持ち込めるようになっている。

まとめと考察

以上のように、関数近似にHMEを使った場合、論文と同じ構成にすると、確かにけっこういい感じに学習できた。

厳密には、他の構成だとどうなるのかも試さないと、評価はしづらいんだけど、ちょっと時間がなくて試せていない・・・
(学習にけっこう時間がかかるので。高速化は課題)

ただ、これは複数インスタンスを協調して学習できた結果というよりも、HME自体の持つ関数の表現力が、うまく○×ゲームにあっていたからという感じはする。
そうなると、どのような構成がそれぞれのゲームに対して有効なのかというのは、課題とも言える。

試せていないけど、自分が今考えているのは、カスケード式の構成。
これは、規模の異なるニューラルネットワークフラクタル状に連ねる構成で、例えば次のようなもの:

[64, [32, [16, [8, 8], [8, 8]], [16, [8, 8], [8, 8]]], [32, [16, [8, 8], [8, 8]], [16, [8, 8], [8, 8]]]]

一つの階層は[a, b, b]の形をしていて、そのbを見たときに、やはり同じように[a, b, b]の形が出てくるようになっている。
(一番下の階層と一番上の階層は除く)
そして、一つ下の階層のaのサイズは、一つ上の階層のaの1/2のサイズになるようにしている。

こうすることで、適切なサイズのニューラルネットワークが使われるようにならないかな、と。

もちろん、構成の規模が大きくなるので、学習にかかる時間も増えるだろうから、この構成を試すくらいなら、いくつかのシンプルな構成を何度も試した方が、結果的に効率がいいかもしれないけど。

今日はここまで!