前回は10ブロック・256chの、今まで基本的に用いてきた大きさのネットワークで軽く学習を回した。
正月休みの時間があったため、今回は大きめのResNetで使用データ数も多くして学習を回した。
前回との学習の差分
項目 | 前回 | 今回 | 備考 |
---|---|---|---|
ネットワークの大きさ | 10ブロック | 20ブロック | チャンネル数は変化なし |
バッチサイズ | 512 | 256 | ネットワーク増大によりGPUメモリが足りなくなるためバッチサイズを半分に変更 |
基本学習率 | 0.025 | 0.01 | バッチサイズを半分にしたので、合わせて学習率も小さめに変更 |
学習ステップ数 | 16万 | 160万 | バッチサイズ半分で学習ステップ数10倍なので、使用データ数としては5倍 |
結果
検証損失
学習ステップ数が揃っていないので並べても見にくいが、とりあえず検証損失のグラフは以下のようであった。
最終ステップ時点での検証損失
項目 | 前回(10ブロック) | 今回(20ブロック) |
---|---|---|
Policy損失 | 1.785 | 1.760 |
Value損失 | 0.451 | 0.462 |
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が成り立たないということでもあるのだろうか? まだそんなレベルの大きさではないように思うが……。
なにが起きているのかよくわからないが、対局部分のバグ修正などもしつつ様子を見ていきたい。