ランダムパラメータからの強化学習

 TensorRTなどの高速化も導入したので、ランダムパラメータからの強化学習をやり直した。

実験設定

 いつも通り、細かい差異はあれど基本的にはAlphaZeroと同様の設定。

使用パソコン

  • CPU:Intel Core i9-9900K @ 3.6GHz(8core 16thread)
  • メモリ:32GB
  • GPU:RTX 2080ti x2

 以前はドスパラでほぼ同性能のものが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年の棋譜について指し手と最終的な勝敗を予測することで損失を計算した。

f:id:tokumini:20210318101758p:plainf:id:tokumini:20210318101804p:plain
左:Policy損失 右:Value損失

 途中やや乱れるところもあったが全体的に右肩下がりで、まだ収束しきっているかとは言い難い。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回などにすればもう少しは性能が伸びそうな気がするので、計算資源があればそういうところを試してみたい。