機械学習周りのプログラミング中心。 イベント情報
ポケモンバトルAI本電子書籍通販中

第29回世界コンピュータ将棋選手権振り返り【コンピュータ将棋】

私が開発しているコンピュータ将棋AIの「ねね将棋」は2019年5月3日開催の第29回世界コンピュータ将棋選手権に参加しました。

ソースコード・バイナリをこちらで公開しました。

github.com

大会直前と本番をちょっとだけ振り返ります。

数週間前の準備

AWS(クラウド)を使用して対局するため、2週間前ごろにサーバ上の環境をセットアップしました。 ローカルには1GPU環境しかないのですが、実装上はAWSの8GPU環境でもちゃんと動作するように実装したつもりでした。 しかしながら動かしてみると原因不明のクラッシュが生じることがわかりました。 応急処置として、マルチスレッドで1スレッド=1GPUへ対応していたところ、GPUごとにプロセスを立ててソケット通信で結合することにしました。 なお、GPU評価の結果を処理している間に同じGPUで次の評価を開始するよう、1GPUに対して2つのプロセスを立てることでスループットが上がります。 TCP/IPで通信しているので、やろうと思えば複数のマシンで分散計算させることも容易です。

1次予選当日準備

f:id:select766:20190505182601j:plain
設営風景

これで動作確認できていたのですが、当日朝に会場で動作確認をしていると、1GPUあたり2プロセスを立てて動かすとなぜか起動しなかったり、探索終了予定時間になってから指し手を出力するまでに5秒以上かかるという不具合が急に生じました。これでは動作不良で負けになる恐れがあるので、1GPUあたり1プロセスに下げることにしました。 もともと最大3万nps程度出ていたところ、この変更で2万台に落ちてしまいましたが仕方ありません。 ともかくこれでテスト対局を乗り切りました。

ソフトのトラブルだけでなく、インターネット回線の不良やAWS側でGPUインスタンスが不足する事態もあり得ます。 非常時対応としては、ローカルの端末でCPUで方策関数だけで指し手を決定するものを用意していました。

対局

過去の大会では初戦に勝ったことはなかったのですが、今回は最初の3戦に連勝し、幸先良いスタートとなりました。

勝率が近い相手同士で対局が組まれるので、ここからは厳しくなってきました。

Daigorilla戦で負けたのち、ついにDeep Learning勢のdlshogiと対局になりました。

dlshogiの山岡さんは1年中強化学習の計算をしていたとのことで、評価関数が優れていたようです。公式戦初対局はねね将棋の負けとなりました。

7回戦は同じくDeep Learning勢、フランスから参戦したCrazy Shogi戦となりました。

棋譜って英語でなんて言うのか?」など困惑しながらつたない英語で開発の状況、使っているマシンなどを教えてもらいました。

Crazy Shogiは強化学習を3週間行ったそうです。前回大会にも出場されていて1年間時間はあったが、囲碁、連珠などいろいろなゲームに挑戦しているので将棋に割けた時間がその量だったということらしいです。

90手目ぐらいまで拮抗し、最後にCrazy Shogi側に悪手が出たようでねね将棋の勝利となりました。

7戦目までで5勝2敗、もし最終戦で勝てば2次予選に進めるという状況でした。しかし最終戦の相手はやねうら王。レートに1000以上の開きがあり、とても勝てそうにありません。

千日手を願いました。途中でやねうら王が一瞬千日手を読んでいたのですが、打開されてしまいました。60手目ぐらいでねね将棋に悪手が出て、負けてしまいました。それでも129手まで粘ることができました。

負けてはしまいましたが、大型新人との対局、楽しかったです。

終結果は5勝3敗。順位は10位。ソルコフ(対戦相手の勝ち数の合計)でほかの5勝3敗ソフトに敗れ、2次予選には進めませんでした。

来年に向けて

去年に引き続き、ぎりぎり2次予選に進めませんでした。悔しいです。改良できるところがたくさんあるので、今後も開発をしたいと思います。多忙になるので開発再開は秋になりそうです。

去年と比べ、開発用のシステムとしては自己対局での強さ評価、学習率の自動調整などの機構を作ったものの、直接的に強さに関与する部分はあまり作れませんでした。評価関数モデルをより大きなものにした、末端ノードでの詰み探索を加えたというぐらいです。

評価関数が、今使っている教師あり学習ではそろそろ限界と思われます。読み抜けて悪手を指し、それをとがめられると一気に評価値が下がるという対局が本番にもありました。valueはある程度正しくて、policyが間違っているものと思われます。選択的探索を行う以上、間違ったpolicyでは計算リソースによらず一定以上の強さを望めません。この穴を埋めるには強化学習をすべきでしょう。

まずは強化学習の基盤を整えたいと思います。しかし、計算リソースを考えると評価関数での勝負に持ち込むのは厳しいものがあるので、探索部にも手を加えていきたいと思います。

このたびは対局してくださった方、また運営の方々に感謝申し上げます。次回があればどうぞよろしくお願いいたします。