burokoron / Yolts

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

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

Closed burokoron closed 1 year ago

burokoron commented 1 year ago

目的

爆裂駒拾太郎で使用している評価関数を強化学習を用いて調整する。まずは学習に必要な棋譜数を調べる。

方法

仮想敵を爆裂転生太郎V1.0.1と爆裂転生太郎V2.0.1、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V1.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} } $$

学習はTensorFlowを用いて行う。勝ち(負け)読み切り局面における評価値は以下の局面における評価値6842に置換して学習する。

ShogiGUI 2022_07_31 17_33_40

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

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

結果

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

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE 勝率(V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%]
400 49164 400 59310 894068 22.9 11.7 4.4
1200 140452 400 59310 595906 51.8 33.2 16.9
2000 228268 400 59310 485360 53.1 35.6 26.4
2800 323394 400 59310 436968 66.4 43.3 33.3
3600 413006 400 59310 389415 71.0 57.7 38.5

画像1

結論

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

burokoron commented 1 year ago

目的

爆裂駒拾太郎で使用している評価関数を強化学習を用いて調整する。学習棋譜数が十分な量であるかを再度調べる。

方法

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

結果

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

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE 勝率(V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%]
800 (計測忘れ) 800 117722 578866 27.8 18.1 11.7
2400 309288 800 117722 433534 67.8 54.8 36.8
4000 506228 800 117722 376308 75.2 51.1 49.5
5600 663130 800 117722 357643 73.2 51.5 36.6
7200 823740 800 117722 346292 74.4 56.8 38.9

画像1

結論

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

burokoron commented 1 year ago

目的

爆裂駒拾太郎で使用している評価関数を強化学習を用いて調整する。学習棋譜数が十分な量であるかを再度調べる。

方法

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

結果

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

学習棋譜数 学習局面数(データ拡張含む) 検証棋譜数 検証局面数(データ拡張含む) MSE 勝率(V1.0.1)[%] 勝率(V2.0.1)[%] 勝率(V2.0.2)[%]
2000 259404 2000 281032 494404 67.5 47.5 39.1
6000 734474 2000 281032 369597 74.7 57.0 46.9
10000 1195810 2000 281032 347393 76.8 64.4 46.0
14000 1650730 2000 281032 339712 79.2 58.2 48.3
18000 2035434 2000 281032 335597 78.9 65.7 53.2

画像1

結論

学習棋譜数を増やすと、MSEおよび勝率が改善することがわかった。ただし、MSEの減少や勝率の上昇が鈍化しているためこれ以上棋譜を増やしても効果は薄いこともわかった。今回の棋譜は爆裂訓練太郎V1.0.2を学習対象としているため、同一条件で棋譜生成した実験で比較する。爆裂転生太郎V1.0.1に対する勝率は80.9%から78.9%へ低下し、爆裂転生太郎V2.0.1に対する勝率は61.9%から65.7%へ上昇している。平均すると0.9%の上昇であるため、弱くはなっていないことがわかる。また、同一条件で生成された棋譜で学習された爆裂転生太郎V2.0.2に対しては勝率53.2%であり、こちらも同様に弱くなっていないことがわかる。K/27K/27PT/2型評価関数で問題なく学習ができたといえるため、この評価関数を採用したものを爆裂駒拾太郎V0.2.0(K/27K/27PT/2型第0世代評価関数)とする。

burokoron commented 1 year ago

update:K/27K/27PT/2評価関数の実装 update:v0.2.0にアップデート