burokoron / Yolts

You not only look Tsume-Shogi.
GNU General Public License v3.0
3 stars 0 forks source link

爆裂駒拾太郎の強化学習(K/9K/9PT/2型第0世代評価関数) #26

Closed burokoron closed 1 year ago

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。まずは爆裂駒拾太郎V1.0.2を入玉のみでしか勝てないように制限する。

方法

爆裂駒拾太郎V1.0.2の探索部において、相手を詰ました場合は自分の負けとなるようにする。さらに、一定以上優勢の局面からは爆裂駒拾太郎V1.0.2の評価関数ではなく爆裂訓練太郎V1.0.0と同等の評価関数に変更して指すようにする。また、下図の局面において、爆裂駒拾太郎V1.0.2の評価関数では評価値13544であるのに対し、爆裂訓練太郎V1.0.0と同等の評価関数では評価値5676となっている。したがって、爆裂訓練太郎V1.0.0の評価関数を用いる場合は評価値を13544/5676倍する。

ShogiGUI 2022_12_31 2_26_20

さらに、評価関数を変更する評価値の閾値を決定するために、閾値を変更して爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深度4で1000局対局を行い勝率を測定した。

結果

評価値切替閾値 4500 5000 5500 30000
勝率(転生V1.0.1)[%] 92.5 93.3 93.7 53.0
勝率(V2.0.1)[%] 88.3 89.5 87.9 51.1
勝率(V2.0.2)[%] 89.3 89.6 90.1 52.4
勝率(V0.2.0)[%] 91.3 93.4 92.9 57.7
勝率(V0.3.0)[%] 58.1 59.6 59.4 37.0
勝率(V1.0.0)[%] 49.3 49.4 49.7 30.6
勝率(駒拾V1.0.1)[%] 45.4 46.4 50.8 28.1
勝率(V1.0.2-rc0)[%] 45.9 49.6 47.3 30.4
勝率(V1.0.2-rc1)[%] 50.5 51.7 48.2 30.9
勝率(V1.0.2)[%] 38.4 38.9 37.0 23.1
平均[%] 64.9 66.1 66.0 39.4

結論

評価関数切替閾値が5000のときが平均勝率66.1%と最も高くなった。よってこれを爆裂訓練太郎をV2.0.3とし、学習棋譜生成および評価関数の学習を行う。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に必要な棋譜数を調べる。

方法

仮想敵を爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V2.0.3とする。Thompson Samplingを用いた定跡作成と学習用教師データ作成を同時に行い、爆裂訓練太郎が思考した局面および評価値を学習データとする。対局はそれぞれの仮想敵との勝率に基づき選択率を決定する。各仮想敵(総数 $n$ )との勝率を $w_i$ とするとき、選択率 $R_i$ は以下の計算式で決定する。

$$ R_i =\cfrac{ \displaystyle \cfrac{1}{0.01wi} }{ \displaystyle \sum{i=1}^{n} \cfrac{1}{0.01w_i} } $$

学習はAdamを用いた線形回帰で行う。また、勝ち(負け)読み切り局面における評価値は以下の局面における評価値13544に置換して学習する。

ShogiGUI 2022_12_31 2_26_20

また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、前回は先後の玉の位置をそれぞれ81パターンで表現するのではなく、盤面を自陣・敵陣・その他の3パターンに分割し、先後の玉の位置をそれぞれ3パターンで表現した。さらに手番は考慮しないこととした。今回は先後の玉の位置が1段目~9段目の9パターンで表現する。これにより前回より評価関数の表現力が9倍となる。

まとめると学習条件は以下の通りである。

結果

棋譜を20000局分作成し、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を10%とし、MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 2000 6000 10000 14000 18000
実質MSE 4480644 2793406 2281630 1737097 1555458
勝率(転生V1.0.1)[%] 23.0 55.8 79.0 88.0 93.5
勝率(V2.0.1)[%] 17.1 48.3 73.2 87.0 89.4
勝率(V2.0.2)[%] 13.5 47.5 66.5 75.0 87.3
勝率(V0.2.0)[%] 15.5 41.6 66.1 80.8 82.2
勝率(V0.3.0)[%] 6.7 17.8 28.2 38.6 47.2
勝率(V1.0.0)[%] 2.6 8.3 22.8 30.7 38.3
勝率(駒拾V1.0.1)[%] 2.9 13.4 24.9 33.4 34.3
勝率(V1.0.2-rc0)[%] 3.1 9.2 18.7 34.7 42.7
勝率(V1.0.2-rc1)[%] 1.9 16.2 26.4 34.0 28.8
勝率(V1.0.2)[%] 3.1 7.0 15.1 25.5 26.4

図1

学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数18000局は実質MSEが収束しきっていないので、棋譜を2倍の40000局分作成し、もう一度調査する。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。

方法

方法は一つ前の実験と同様とする。

結果

棋譜を一つ前の実験の20000局分に加えて新たに20000局、合計40000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を10%として学習を行い、実質MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 4000 12000 20000 28000 36000
実質MSE 3622017 1925395 1485989 1337380 1258239
勝率(転生V1.0.1)[%] 43.2 84.1 94.0 97.0 97.7
勝率(V2.0.1)[%] 33.2 80.2 90.6 95.0 97.6
勝率(V2.0.2)[%] 25.1 70.2 87.1 93.0 92.6
勝率(V0.2.0)[%] 27.9 71.2 83.7 90.5 94.2
勝率(V0.3.0)[%] 8.9 32.7 47.0 62.5 58.7
勝率(V1.0.0)[%] 8.5 29.0 41.9 48.8 44.8
勝率(駒拾V1.0.1)[%] 9.0 27.6 43.2 52.2 57.1
勝率(V1.0.2-rc0)[%] 8.3 24.8 41.0 48.7 54.7
勝率(V1.0.2-rc1)[%] 6.8 29.2 36.1 54.9 52.5
勝率(V1.0.2)[%] 6.3 20.7 43.5 38.9 44.9

図1

学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数36000局では実質MSEが収束しきっていないので、棋譜を2倍の80000局分作成し、もう一度調査する。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。

方法

方法は二つ前の実験と同様とする。

結果

棋譜を一つ前の実験の40000局分に加えて新たに40000局、合計80000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を10%として学習を行い、実質MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 8000 24000 40000 56000 72000
実質MSE 2492806 1416207 1253756 1197605 1168140
勝率(転生V1.0.1)[%] 69.1 97.3 96.4 95.6 97.9
勝率(V2.0.1)[%] 62.2 93.7 98.4 97.8 97.6
勝率(V2.0.2)[%] 57.4 90.4 95.7 89.9 95.0
勝率(V0.2.0)[%] 50.0 87.9 95.2 96.4 95.7
勝率(V0.3.0)[%] 22.4 54.0 64.6 67.4 68.1
勝率(V1.0.0)[%] 19.9 46.9 60.3 64.5 63.5
勝率(駒拾V1.0.1)[%] 20.8 49.7 49.6 58.7 63.0
勝率(V1.0.2-rc0)[%] 12.5 45.8 52.0 52.5 53.1
勝率(V1.0.2-rc1)[%] 17.8 44.4 55.7 53.9 60.2
勝率(V1.0.2)[%] 15.7 37.7 46.0 48.6 43.1

図1

学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数72000局では実質MSEが収束しきっていないので、棋譜を2倍以上の200000局分作成し、もう一度調査する。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。

方法

方法は三つ前の実験と同様とする。

結果

棋譜を一つ前の実験の80000局分に加えて新たに120000局、合計200000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を10%として学習を行い、実質MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 20000 60000 100000 140000 180000
実質MSE 1518731 1199990 1153329 1136473 1127691
勝率(転生V1.0.1)[%] 92.7 95.2 99.4 96.8 95.5
勝率(V2.0.1)[%] 91.0 96.8 97.6 98.2 97.5
勝率(V2.0.2)[%] 87.1 94.0 95.5 97.1 96.6
勝率(V0.2.0)[%] 85.4 93.6 96.8 95.7 96.1
勝率(V0.3.0)[%] 44.5 68.9 68.7 71.4 70.1
勝率(V1.0.0)[%] 43.0 59.1 62.0 68.0 67.6
勝率(駒拾V1.0.1)[%] 44.5 61.2 61.3 54.9 63.0
勝率(V1.0.2-rc0)[%] 41.2 55.5 53.7 54.1 59.1
勝率(V1.0.2-rc1)[%] 35.0 58.9 57.5 62.4 61.1
勝率(V1.0.2)[%] 42.8 51.9 52.3 54.4 50.8

図1

学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。ただし、実質MSEの減少や勝率の上昇が鈍化しているためこれ以上棋譜を増やしても効果は薄いこともわかった。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に関するパラメータを調整する。まずは学習時間短縮のためにバッチサイズを調整する。

方法

学習方法は基本的に四つ前の実験と同様とし、パラメータ調整項目はバッチサイズと学習率とする。また、学習率は各バッチサイズにおいて、3エポック学習した時点で最もMSEが小さくなった学習率を用いる。

結果

各バッチサイズおよび学習率で学習した結果を以下に示す。

バッチサイズ 学習率 実質MSE 学習時間[分]
4096 0.005 1128110 551
8192 0.01 1130601 284
16384 0.02 1132069 160
32768 0.02 1132986 94
65536 0.05 1134009 61
131072 0.1 1134979 41

表より、バッチサイズを大きくすると学習時間を短縮できることがわかった。また、実質MSEは少し大きくなっていることもわかった。勝率に影響があるほど実質MSEが悪いわけではないと思われるため、バッチサイズ131072を採用する。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に関するパラメータを調整する。さらに、評価値スケール係数について調整する。

方法

学習方法は基本的に五つ前の実験と同様とする。ただし、バッチサイズは131072とする。機械学習において、出力値が大きいと学習が難しくなるため、現在は評価値をそのまま正解値にするのではなく、評価値を-13544~13544の範囲にクロップしたのち、512で割った値で学習している。つまり学習時の正解評価値は-26.5~26.5の範囲に制限している。この制限範囲について調整する。調整パラメータは評価値スケール係数と学習率とする。学習率は各評価値スケール係数において、3エポック学習した時点で最も実質MSEが小さくなった学習率を用いる。

結果

各評価値スケール係数および学習率で学習した結果を示す。

評価値スケール係数 学習率 実質MSE 評価値範囲
1.0 50 1134203 ±13544
451.5 0.1 1134902 ±30
677.2 0.05 1135080 ±20
1354.4 0.02 1135493 ±10

表より、評価値スケール係数が小さいほど実質MSEが小さいことがわかった。しかし、勝率に影響があるほど差がでるようなものではなさそうなので、評価値スケール係数は変更しないこととする。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。調整したパラメータで学習しても弱くなっていないことを確認する。

方法

学習方法は基本的に六つ前の実験と同様とする。ただし、バッチサイズは131072、学習率は0.1とする。

結果

三つ前の実験で作成した合計200000局分のうち、学習棋譜を90%、検証棋譜を10%として学習を行い、実質MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) 実質MSE
180000 20762938 20000 2884586 1134979
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 945 51 4 94.7 たややん互角局面集
爆裂転生太郎V2.0.1 982 18 0 98.2 たややん互角局面集
爆裂転生太郎V2.0.2 968 30 2 96.9 たややん互角局面集
爆裂駒拾太郎V0.2.0 974 17 9 97.9 たややん互角局面集
爆裂駒拾太郎V0.3.0 655 345 0 65.5 たややん互角局面集
爆裂駒拾太郎V1.0.0 664 336 0 66.4 たややん互角局面集
爆裂駒拾太郎V1.0.1 622 378 0 62.2 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 558 439 3 56.0 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 681 318 1 68.2 たややん互角局面集
爆裂駒拾太郎V1.0.2 443 555 2 44.4 たややん互角局面集

実験の結果から、爆裂駒拾太郎V1.0.2に対して勝率45%以下となっており、有意水準99%において有意に弱いことがわかった。弱くなっているため、バッチサイズ131072、学習率0.1のパラメータは採用しないこととする。

burokoron commented 1 year ago

目的

K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。調整したパラメータで学習しても弱くなっていないことを確認する。

方法

学習方法は基本的に七つ前の実験と同様とする。ただし、バッチサイズは65536、学習率は0.05とする。

結果

四つ前の実験で作成した合計200000局分のうち、学習棋譜を90%、検証棋譜を10%として学習を行い、実質MSEと爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0、爆裂駒拾太郎V1.0.1、爆裂駒拾太郎V1.0.2-rc0、爆裂駒拾太郎V1.0.2-rc1および爆裂駒拾太郎V1.0.2と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) 実質MSE
180000 20762938 20000 2884586 1134009
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 953 41 6 95.6 たややん互角局面集
爆裂転生太郎V2.0.1 961 37 2 96.2 たややん互角局面集
爆裂転生太郎V2.0.2 960 39 1 96.1 たややん互角局面集
爆裂駒拾太郎V0.2.0 956 37 7 96.0 たややん互角局面集
爆裂駒拾太郎V0.3.0 730 270 0 73.0 たややん互角局面集
爆裂駒拾太郎V1.0.0 664 336 0 66.4 たややん互角局面集
爆裂駒拾太郎V1.0.1 666 333 1 66.7 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 539 457 4 54.1 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 638 362 0 63.8 たややん互角局面集
爆裂駒拾太郎V1.0.2 513 483 4 51.5 たややん互角局面集

実験の結果から、すべてのエンジンに対して勝率45%を超えているため、有意水準99%において有意に弱いわけではないことがわかった。弱くなってはいないので、バッチサイズ65536および学習率0.05を採用し、この評価関数を用いたものを爆裂駒拾太郎V1.1.0とする。