AobaZeroの棋譜を用いた教師あり学習

 前回、AobaZeroの棋譜を取得できるようになった。floodgateの棋譜についてもダウンロードスクリプトを整備し、実験手順を再現しやすいように仕組みをやや変えたので教師あり学習をやり直すことにした。

棋譜について

floodgateの棋譜(いつも通りの設定)

 2016年~2019年の棋譜を学習用、2015年の棋譜を検証用として利用する。学習結果は古いものを使ったので厳密にはやや異なっている部分もあるが、学習に使う棋譜はおおむね以下の条件を満たすものとなる。

  • %TORYO,%SENNICHITE,%KACHIのいずれかで終わっている
  • 手数が60手以上である
  • 対局者のレートの高い方が2800以上である(レートが不明な対局者はレート0として扱う)

 学習データ数は約31,000,000局面, 検証データ数は約2,000,000局面である。重複局面の削除等はしていない。

 ダウンロードスクリプト

AobaZeroの棋譜

 AobaZeroの棋譜もfloodgateの棋譜と同様に以下の条件でフィルタをかけた。

  • %TORYO,%SENNICHITE,%KACHIのいずれかで終わっている
  • 手数が60手以上である

 AobaZeroの棋譜にレートについての制約はかけていない。

 AobaZeroの棋譜はこの一つでおおよそ3,000,00弱程度の局面があり、今回は13300000から14300000までの101個をダウンロードしたので約300,000,000局面ほどになる。(これはfloodgate側の約10倍の量であり、今回の学習設定では1エポックも回りきらない)

 ダウンロードスクリプト

実験設定

  • OptimizerはMomentum(0.9)付きSGD
  • バッチサイズ : 512
  • 初期学習率 : 0.025
    • 200,000、300,000ステップ時点で学習率を1/10
  • 学習ステップ数 : 400,000
  • 検証損失の計算はどちらもfloodgate2015年のデータに対して実行
  • 左右反転によるデータ拡張を実行
  • 使用したモデルはCategoricalモデル

 実験設定はできるだけ揃えたつもりだったが、AobaZeroの方でのみL2正則化があり(係数1e-4)になっていた。

実験結果

floodgateの棋譜からの学習

f:id:tokumini:20200915090809p:plainf:id:tokumini:20200915090813p:plain
左:Policy損失 右:Value損失

  • Policyについて、学習損失と検証損失の乖離が小さい
  • Valueについて、検証損失は200,000ステップ以降上がっていってしまう
    • 60,548ステップで1エポックであり、3エポック目あたりから過学習

AobaZeroの棋譜からの学習

f:id:tokumini:20200915091123p:plainf:id:tokumini:20200915091126p:plain
左:Policy損失 右:Value損失

  • Policyについて、学習損失と検証損失の乖離が大きい
  • Valueについて、検証損失も下がり続ける
    • 200,000ステップまではやや振動している感じがある?
    • 学習率の設定はfloodgateと同じだが、大きすぎる?
  • Valueの学習損失の挙動が奇妙?

検証損失を比較

f:id:tokumini:20200915091517p:plainf:id:tokumini:20200915091520p:plain
左:Policy損失 右:Value損失

  • Policy損失は明らかにfloodgateの方が小さい
  • Value損失は最終的にAobaZeroの方が小さくなる

対局による比較

 Kristallweizenの4スレッド、NodesLimit200,000と対局を行った。Miacis側は1手0.25秒である。 使用したスクリプト、使用したコマンドは以下

~/Miacis/scripts/vsYaneuraOu.py --time1=250 --time2=250 --NodesLimit=200000 --game_num=250

f:id:tokumini:20200916103925p:plain

 AobaZeroが200,000ステップ以降で大きく伸びた。両者、最も良かった点を比較するとAobaZeroが380,000ステップ時点のR+13.9、floodgateが280,000ステップ時点のR-243.0なので256.9ほどの差が出たことになった。

 追加のデータとして、Miacisの強化学習で1,000,000ステップ回したものをこの条件で対局させるとR+232.3となった。AobaZeroの学習よりもさらにR+220ほど強い。

所感

 学習設定が揃っていないことに記事を書いている途中で気づいたのでどうしようか悩んだが、とりあえずこの状態で一度公開する。AobaZeroの棋譜からの学習はもっとチューニングできそうなので、整えきってからまた公平な比較ができれば。

 今後は

  • 学習率を下げる
  • AobaZeroの利用する棋譜をもっと増やす
  • Scalarモデルでの学習
  • Swish, Mishなどの活性化関数

あたりを試してみたい。

付録

 L2正則化(Weight Decay : 以下WD)の有無による差は、古いデータだったり学習率減衰の設定が異なっていたり対局結果はなかったりするが一応損失推移のデータはあったので載せておく。

floodgate

f:id:tokumini:20200916110356p:plainf:id:tokumini:20200916110400p:plain
左:Policy損失 右:Value損失

 明らかにWDありの方がValue損失が小さくなっている。こちらで検証対局をするべきだった。4ヶ月以上前に行った実験なので、現在の設定でやり直して対局までやってみたい。

AobaZero

f:id:tokumini:20200916110609p:plainf:id:tokumini:20200916110613p:plain
左:Policy損失 右:Value損失

 これは最近取ったデータであり、これでWDありの方がやや良かったのでAobaZeroの検証対局はWDありの方でやってしまった。損失から見るとWDなしでもそこまで大きな差があるわけではないように感じられるが……。

 気になる点としては、WDなしの場合でもValueの学習損失が学習率を下げた200,000ステップ以降で上昇傾向にあることであり、これがどういう理由で起こっていることなのかよくわからない。

WDあり同士での比較

f:id:tokumini:20200916112029p:plainf:id:tokumini:20200916112033p:plain
左:Policy損失 右:Value損失

 これで見るとほとんど差はないかもしれない。しかしこうして見てもAobaZeroの棋譜を用いたときのValue学習損失の挙動が気になる。

 自分が想像していた以上にL2正則化が強力なのではないかと感じてきた。強化学習へ導入したときは学習序盤であまり効果がないと打ち切ってしまっておりL2正則化に対する信頼感がなかったのだが、学習率を下げた後半で強く効いてくるとしたら話は変わってくる。強化学習の方でも追加でやってみるべきかもしれない。