burokoron / Yolts

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

爆裂駒拾太郎の強化学習(K/27K/27PT/2型第3~5世代評価関数) #25

Closed burokoron closed 1 year ago

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.1を入玉のみでしか勝てないように制限する。

方法

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

ShogiGUI 2022_12_31 2_26_20

さらに、評価関数を変更する評価値の閾値を決定するために、閾値3500、4000、4500、5000、30000(実質切替なし)の5パターンで爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0および爆裂駒拾太郎V1.0.1と探索深度4で1000局対局を行い勝率を測定した。

結果

評価関数切替閾値 勝率(転生V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%] 勝率(V0.2.0)[%] 勝率(V0.3.0)[%] 勝率(V1.0.0)[%] 勝率(駒拾V1.0.1)[%] 平均[%]
3500 95.6 93.3 86.4 87.5 45.7 31.0 33.5 67.6
4000 97.5 94.4 87.3 90.1 45.0 35.7 36.3 69.5
4500 96.2 92.7 89.2 90.6 46.2 35.6 36.5 69.6
5000 96.6 94.2 86.0 90.9 45.1 35.7 35.6 69.2
30000 54.5 55.5 51.2 53.9 30.7 23.5 27.9 42.5

結論

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

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.1で使用している評価関数を強化学習を用いて調整する。

手法

仮想敵を爆裂転生太郎V1.0.1、爆裂転生太郎V2.0.1、爆裂転生太郎V2.0.2、爆裂駒拾太郎V0.2.0、爆裂駒拾太郎V0.3.0、爆裂駒拾太郎V1.0.0および爆裂駒拾太郎V1.0.1、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V2.0.2とする。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を用いた線形回帰で行う。また、勝ち(負け)読み切り局面における評価値は以下の局面における評価値14389に置換して学習する。

ShogiGUI 2022_12_31 2_26_20

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

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

結果

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

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
18000 2080286 2000 293440 1356333
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 974 17 9 97.9 たややん互角局面集
爆裂転生太郎V2.0.1 976 21 3 97.8 たややん互角局面集
爆裂転生太郎V2.0.2 962 37 1 96.3 たややん互角局面集
爆裂駒拾太郎V0.2.0 955 43 2 95.6 たややん互角局面集
爆裂駒拾太郎V0.3.0 593 407 0 59.3 たややん互角局面集
爆裂駒拾太郎V1.0.0 492 508 0 49.2 たややん互角局面集
爆裂駒拾太郎V1.0.1 520 480 0 52.0 たややん互角局面集

実験の結果から、爆裂駒拾太郎V1.0.0および爆裂駒拾太郎V1.0.1に対して勝率55%を超えていないため、有意水準99%において有意に強いわけではないことがわかった。有意に弱いわけではないので、この評価関数を用いたものを爆裂駒拾太郎V1.0.2-rc0とする。

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.2-rc0を入玉のみでしか勝てないように制限する。

方法

爆裂駒拾太郎V1.0.2-rc0の探索部において、相手を詰ました場合は自分の負けとなるようにする。さらに、一定以上優勢の局面からは爆裂駒拾太郎V1.0.2-rc0の評価関数ではなく爆裂訓練太郎V1.0.0と同等の評価関数に変更して指すようにする。また、下図の局面において、爆裂駒拾太郎V1.0.2-rc0の評価関数では評価値17474であるのに対し、爆裂訓練太郎V1.0.0と同等の評価関数では評価値5676となっている。したがって、爆裂訓練太郎V1.0.0の評価関数を用いる場合は評価値を17474/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と探索深度4で1000局対局を行い勝率を測定した。

結果

評価関数切替閾値 勝率(転生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)[%] 平均[%]
4500 91.6 92.9 91.7 91.4 46.2 36.3 37.9 39.0 65.9
5000 90.5 95.7 91.6 89.0 50.3 39.8 36.1 39.1 66.5
5500 94.2 96.3 93.4 92.5 49.5 40.2 37.1 40.7 68.0
6000 94.4 94.8 92.6 92.2 47.7 41.8 39.9 39.2 67.8
30000 49.5 51.7 49.0 53.0 28.9 21.2 23.7 27.6 38.1

結論

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

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.2-rc0で使用している評価関数を強化学習を用いて調整する。

手法

仮想敵を爆裂転生太郎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、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V2.0.3-rc0とする。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を用いた線形回帰で行う。また、勝ち(負け)読み切り局面における評価値は以下の局面における評価値17474に置換して学習する。

ShogiGUI 2022_12_31 2_26_20

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

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

結果

棋譜を20000局分作成し、学習棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
18000 2150418 2000 301218 2220176
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 988 11 1 98.9 たややん互角局面集
爆裂転生太郎V2.0.1 981 18 1 98.2 たややん互角局面集
爆裂転生太郎V2.0.2 959 41 0 95.9 たややん互角局面集
爆裂駒拾太郎V0.2.0 941 59 0 94.1 たややん互角局面集
爆裂駒拾太郎V0.3.0 649 351 0 64.9 たややん互角局面集
爆裂駒拾太郎V1.0.0 587 413 0 58.7 たややん互角局面集
爆裂駒拾太郎V1.0.1 536 464 0 53.6 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 529 471 0 52.9 たややん互角局面集

実験の結果から、爆裂駒拾太郎V1.0.1に対して勝率55%を超えていないため、有意水準99%において有意に強いわけではないことがわかった。有意に弱いわけではないので、この評価関数を用いたものを爆裂駒拾太郎V1.0.2-rc1とする。

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.2-rc1で使用している評価関数を強化学習を用いて調整する。

方法

以下の局面における爆裂駒拾太郎V1.0.2-rc1の評価値は21663と非常に大きくなってしまっているため、評価値スケール係数の調整行う。現在の評価値スケール係数は512のため、256に変更し、勝率を比較する。

ShogiGUI 2022_12_31 2_26_20

結果

爆裂駒拾太郎V1.0.2-rc1の評価値スケール係数を512から256に変更して、探索深さ4での対局勝率を比較した。

エンジン名 勝率[%] 使用局面集
爆裂駒拾太郎 V 1.0.2-rc1 496 504 0 49.6 たややん互角局面集

勝率45%以上であり、有意水準99%において有意に弱いわけではないため爆裂駒拾太郎V1.0.2-rc0を入玉するように調整した爆裂訓練太郎では評価値スケール係数を256とする。

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.2-rc1を入玉のみでしか勝てないように制限する。

方法

爆裂駒拾太郎V1.0.2-rc1の探索部において、相手を詰ました場合は自分の負けとなるようにする。さらに、一定以上優勢の局面からは爆裂駒拾太郎V1.0.2-rc1の評価関数ではなく爆裂訓練太郎V1.0.0と同等の評価関数に変更して指すようにする。また、下図の局面において、評価値スケール係数を256に変更した爆裂駒拾太郎V1.0.2-rc1の評価関数では評価値10831であるのに対し、爆裂訓練太郎V1.0.0と同等の評価関数では評価値5676となっている。したがって、爆裂訓練太郎V1.0.0の評価関数を用いる場合は評価値を10831/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と探索深度4で1000局対局を行い勝率を測定した。

結果

評価値切替閾値 2500 3000 3500 4000 4500 5000 30000
勝率(転生V1.0.1)[%] 94.7 94.0 93.7 95.5 96.4 94.7 52.1
勝率(V2.0.1)[%] 90.4 87.9 94.0 93.3 94.7 93.7 54.5
勝率(V2.0.2)[%] 89.1 89.8 92.0 89.5 87.8 88.1 52.8
勝率(V0.2.0)[%] 86.0 88.5 87.3 88.0 90.3 88.9 55.2
勝率(V0.3.0)[%] 43.4 47.3 45.3 48.8 51.3 49.4 31.5
勝率(V1.0.0)[%] 37.3 37.5 39.8 43.5 41.4 44.4 27.4
勝率(駒拾V1.0.1)[%] 32.9 38.9 40.9 43.3 42.7 40.8 22.6
勝率(V1.0.2-rc0)[%] 35.8 39.1 38.3 38.7 41.3 41.9 29.5
勝率(V1.0.2-rc1)[%] 30.2 29.3 32.4 32.2 30.9 32.8 21.8
平均 60.0 61.4 62.6 63.6 64.1 63.9 38.6

結論

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

burokoron commented 1 year ago

目的

爆裂駒拾太郎V1.0.2-rc1で使用している評価関数を強化学習を用いて調整する。

手法

仮想敵を爆裂転生太郎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、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V2.0.3-rc1とする。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を用いた線形回帰で行う。また、勝ち(負け)読み切り局面における評価値は以下の局面における評価値10831に置換して学習する。

ShogiGUI 2022_12_31 2_26_20

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

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

結果

棋譜を20000局分作成し、学習棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
18000 2156860 2000 291380 816972
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 988 12 0 98.8 たややん互角局面集
爆裂転生太郎V2.0.1 925 75 0 92.5 たややん互角局面集
爆裂転生太郎V2.0.2 958 38 4 96.0 たややん互角局面集
爆裂駒拾太郎V0.2.0 957 42 1 95.8 たややん互角局面集
爆裂駒拾太郎V0.3.0 716 282 2 71.7 たややん互角局面集
爆裂駒拾太郎V1.0.0 596 404 0 59.6 たややん互角局面集
爆裂駒拾太郎V1.0.1 618 382 0 61.8 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 620 380 0 62.0 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 607 393 0 60.7 たややん互角局面集

実験の結果から、すべてのエンジンに対して勝率55%を超えているため、有意水準99%において有意に強いことがわかった。有意に強いので、この評価関数を用いたものを爆裂駒拾太郎V1.0.2とする。