burokoron / Yolts

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

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

Closed burokoron closed 1 year ago

burokoron commented 1 year ago

目的

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

方法

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

結果

評価値切替閾値 5000 5500 6000 30000
勝率(転生V1.0.1)[%] 89.7 92.7 93.5 54.8
勝率(V2.0.1)[%] 92.0 92.5 92.2 53.0
勝率(V2.0.2)[%] 93.4 92.4 93.0 53.1
勝率(V0.2.0)[%] 91.3 92.1 93.0 54.8
勝率(V0.3.0)[%] 62.5 62.5 60.1 38.0
勝率(V1.0.0)[%] 48.2 53.2 50.1 30.7
勝率(駒拾V1.0.1)[%] 52.7 54.4 51.2 35.6
勝率(V1.0.2-rc0)[%] 45.2 46.6 45.7 30.5
勝率(V1.0.2-rc1)[%] 47.1 49.7 54.2 32.7
勝率(V1.0.2)[%] 34.1 39.8 34.1 22.3
勝率(V1.1.0)[%] 37.6 36.0 34.5 26.0
平均[%] 63.1 64.7 63.8 39.2

結論

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

burokoron commented 1 year ago

目的

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

手法

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

ShogiGUI 2022_12_31 2_26_20

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

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

結果

棋譜を200,000局分作成し、学習棋譜を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および爆裂駒拾太郎V1.1.0と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
180,000 22,270,986 20,000 3,057,728 忘れた
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 976 19 5 98.1 たややん互角局面集
爆裂転生太郎V2.0.1 980 20 0 98.0 たややん互角局面集
爆裂転生太郎V2.0.2 970 27 3 97.2 たややん互角局面集
爆裂駒拾太郎V0.2.0 958 37 5 96.1 たややん互角局面集
爆裂駒拾太郎V0.3.0 752 248 0 75.2 たややん互角局面集
爆裂駒拾太郎V1.0.0 634 366 0 63.4 たややん互角局面集
爆裂駒拾太郎V1.0.1 657 339 4 65.9 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 564 434 4 65.9 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 663 336 1 66.4 たややん互角局面集
爆裂駒拾太郎V1.0.2 467 533 0 46.7 たややん互角局面集
爆裂駒拾太郎V1.1.0 550 448 2 55.0 たややん互角局面集

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

burokoron commented 1 year ago

目的

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

方法

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

結果

評価値切替閾値 5500 6000 6500 7000 7500 8000 8500 30000
勝率(転生V1.0.1)[%] 94.1 87.8 89.2 96.3 95.8 96.1 96.2 51.6
勝率(V2.0.1)[%] 94.1 94.4 95.7 95.5 95.4 96.0 96.0 55.8
勝率(V2.0.2)[%] 89.8 92.4 92.3 91.6 92.6 93.3 91.0 54.7
勝率(V0.2.0)[%] 90.7 91.5 92.9 92.5 90.0 90.4 91.0 53.7
勝率(V0.3.0)[%] 64.9 63.0 61.8 61.9 66.7 65.6 65.2 37.3
勝率(V1.0.0)[%] 53.2 46.2 50.3 50.1 54.6 53.1 51.2 32.5
勝率(駒拾V1.0.1)[%] 47.8 53.0 52.7 50.8 49.3 54.8 52.0 32.2
勝率(V1.0.2-rc0)[%] 43.3 43.7 44.7 44.6 46.3 47.6 45.6 27.6
勝率(V1.0.2-rc1)[%] 43.6 48.7 50.7 51.7 50.3 49.7 50.2 31.8
勝率(V1.0.2)[%] 34.2 38.3 35.9 39.3 34.7 35.5 38.5 24.0
勝率(V1.1.0)[%] 37.5 38.4 37.4 39.8 37.2 38.9 40.8 24.6
勝率(V1.1.1-rc0)[%] 31.4 33.1 36.8 33.5 35.5 34.8 38.0 23.5
平均[%] 60.4 60.9 61.7 62.3 62.4 63.0 63.0 37.4

結論

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

burokoron commented 1 year ago

目的

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

ShogiGUI 2022_12_31 2_26_20

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

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

結果

棋譜を200,000局分作成し、学習棋譜を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、爆裂駒拾太郎V1.1.0および爆裂駒拾太郎V1.1.1-rc0と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
180,000 22,750,532 20,000 3,135,960 1,492,412
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 986 9 5 98.9 たややん互角局面集
爆裂転生太郎V2.0.1 987 8 5 99.0 たややん互角局面集
爆裂転生太郎V2.0.2 978 18 4 98.0 たややん互角局面集
爆裂駒拾太郎V0.2.0 942 42 16 95.0 たややん互角局面集
爆裂駒拾太郎V0.3.0 758 242 0 75.8 たややん互角局面集
爆裂駒拾太郎V1.0.0 687 313 0 68.7 たややん互角局面集
爆裂駒拾太郎V1.0.1 623 377 0 62.3 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 659 339 2 66.0 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 640 360 0 64.0 たややん互角局面集
爆裂駒拾太郎V1.0.2 566 434 0 56.6 たややん互角局面集
爆裂駒拾太郎V1.1.0 534 464 2 53.5 たややん互角局面集
爆裂駒拾太郎V1.1.1-rc0 471 528 1 47.2 たややん互角局面集

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

burokoron commented 1 year ago

目的

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

方法

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

結果

評価値切替閾値 8000 8500 9000 30000
勝率(転生V1.0.1)[%] 96.7 97.2 95.8 51.8
勝率(V2.0.1)[%] 94.6 96.4 96.2 50.5
勝率(V2.0.2)[%] 93.8 95.6 94.3 52.5
勝率(V0.2.0)[%] 91.4 91.1 85.9 50.8
勝率(V0.3.0)[%] 59.5 63.1 64.2 35.2
勝率(V1.0.0)[%] 56.8 59.0 57.2 32.9
勝率(駒拾V1.0.1)[%] 60.4 56.4 57.1 35.9
勝率(V1.0.2-rc0)[%] 57.2 56.7 53.8 34.8
勝率(V1.0.2-rc1)[%] 49.7 52.4 47.0 30.0
勝率(V1.0.2)[%] 46.9 45.6 46.5 28.3
勝率(V1.1.0)[%] 35.7 34.8 35.3 25.4
勝率(V1.1.1-rc0)[%] 39.5 35.2 35.1 30.5
勝率(V1.1.1-rc1)[%] 30.5 30.0 34.1 30.9
平均[%] 62.5 62.6 61.7 37.7

結論

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

burokoron commented 1 year ago

目的

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

ShogiGUI 2022_12_31 2_26_20

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

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

結果

棋譜を200,000局分作成し、学習棋譜を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、爆裂駒拾太郎V1.1.0、爆裂駒拾太郎V1.1.1-rc0および爆裂駒拾太郎V1.1.1-rc1と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE
180,000 22,587,050 20,000 3,131,188 1,859,702
エンジン名 勝率[%] 使用局面集
爆裂転生太郎V1.0.1 991 3 6 99.4 たややん互角局面集
爆裂転生太郎V2.0.1 983 17 0 99.2 たややん互角局面集
爆裂転生太郎V2.0.2 982 14 4 98.4 たややん互角局面集
爆裂駒拾太郎V0.2.0 968 26 6 97.1 たややん互角局面集
爆裂駒拾太郎V0.3.0 785 213 2 78.6 たややん互角局面集
爆裂駒拾太郎V1.0.0 689 309 2 69.0 たややん互角局面集
爆裂駒拾太郎V1.0.1 650 350 0 65.0 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc0 660 338 2 66.1 たややん互角局面集
爆裂駒拾太郎V1.0.2-rc1 609 391 0 60.9 たややん互角局面集
爆裂駒拾太郎V1.0.2 564 436 0 56.4 たややん互角局面集
爆裂駒拾太郎V1.1.0 529 462 9 53.4 たややん互角局面集
爆裂駒拾太郎V1.1.1-rc0 557 443 0 55.7 たややん互角局面集
爆裂駒拾太郎V1.1.1-rc1 559 441 0 55.9 たややん互角局面集

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