TensorRTなどの高速化も導入したので、ランダムパラメータからの強化学習をやり直した。
実験設定
いつも通り、細かい差異はあれど基本的にはAlphaZeroと同様の設定。
使用パソコン
以前はドスパラでほぼ同性能のものが60万円で売られていたが、今はなくなっている。
モデルサイズや学習時間など
256ch 10ブロックのものを使用した。高速化を入れてデータ生成速度は179.6 局面 / 秒となった(左右反転のデータ拡張を含む)。
1ステップあたりに学習するバッチサイズ(512)の半分程度のデータを生成できるように、学習スレッドについて1ステップごとに1.4秒程度のスリープを挟むようにした。
合計の学習時間は440時間48分(≒18.4日)となった。生成された棋譜の数は1,566,905であった。
自分以外にどこまで伝わるかはわからないが、実際に学習で使った設定ファイルを(使ったところだけ抜粋して)折りたたんで置いておく。(これを書いていて気づいたが、int8の設定を有効にしていなかったようだ……。もう少し高速化できたか)
折りたたみ
learn_rate 0.025 momentum 0.9 weight_decay 0.0 policy_loss_coeff 1.0 value_loss_coeff 1.0 lambda 0.75 per_alpha 2.0 Q_dist_temperature 0.01 Q_dist_lambda 1.0 noise_epsilon 0.25 noise_alpha 0.15 C_PUCT 2.5 use_fp16 1 draw_turn 320 random_turn 320 batch_size 512 thread_num_per_gpu 2 max_step_num 1000000 learn_rate_decay_mode 1 learn_rate_decay_step1 800000 update_interval 1000 batch_size_per_gen 2 worker_num_per_thread 64 max_stack_size 1048576 first_wait 1048576 data_augmentation 1 search_limit 800 search_batch_size 4 save_interval 50000 validation_interval 50000 sleep_msec -1 noise_mode 0 use_sam_optim 0 calibration_kifu_path /root/data/floodgate_kifu/valid valid_rate_threshold 3000 valid_kifu_path /root/data/floodgate_kifu/valid
実験結果
損失
floodgate2015年の棋譜について指し手と最終的な勝敗を予測することで損失を計算した。
途中やや乱れるところもあったが全体的に右肩下がりで、まだ収束しきっているかとは言い難い。800Kステップ時点(学習率を1/10にしたタイミング)でValue損失の方は大きく下がったが、Policy損失の方はあまり変わらなかった。
最終ステップでの損失値をAobaZeroの棋譜を用いた教師あり学習と比較すると次のようになる。
学習方法 | Policy損失 | Value損失 |
---|---|---|
強化学習(1Mステップ) | 1.825 | 0.621 |
教師あり学習(3Mステップ) | 1.917 | 0.561 |
対局結果
最終ステップのパラメータについてのみYaneuraOu(評価関数パラメータはKristallweizen)との対局を行った。Miacis側1手0.5秒、YaneuraOu側はNodesLimit=800000。
学習方法 | 勝数 | 引分数 | 負数 | 勝率 | 相対Eloレート |
---|---|---|---|---|---|
強化学習(1Mステップ) | 493 | 7 | 500 | 49.6% | -2.4 |
教師あり学習(3Mステップ) | 479 | 208 | 313 | 58.3% | +58.2 |
教師あり学習モデルより悪い性能となった。128chなどのモデルでは教師あり学習と強化学習でだいたい同じ程度の性能になっていたが、ニューラルネットワークを大きくした影響か、差が出るようになった。強化学習中に生成しているデータの質や量が十分でないため、モデルの表現力ではなくデータによる上限が先に来てしまっているのではないかと考えられる。
余計な工夫を考えるよりも、単純にデータの生成量を増やし(学習スレッドのスリープ時間を伸ばし)、かつ探索上限を1600回などにすればもう少しは性能が伸びそうな気がするので、計算資源があればそういうところを試してみたい。