「十六式いろは」のあれこれ

コンピュータ将棋ソフトのエンジン「十六式いろは」の開発者のブログです。

python-dlshogi2の学習と感想2

python-dlshogi2の学習と感想2(検証)

検証内容

書籍「強い将棋ソフトの創りかた」の第5章の学習方法について
学習データの順番等によって将棋ソフトの棋力が変わるのかどうか調べました。

  • 「1エポックずつ2周」か「2エポックを1周ずつ」か
  • floodgateの棋譜で「古い順」か「新しい順」か
  • バッチサイズが「小さい方」か「大きい方」か
  • floodgateのレーティング「2500以上」か「3500以上」か

「1エポックずつ2周」か「2エポックを1周ずつ」か

2017年の学習データ(train17.hcpe。レート2500以上5000未満)と
2018年の学習データ(train18.hcpe。レート2500以上5000未満)を
使いました。

A)以下の順で学習させたもの。「1エポックずつ2周」-画像のpsd2_CPU_015
 1エポック目: 2017年の学習データ
 2エポック目: 2018年の学習データ
 3エポック目: 2017年の学習データ
 4エポック目: 2018年の学習データ

B)以下の順で学習させたもの。「2エポックを1周ずつ」-画像のpsd2_CPU_020  1エポック目: 2017年の学習データ
 2エポック目: 2017年の学習データ
 3エポック目: 2018年の学習データ
 4エポック目: 2018年の学習データ

「1エポックずつ2周」か「2エポックを1周ずつ」の結果

f:id:juuryokushiki168:20220109202042p:plain
学習順序比較-連続

A) train loss = 2.0735272, test loss = 2.2114400,
 test accuracy = 0.4960938, 0.7695312
B) train loss = 2.0339660, test loss = 2.1807694,
 test accuracy = 0.4912109, 0.7656250

B)「2エポックを1周ずつ」の方がかなり強いようです。
 (複数の総当たりで勝率72%と38%)
※lossやaccuracyにほぼ差がないですが、
 同じ学習データを連続していく方が棋力が上のようです。

floodgateの棋譜で「古い順」か「新しい順」か

2016年の学習データ(train16.hcpe。レート2500以上5000未満)と
2017年の学習データ(train17.hcpe。レート2500以上5000未満)と
2018年の学習データ(train18.hcpe。レート2500以上5000未満)を
使いました。

A)以下の順で学習させたもの。「古い順」-画像のpsd2_CPU_oldest-first
 1エポック目: 2016年の学習データ
 2エポック目: 2017年の学習データ
 3エポック目: 2018年の学習データ

B)以下の順で学習させたもの。「新しい順」-画像のpsd2_CPU_newest-first
 1エポック目: 2018年の学習データ
 2エポック目: 2017年の学習データ
 3エポック目: 2016年の学習データ

floodgateの棋譜で「古い順」か「新しい順」の結果

f:id:juuryokushiki168:20220109203440p:plain
学習順序比較-新旧

A) train loss = 2.1438667, test loss = 2.2510880,
 test accuracy = 0.4726562, 0.7753906
B) train loss = 2.1700270, test loss = 2.1512618,
 test accuracy = 0.4931641, 0.7529297

A) floodgateの棋譜で「古い順」の方がかなり強いようです。
 (直接対決で勝率90%)
※lossやaccuracyの値は良かったり悪かったりですが、
 古い順の方が棋力が上のようです。

バッチサイズが「小さい方」か「大きい方」か

2018年の学習データ(train18.hcpe。レート2500以上5000未満)を
使い、2エポック回しました。

A)「batchsize=1024」-画像のpsd2_CPU_oldest-first
 1エポック目: 2016年の学習データ
 2エポック目: 2017年の学習データ
 3エポック目: 2018年の学習データ

B)「batchsize=4096」-画像のpsd2_CPU_newest-first
 1エポック目: 2018年の学習データ
 2エポック目: 2017年の学習データ
 3エポック目: 2016年の学習データ

バッチサイズが「小さい方」か「大きい方」かの結果

f:id:juuryokushiki168:20220109210910p:plain
学習順序比較-バッチサイズ

A) train loss = 2.3149826, test loss = 2.4236152,
 test accuracy = 0.4257812, 0.7460938
B) train loss = 2.5055306, test loss = 2.6240864,
 test accuracy = 0.4208984, 0.7187500

A)バッチサイズが「小さい方」が少し強いようです。
 (複数の総当たりで勝率66%と50%)
※バッチサイズが小さい方がlossやaccuracyの値が良いですが、
 棋力差はあまりないように見えます。

floodgateのレーティング「2500以上」か「3500以上」か

2020年の棋譜を使い、以下の学習データを3エポック回しました。

A)「--filter_rating 2500」-画像のpsd2_CPU_005

B)「--filter_rating 3500」-画像のpsd2_CPU_010

floodgateのレーティング「2500以上」か「3500以上」かの結果

f:id:juuryokushiki168:20220109211952p:plain
学習順序比較-最低レーティング

A) train loss = 2.0154571, test loss = 2.1012469,
 test accuracy = 0.4902344, 0.7509766
B) train loss = 2.4657503, test loss = 2.7609842,
 test accuracy = 0.3740234, 0.6884766

A)レーティング「2500以上」の方がかなり強いようです。
 (複数の総当たりで勝率86%と11%)
※ただし、局面の数がレーティング2500以上の方が
 6倍ほど多いので、局面数の違いが原因という可能性もあります。
 レーティング2500以上の方がlossやaccuracyの値が良く、棋力も上です。

結論

  • 同じ学習データを連続して学習させる。
  • floodgateの棋譜古い順で学習させる。
  • 小さいバッチサイズで学習させる。(だが効果はないかも?)
  • レーティング2500以上棋譜で学習させる。