CNNの複雑さとnpsと棋力【コンピュータ将棋】

CNN (Deep Learning)ベースの評価関数を使った将棋AIをチューニングするにあたり、難しい点の1つが評価関数の複雑さ(計算量)の調整です。

層やチャンネルの数を増やせば静的評価の精度は上がるものの、計算時間が増加するため探索に組み込んだ時の評価局面数(nps=node per second)が下がってしまうトレードオフにあります。

そこで、いくつかのモデルを学習させ、同じ探索ノード数又は探索時間における強さの比較を行うことにしました。

モデル構造は、3x3 convolutionを2つ重ねたResidualブロックを基本ブロックとして、19ブロックまたは39ブロック重ねたものです。ブロック数*2がconvolution層の数ということです。チャンネル数は128,192,256としました。AlphaZeroと類似の方式で、盤面を入力として評価値と各指し手の確率を出力します。探索はMCTSで行います。

モデルの学習はやねうら王のサイトで配布されていたshuffle_sfen1.7zを用いて教師あり学習としました。

強さの評価は、探索込みで詰むまで対戦させた勝敗で行います。対戦開始局面は互角局面集2017-05-19を使い、100局で統計を取りました。

まずはノード数を固定し、モデルを変更した場合の結果です。

チャンネル数 ブロック数 ノード数 基準に対する勝率[%]
128 19 4096 (基準)
128 39 4096 74
192 19 4096 75
192 39 4096 80
256 39 4096 91

モデルが複雑になるほど勝率が上がる傾向が見て取れます。

次に、モデルの計算量に反比例してノード数を減少させた場合の結果を示します。一定の制限時間で指す場合の強さに相当するものです。 計算量ですが、理論値で扱います。チャンネル数がN倍になればN2の計算時間、ブロック数がN倍になればN倍の計算時間がかかると考えます。 チャンネル数1.5倍の場合は2倍の計算時間とみなしました。

チャンネル数 ブロック数 ノード数 基準に対する勝率[%]
128 19 4096 (基準)
128 39 2048 49
192 19 2048 53
192 39 1024 24
256 39 512 12

基準とした128チャンネル、19ブロックのモデルに対し、計算量2倍のモデルは強さがほとんど変わらないことがわかりました。「仕事の原理」みたいで面白いですね。 一方で2倍より複雑なモデルでは明らかに弱くなってしまっています。モデルの予測性能が頭打ちになり、探索量の不足による影響のほうが大きくなっているものと思われます。

ここまでの結論としては、モデルを複雑にした場合、計算量を無視すれば棋力が上がるが、計算量を考慮するとあまり大きくするのは得策でない、ということが言えます。

ただし、実際のGPUで計算する場合、小さなモデルは計算コアが余ったり制御部分のレイテンシが相対的に大きくなったりして、理論値ほど大きなモデルは不利ではないという実情があります。 本番マシンは高価なため強さの測定までやることは現実的ではありませんが、純粋なnpsを測定しながらパラメータ調整を進めたいと思います。

2019-03-09 20:19 読者の指摘によりチャンネル数とブロック数が逆になっていた誤植を訂正。