Skip to content

Releases: tttak/tnk-

振り飛車評価関数

06 May 05:08
Compare
Choose a tag to compare

『the end of genesis T.N.K.evolution turbo type D』の『NNUE評価関数』に追加学習して、振り飛車を多く指すようにした評価関数です。

  • 定跡を使わなくても飛車を振ることが多くなりましたが、たまに居飛車を指すこともあるようです。
  • 飛車を振った後の指し回しが振り飛車らしいか、等については分かりません。
  • やねうら王depth10の教師局面の評価値を以下のように操作して学習しました。(ただし、初期局面から60手目以内の場合に限る)
    • 先手の飛車が2八にいる局面は減点(正確には、先手番の場合は減点、後手番の場合は加点。以下同様。)
    • 先手の飛車が5八~8八にいる局面は加点
    • 先手の歩が2七にいる局面は加点
    • 後手の飛車が8二にいる局面は加点
    • 後手の飛車が5二~2二にいる局面は減点
    • 後手の歩が8三にいる局面は減点
  • nn_furibisha1:nn.bin(WCSC28)に0.8億局面を追加学習
  • nn_furibisha2:nn.bin(WCSC28)に1.6億局面を追加学習
  • 【参考】技巧2の振り飛車評価関数
    https://github.com/tttak/Gikou/releases/tag/Gikou2_20171214

NNUE評価関数(nn.bin)

20 May 13:24
Compare
Choose a tag to compare

nn_20180519.zip(nn.bin)

『the end of genesis T.N.K.evolution turbo type D』の『NNUE評価関数』に追加学習した評価関数です。

学習パラメータ

No. batchsize nn_batch_size newbob_decay eval_save_interval eta eta2 eta1_epoch eta3 eta2_epoch lambda mirror_percentage 局面数 その他
1 1000000 1000000 1.0 30000000 0.01 0.1 20 0.05 50 0.33 0 6.6億 中盤(51手目~100手目)の教師局面のみで学習
2 1000000 1000 1.0 30000000 0.01 0.1 20 0.05 50 0.33 0 5.7億 中盤(51手目~100手目)の教師局面のみで学習
3 1000000 1000000 0.5 40000000 0.01 0.1 20 0.05 50 0.50 0 5.6億 中盤(51手目~100手目)の教師局面のみで学習
4 1000000 1000000 0.95 40000000 1.0 - - - - 0.01 0 4.9億 評価値の絶対値が500~1000の教師局面のみで学習
5 1000000 1000000 0.95 40000000 1.0 - - - - 0.01 0 5.6億 -
6 1000000 1000000 0.9 40000000 1.0 - - - - 0.01 50 3.2億 -
  • tnk-wcsc28-2018-05-05のnn.binを元に上表No.1のパラメータで追加学習し、No.1の結果にNo.2で追加学習し、...(中略)...、No.5の結果にNo.6で追加学習した結果がnn_20180519です。
  • 未知の評価関数なのでとりあえず色々試してみたのですが、上表のどれが効果があったのかは未検証です。
  • QhapaqさんのNNUE解説記事の中で上記「リストアの無効化」に触れて頂きましたが、
    推測頂いた内容と少し異なっておりまして、newbob_decayは1.0だけではなく上表の値を使用しました。
    NNUEの学習部では、eval_save_intervalごとにlossがそれまでの最小値を下回らなかった場合に学習率をnewbob_decay倍するとともに、
    lossが最小だったときの評価関数パラメータに戻す(ファイルから読み直す)機能があると思うのですが、前者は生かしたまま後者のみを無効化しました。
    具体的には、learner.cppの「Eval::NN::RestoreParameters(best_nn_directory);」の前後を少し書き換えました。
    ただ、これが効果があるかはよくわかりませんし、上表のnewbob_decayが妥当なのかもよくわかっておりません。
  • 上表No.1、3~6ではnn_batch_sizeを100万(batchsizeと同じ値)にしていたのですが、本来は1000(デフォルト値)でも大きめとのことです。
  • 上表No.4~6ではlambdaを0.01にしましたが、これはほとんど勝敗項しか見ないことを意味します。
    最終的にnn_20180519にはつながっていないので上表に載せていませんが、実際にはNo.4と5ではlambda「0.01、0.5、1.0」の3種類で並行して学習し、意外なことに3種類の中ではlambda0.01が最強でした。
    (ただし、1手0.1秒のような超短時間でしか検証していないので、長時間ではどうなのか不明です。また、これはNNUEがニューラルネットワークだからなのか、実は3駒でも同じなのか、等についても不明です。)
  • 上表No.1~3では中盤(51手目~100手目)の教師局面のみで学習しましたが、実際には序盤のみ(1手目~50手目)、終盤のみ(101手目以降)でも並行して学習してみました。
    序盤・中盤・終盤のそれぞれに適した評価関数ができれば面白いかと思ったのですが、今のところうまくいっていません。

対局結果

対局条件:8スレッド、1手3秒、tanuki-互角局面集、投了値3000、置換表8GB、Ponderなし

  • 「T.N.K.WCSC28 + nn_20180519」 vs 「やねうら王V4.82 + QQR」
    232局、112勝109敗11引き分け(勝率50.6%、レート差+4)
  • 「T.N.K.WCSC28 + nn_20180519」 vs 「T.N.K.WCSC28 + nn.bin(WCSC28)」
    252局、134勝105敗13引き分け(勝率55.8%、レート差+40)

※対局数が少ないので、勝率とレート差はあくまで目安です。

nn_20180603.zip(nn.bin)

『the end of genesis T.N.K.evolution turbo type D』の『NNUE評価関数』に追加学習した評価関数です。

学習パラメータ

No. batchsize nn_batch_size newbob_decay eval_save_interval eta eta2 eta1_epoch eta3 eta2_epoch lambda mirror_percentage 局面数 その他
1 1000000 1000000 0.9 40000000 1.0 - - - - 0.1 50 4.8億 -
  • lambdaが0.1であること以外はnn_20180519のNo.6のパラメータと同じです。

対局結果

対局条件:8スレッド、1手3秒、tanuki-互角局面集、投了値3000、置換表8GB、Ponderなし

  • 「T.N.K.WCSC28 + nn_20180603」 vs 「やねうら王V4.82 + QQR」
    250局、132勝107敗11引き分け(勝率55.0%、レート差+35)
  • 「T.N.K.WCSC28 + nn_20180603」 vs 「T.N.K.WCSC28 + nn_20180519」
    250局、114勝117敗19引き分け(勝率49.4%、レート差-4)

※対局数が少ないので、勝率とレート差はあくまで目安です。
※今回も対局数の問題なのか相性の問題なのか設定ミスなのか、よくわからない結果になっています。(「定跡なし」ではなくtanuki-互角局面集で測定したことも影響しているのかもしれません)
※おそらく上記QQRとの勝率は正確ではなく、nn_20180603よりQQRの方が棋力が高いように思われます。

対局結果2(2018/6/11追記)

対局条件:8スレッド、1手3秒、定跡なし、投了値3000、置換表8GB、Ponderなし

  • 「T.N.K.WCSC28 + nn_20180603」 vs 「やねうら王V4.82 + QQR」
    272局、123勝140敗9引き分け(勝率46.9%、レート差-22)

※今回は「定跡なし」で測定しました。
※やはりnn_20180603よりQQRの方が棋力が高いようです。