20ブロックでの学習

 前回は10ブロック・256chの、今まで基本的に用いてきた大きさのネットワークで軽く学習を回した。

 正月休みの時間があったため、今回は大きめのResNetで使用データ数も多くして学習を回した。

前回との学習の差分

項目 前回 今回 備考
ネットワークの大きさ 10ブロック 20ブロック チャンネル数は変化なし
バッチサイズ 512 256 ネットワーク増大によりGPUメモリが足りなくなるためバッチサイズを半分に変更
基本学習率 0.025 0.01 バッチサイズを半分にしたので、合わせて学習率も小さめに変更
学習ステップ数 16万 160万 バッチサイズ半分で学習ステップ数10倍なので、使用データ数としては5倍

結果

検証損失

 学習ステップ数が揃っていないので並べても見にくいが、とりあえず検証損失のグラフは以下のようであった。

f:id:tokumini:20220104145653p:plainf:id:tokumini:20220104145656p:plain
左: Policy損失 右: Value損失

 最終ステップ時点での検証損失

項目 前回(10ブロック) 今回(20ブロック)
Policy損失 1.785 1.760
Value損失 0.451 0.462

 Policy損失は良くなったが、Value損失は悪化している。

学習損失

 モデルを大きくしてデータ量も大きくしているのに精度が落ちているのは妙に思える。学習損失の方も表示すると

f:id:tokumini:20220104150623p:plainf:id:tokumini:20220104150626p:plain
左: Policy損失 右: Value損失

となっていた。Policy損失もValue損失も前回より小さくなっている。ネットワークが深くなりすぎて上手く学習ができていないということではなさそうだ。どちらかと言えば過学習気味の傾向には見えるが、実際のところどうなのかはよくわからない。

探索速度

 最終ステップでのパラメータをTensorRTエンジンに変換して初期局面について10秒でNPSを測定した。

(環境:自宅の2080tiデスクトップ、PyTorch1.10.1、 CUDA10.2、 TensorRT7.2.2.3、INT8推論)

モデル名 前回(10ブロック) 今回(20ブロック)
NPS 30,632 17,118

 だいたい半減で想定通りの速度になった。

所感

 やみくもにネットワークと学習量を増やしても上手くいかないことがわかった。ResNet(CNN)だとScaling Lawが成り立たないということでもあるのだろうか? まだそんなレベルの大きさではないように思うが……。

 なにが起きているのかよくわからないが、対局部分のバグ修正などもしつつ様子を見ていきたい。