ここ2ヶ月の進捗

 論文を書いているのもあってある程度情報を隠しながらやっていかないといけないかなと思っていた部分もあったのだけど、やはり性に合わない感じがしてきたので書きたいように書こうという方針で。正直なところ論文も公開しながら書きたいくらい……。

 まずは前回からの変更点を(オセロへの対応を追加した以外のものについて)振り返ってみる。

対戦相手の変更

 今まで基本的に技巧2をレート測定の対戦相手に使っていたが、不具合が出てきたので替えることにした。不具合というのは技巧2が探索中にセグメンテーション違反で落ちることで、今までは上手くいっていたのだが新規に技巧2リポジトリからクローンしてコンパイルすると失敗してしまう(Ubuntu18.04/g++7.4.0)。いくらかコミットを戻ってコンパイルしてみたりもしたが上手くいかなかった。今まで正常に動いていたバイナリは今も動くのだが、どうやってコンパイルしたものか覚えておらず、再現性が確保できない。

 仕方ないので対戦相手をやねうら王/Kristallweizenに変更した。今度はちゃんと手順を忘れないようにダウンロードスクリプトを書いた。本当はgit submoduleで管理した方が良いのかもしれないが、ちょっと使い方がよくわからなかったので妥協中。あとはGPLソフトをsubmoduleとして取り込むとMiacis自体もライセンスをGPLにしなければならないかもしれないと思ったのもある。レート測定で用いるのはセーフな気がしているが、ちゃんと規約を確認しているわけではない。

 Ubuntuで利用可能な最強ソフトがなんなのかわかっていないが、論文で引用する可能性があることも考えるとWCSC優勝・準優勝などの箔が付いているソフトを使っている方が良いかなと思ったのでやねうら王/Kristallweizenにしている。探索エンジン側のdolphineなるものはUbuntuで使えるのだろうか……? そのあたりの事情に疎い将棋ソフト開発者である。

ネットワークの巨大化

 とりあえず手っ取り早く強くする手法としてネットワークを巨大化した。残差ブロック中におけるチャンネル数を64→128に変更して、それに伴って棋譜生成および対局時の推論計算を半精度浮動小数点演算で行うことにした。

 以前fp16を検証したとき

は学習もfp16でやろうとしていたので上手くいかず諦めていたが、対局時のみfp16にすれば性能低下はなかった。これにより生成速度は1.7倍ほど(正確な数字は取っていないがだいたいこれくらい)になったのでこれも多少性能向上に繋がったと思われる。

対局結果

 というわけで128chで学習したものをやねうら王/Kristallweizenと対局させた。やねうら王/Kristallweizenは強いので1Threadかつ一手0.1秒にして、それに対してMiacisは一手0.5秒でようやく互角くらいになる。2Mステップまで学習させていった結果が次のような感じ(縦軸はやねうら王/Kristallweizenに対する相対Eloレート)。

f:id:tokumini:20200215115452p:plain

 今までの64chだとまさに丁度互角くらいだったので、128chにしてレートが+80くらいは伸びたと思われる。学習率の制御とかをちゃんとすればもう少し伸びそうな気はしているが、だいたいこれの学習に2080ti×2枚のマシンで2週間かかるのでそうそうたくさん試せるわけではない。

 このくらいの秒数だと技巧2の方が強いらしい? みたいな話もある

ので、できれば技巧2も使えるようにしたいのだが、セグメンテーション違反になる原因を探ってみた感じだと合法手生成でコケている感じでよくわからなかった。Ubuntu18.04/g++7.4.0で上手くできる方法を知っている方がいれば教えていただければ……。