要約
教師あり学習(300万ステップ)の後に強化学習(10万ステップ)を行うことでR+50.5、さらにもう一度強化学習(10万ステップ)を行うことでR+61.9。floodgateでレート3800ほどになった。
学習の全体
ランダムパラメータから始めて、以下の3つをこの順に行った。
各学習の設定
共通の設定
- ミニバッチサイズは512
- 検証データはfloodgate2015年の棋譜
教師あり学習
- AobaZeroの棋譜11,500,000 ~ 14,300,00を使用(ちょっと古めで宣言勝ちは多めの時期だと思われる)
- 学習率0.025開始
- 6万ステップごとに学習率1/10
- Weight Decay 1e-4
- 使用GPUは2080ti x1
強化学習1
- 探索回数は1600回
- Weight Decayを入れ忘れた
- 学習率減衰は8万ステップ時点で1/10
- 学習スレッドのスリープ時間は、生成速度から自動調整して2.744秒(1ステップの間にミニバッチサイズの半分程度を生成)
- 使用GPUは2080ti x2
以下実際の設定ファイルを置いておく(自分があとで見る用)
折りたたみ
learn_rate 0.00025 min_learn_rate 0.000025 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 0 draw_turn 320 random_turn 320 batch_size 512 thread_num_per_gpu 2 max_step_num 100000 learn_rate_decay_mode 1 learn_rate_decay_step1 80000 learn_rate_decay_step2 200000 learn_rate_decay_step3 200000 learn_rate_decay_step4 200000 learn_rate_decay_period 10000 update_interval 1000 batch_size_per_gen 2 worker_num_per_thread 64 max_stack_size 1048576 first_wait 1048576 data_augmentation 1 Q_search 0 search_limit 1600 search_batch_size 4 output_interval 1 save_interval 2500 validation_interval 2500 sleep_msec -1 noise_mode 0 wait_sec_per_load 90 use_sam_optim 0 calibration_kifu_path /root/data/floodgate_kifu/valid # Shogi init_buffer_by_kifu 0 train_rate_threshold 2800 valid_rate_threshold 3000 train_kifu_path /root/data/floodgate_kifu/train valid_kifu_path /root/data/floodgate_kifu/valid # Othello # init_buffer_by_kifu 0 # train_rate_threshold 2200 # valid_rate_threshold 2290 # train_kifu_path /root/othello_train_kifu # valid_kifu_path /root/othello_valid_kifu
強化学習その2
- 探索回数は1600回
- Weight DecayはOFFのまま
- 学習率減衰はrestartなしの1周期Cosine Annealing
- 学習スレッドのスリープ時間は、強化学習その1より長くしたかったので決め打ちで5秒
- リプレイバッファサイズを通常の2倍(221局面)にした
- 使用GPUは2080ti x2
折りたたみ
learn_rate 0.00025 min_learn_rate 0.0 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 0 draw_turn 320 random_turn 320 batch_size 512 thread_num_per_gpu 2 max_step_num 100000 learn_rate_decay_mode 2 learn_rate_decay_step1 80000 learn_rate_decay_step2 200000 learn_rate_decay_step3 200000 learn_rate_decay_step4 200000 learn_rate_decay_period 100000 update_interval 1000 batch_size_per_gen 2 worker_num_per_thread 64 max_stack_size 2097152 first_wait 2097152 data_augmentation 1 Q_search 0 search_limit 1600 search_batch_size 4 output_interval 1 save_interval 5000 validation_interval 5000 sleep_msec 5000 noise_mode 0 wait_sec_per_load 90 use_sam_optim 0 calibration_kifu_path /root/data/floodgate_kifu/valid # Shogi init_buffer_by_kifu 0 train_rate_threshold 2800 valid_rate_threshold 3000 train_kifu_path /root/data/floodgate_kifu/train valid_kifu_path /root/data/floodgate_kifu/valid # Othello # init_buffer_by_kifu 0 # train_rate_threshold 2200 # valid_rate_threshold 2290 # train_kifu_path /root/othello_train_kifu # valid_kifu_path /root/othello_valid_kifu
損失推移
教師あり学習
特に言うこともなく、今まで何度も目にしてきたようなグラフが得られた。
強化学習その1
特徴的なグラフになった。学習序盤の動きが激しい理由としては、
- 教師あり学習で得たValueは-1, 0, 1の3領域のみを使うものだが、強化学習のTD(λ)によってそれら以外の領域も使うようになり、その修正で大きく変わっていくため
- 設定ミスでWeight Decayを入れ忘れたため
の2通りが考えられるか。その他ちょこちょこ回してみた結果だと(2)の説が強めかもしれない。
強化学習その2
- 損失の急激な上昇や低下は見られなかった
- Policyの検証損失はやや増加傾向
- Valueの検証損失はやや減少傾向
具体的な数値
学習方法 | Policy損失 | Value損失 |
---|---|---|
教師あり学習終了時 | 1.917 | 0.561 |
強化学習その1終了時 | 1.791 | 0.605 |
強化学習その2終了時 | 1.774 | 0.597 |
学習時間
学習方法 | hh:mm:ss |
---|---|
教師あり学習終了時 | 175:55:07(≒7.3日) |
強化学習その1終了時 | 091:39:56(≒3.8日) |
強化学習その2終了時 | 153:22:36(≒6.3日) |
合計 | 420:57:39(≒17.5日) |
強化学習は2080tiを2枚搭載したマシンで行ったものであり、強化学習の学習時間はほぼGPUの枚数に比例するので、1枚のマシンで行うと約2倍、つまりその1とその2合計で20日程度になるかと思われる。教師あり学習と合わせて28日、約一ヶ月でおそらく再現できると思う。
対局
YaneuraOu(評価関数パラメータはKristallweizen)との対局を行った。Miacis側1手0.5秒、YaneuraOu側はNodesLimit=800000。
学習方法 | 勝数 | 引分数 | 負数 | 勝率 | 相対Eloレート |
---|---|---|---|---|---|
教師あり学習終了時 | 479 | 208 | 313 | 58.3% | +58.2 |
強化学習その1終了時 | 642 | 19 | 339 | 65.1% | +108.7 |
強化学習その2終了時 | 720 | 15 | 265 | 72.8% | +170.6 |
という結果になった。損失があまり改善されていないことからすると意外に強くなっている。
強化学習その2後のパラメータでfloodgateに数日放流した結果、レート3840となった。
ただし、対戦相手を見るとKristallweizenが多く、単にKristallweizenに対して相性が良いというだけの可能性も捨てきれない。