読者です 読者をやめる 読者になる 読者になる

ニューラルネットワークと囲碁

計算機 考察

結構前にニューラルネットワークを碁の思考エンジンに使えるのではないかとほんの少しだけ試みてみた。その時は特に成果もなく終わったが、同じように考えている人はいて、科学は進んでいる。 以下の論文は、深層畳み込みニューラルネットワークモンテカルロ木探索を組み合わせて見たという報告である。

BETTER COMPUTER GO PLAYER WITH NEURAL NETWORK AND LONG-TERM PREDICTION

しかし、私なら違うアプローチを取るなと思った。私なら下記のようにすると思う。


TianとZhuのやり方は局面を入力として以降の手を出力として学習させている。次の一手だけだとバイアスがかかるからと3手先までを出力とするのが特徴である。また、入力値としては白石・黒石の配置やコウだけでなく、呼吸点が1の連・2の連・3以上の連の位置、石の置かれている期間や天元からの距離、置き石の数、辺の位置などを入力としている。19x19の画像を合計25枚入力とする。そして、学習させたニューラルネットワークモンテカルロ木探索のプレイアウト関数に使っているようだ。

しかし、ニューラルネットワークは手を出力するのではなくて、評価関数に使うべきだと私は思う。機械に碁をさせるときの難しさはゲーム木の枝の数もそうだが、評価関数を作るのが最大の困難だろう。ニューラルネットワークならこれが実現できると予想している。

出力値は2通りが考えられる。ある局面で自分が優勢か否かの二値を返す。あるいは点が終局時に自陣(中国ルールにおいて)である確率を出力する。どちらも入力値の局面の後にゲームが続いて結局どうなったかというのを教師データとすればよいと思うのだ。

前者で終局時の地の差を出力しないのは、ゴールが大差をつけることではなくて勝つことだからである。モンテカルロ木探索でも、当初はプレイアウト時の地の差の期待値を高めるようにしていたらしいが、それだとアグレッシブになりすぎるらしい。半目差で勝つような手を狙わせるのが有効だと思われるので勝敗のみを出力させたい。

後者を出力値とさせたい意図は、石が盤面にあるとき石の周りに重力場のようなものができるように感じると思うのだけれど、それを数値化したいという動機である。これができたら囲碁というゲームが発展するはずだ。ただ、後者の場合は中押し勝ちの場合のデータを使えないという問題がある。それなりに賢い既存の思考エンジンに終局まで打たせたら良いのだろうか。こちらの場合も評価関数として使うのは、地の期待値を足し合わせて差を見た勝敗だろう。なので、思考エンジンとしては前者の方が直接的なので前者をいきなり学習させる方が強くなるかもしれないし、前者を得る過程でどの道後者が必要となるだろうという仮定を置いて後者を学習されるというやり方も考えられる。

評価関数が作れたら、碁でもアルファベータ法が復権すると思うのです。モンテカルロ木探索は理論的根拠が怪しいからなんとなく好きでないのだ。しかし、アルファベータ法でもどの枝を刈り取るかとかどの枝は深くまで伸ばすかといった問題が今の計算機のパワーではおそらく生じるので結局モンテカルロ木探索のようになってしまうのだろうか?

終局時に自陣である確率を使う場合には確度というのがどの枝を伸ばすかというのには使えるかもしれない。勝敗の二値を出力する場合は[0, 1]の区間内の値を返すことになるので、0.5に近い値を返すような場合は確度が低いのでもっと木を伸ばすというようにする。点が自分の地かどうかの確率を返す場合には、盤全体に対して0.5からの差の2乗平均値を確度とするというようになるのだろう。

枝を刈るのは難しい。もしかしたら、刈ってしまった枝に最善手があるかもしれないからだ。将棋でも最近は枝刈りは流行らないらしい。碁には本当に何の意味もない手というのがあるので、自明なのから地道に削っていくしかないのだろうか。

TianとZhuのやり方は入力値が多すぎるように思う。これでも先行研究よりは減らしているらしい。この辺は色々試して効果がないのは削っていくしかないのかな。

減らすのでなくて加えるなら、私はニューラルネットワークみたいな複雑な手法でなくて確実に停止するような原始的なアルゴリズムで得た死活判定の結果を入れたらいいと思う。アルゴリズミックな計算はコンピュータは得意なので、それは昔ながらの手法でやらせて、勘を要するようなことだけニューラルネットワークにやらせるような設計に私ならする。また、序盤・中盤・終盤だと明らかに使っている脳が違うので、同じニューラルネットワークを使わせるなんてことはしないかな。つまり、手数も変数に加えるということになる。特に序盤はどちらの石を持つかで戦略が変わるのでそれも変数に入るのか?ってやっていくと変数が無限に増えていっていまいちだな。


もちろん、本当に良いは知らない。試したい。しかし、賢い人が意見を交換し合いながら全力で潤沢な予算の下にやっているものに個人で参戦しようにも土俵にすら立てない。ちくしょう完全体になりさえすれば。誰か私を雇い入れてこれをやらせてくれないだろうか。実績ないから難しいかな。金にもならんし。何かをするには実績が必要だが、実績を作るにはその何かをしなければならないという問題は解決できないものだろうか。それが実現できたら人類は最大多数の最大幸福を手に入れられる気がするのだ。


追記 2016-03-10

GoogleがNatureに論文出す前にこの記事書いていて良かった……同じようなことしてるぜ……