強化学習の関数近似器としてニューラルネットワークを組合せるのを試しにやってみてる。
けど、正直、うまくいってない。。。
とりあえず、現状についてちょっと書いてみる。
○×ゲームに対する強化学習
試しているのは、○×ゲームに対する強化学習について、関数近似器としてニューラルネットワークを使う方法。
強化学習としてはSarsa()法を使っている。
Sarsa()法については、以下を参照。
また、関数近似については、以下を参照。
関数近似を使う場合、勾配を求める必要が出てくるのだけど、ニューラルネットワークで勾配を求める方法については、以下を参照。
(ただし、関数近似器として使う場合、誤差関数の勾配ではなく、出力の勾配を求める)
これらを元にしてプログラムを書き、自己対戦して学習を行うことを試している。
どのようにうまくいっていないのか
「うまくいっていない」と言っても、具体的に、どのようにうまくいっていないのか。
例えば、ある程度学習がうまくいっているように見える場合(相手のリーチが生じていたらちゃんと防ぐとか、自分のリーチを相手が防がなかったらちゃんと勝つとか)に、試しに対戦していろいろな手を試してみると、確かにうまくいっているように見えた場合については対応できているんだけど、他の場合には対応できていないということがあったりする。
このとき、単に強化学習が足りていないのか(=経験の不足)、ニューラルネットワーク側の学習がうまくいっていないのか(=表現力が足りていない/過適合を起こしている/収束に至っていないなど)、分からない。
経験が不足しているのなら、さらに経験を増やせばいいのだけど、もしニューラルネットワーク側の学習がうまくいっていないのなら、これ以上経験を増やしても意味がない。
(両方ともだった場合、なおさらに都合が悪い)
つまり、課題として、
- 強化学習の学習度合いを測る方法が難しい(経験が不足しているのかどうかが分からない)
- ニューラルネットワークを強化学習と組合せたときに、ニューラルネットワークが正しく学習できているのか測る方法が難しい(表現力が足りているのか/過適合を起こしているのか/学習回数が足りているのかをチェックするのが難しい)
というのがある。
多数決を使った方法
一つ試したのは、多数決を使う方法。
具体的には、複数のAIを別々に学習させておいて、それぞれの候補手を出した後、多数決をとって最終的な手を決める。
それぞれのAIにおいて、経験が偏っていたり、学習が部分的にしかうまくいっていなかったとしても、正解となる手を経験しているAIは多いだろうから、多数決をとれば、その集合知で正しい手が選べる可能性が高くなるだろう、というのが、根底にある考え。
試してみると、単独のAIで判断を行うよりは、マシな感じはしている。
けれど、正しい手が候補の中に入っているのに、それを選べないということも少なくない感じ。
この場合、それぞれの経験が違うので、一貫した主張を行うことが出来ないというのがあるのだと思う。
なので、単に多数決を取るのではなくて、その具体的な評価値まで見て、判断をしないといけないのかもしれない。
こうなってくると、ブースティングで、各AIの判断の信頼度を調整していくといったことが必要になってくるのかも・・・
先行研究
そもそも、○×ゲームのAIに強化学習とニューラルネットワークを使う方法が研究されていないはずもないので、論文を検索してみたところ、次のような論文が見つかった。
TD Learning of Game Evaluation Functions with Hierarchical Neural Architectures
○×ゲーム(Tic-Tac-Toe)については4.2節で議論されているのだけど、この論文の面白いところとして、単純なニューラルネットワークを関数近似器として使うだけじゃなくて、HME(Hierarchical Mixtures of Exparts)やMeta-Piという、階層構造を持ったニューラルネットワークを関数近似器として使うことも試しているというのがある。
この論文によれば、HMEやMeta-Piというのは、複数のニューラルネットワーク(エキスパート・ネットワーク)を使うアーキテクチャで、どのエキスパート・ネットワークを最終的な出力にどれだけ影響させるのかを、ゲーティング・ネットワーク(これ自体も一種のニューラルネットワーク)でコントロールし、エキスパート・ネットワークとゲーティング・ネットワークを同時に学習していくようになっている。
出力が入力に対して連続的でない場合には、HMEは非常に効率的みたい。(これは3章で議論されている)
また、これは自分の試した多数決を使う方法をより精緻にした方法とも言える。
なお、結論を見てみると、○×ゲームに対してはHMEを使っても、そこまでいい結果は出ないみたい。
(単純なニューラルネットワークと同程度)
なお、単純なニューラルネットワークについても、隠れ層のユニット数は80とか使っているみたいで、意外と難しい感じはある。
(この論文ではバックギャモンの終盤についても議論しているけど、こちらは隠れ層のユニット数は多くても10個・・・)
ということで、実は○×ゲームはニューラルネットワークで特徴を見出すのが難しいゲームなのかもしれない・・・
ゲーム自体は簡単なのに。
それと、この論文では学習の度合いを測るために、自己対戦ではなく、すごく単純なAIを用意して学習を行っている。
なので、最初に述べたような困難に対してどう対処すればいいのかは、この論文では議論されていない。
ぐぬぬ・・・
あと、HMEというアーキテクチャ自体は面白いと思う。
上の論文からも参照されているHMEに関する論文としては、以下のものがあった。
Hierarchical Mixtures of Experts and the EM Algorithm
なお、このHMEというアーキテクチャでは、ニューラルネットワークでの出力を一種の確率と解釈して学習アルゴリズムを作っているようなのだけど、その主張を追いきれてない・・・
うーん。。。
DQNの場合は?
なお、関数近似器として深層学習を使っているDQNの場合は、経験を集めるフェーズと、経験を使って学習を行うフェーズを分けているっぽい。
確かに、そうすれば、経験を使って学習を行うフェーズは、普通の教師あり学習になるので、学習を制御しやすそうには思う。
論文を当たっていないので、本当かどうか分からないけど。
今日はここまで!