burokoron / Yolts

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

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

Closed burokoron closed 1 year ago

burokoron commented 1 year ago

目的

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

方法

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

ShogiGUI 2022_12_31 2_26_20

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

結果

評価関数切替閾値 勝率(V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%] 勝率(V0.2.0)[%] 勝率(V0.3.0)[%] 平均[%]
1500 91.4 88.3 79.4 81.8 31.6 74.5
2000 91.6 91.9 81.8 84.3 37.5 77.42
2500 91.3 90.1 82.4 88.2 33.9 77.18
3000 88.8 92.7 84.4 89.5 37.3 78.54
3500 92.8 91.6 83.5 87.7 37.3 78.58
4000 93.5 84.6 82.4 89.8 36.2 77.3
30000 49.6 51.1 48.6 51.2 21.6 44.42

結論

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

burokoron commented 1 year ago

目的

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

手法

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

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

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE 勝率(V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%] 勝率(V0.2.0)[%] 勝率(V0.3.0)[%]
18000 1835598 2000 260510 146827 97.7 97.9 93.7 95.5 54.7

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