Closed burokoron closed 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に置換して学習する。
また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、今回は先後の玉の位置をそれぞれ81パターンで表現するのではなく、盤面を自陣・敵陣・その他の3パターンに分割し、先後の玉の位置をそれぞれ3パターンで表現する。さらに手番は考慮しないこととする。
まとめると学習条件は以下の通りである。
flowchart TD
Inputs\nn,95\n盤面81升+持ち駒7升*2=95次元 --> Embedding\nn,95,1\n入力次元数=K81升*K81升*P81升*30種*手番2種=38644290,重み初期値=0,インデックス値=0はマスク値 --> sum\nn,1 --> Outputs\nn,1\n評価値
棋譜を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とする。
目的
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために、閾値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局対局を行い勝率を測定した。
結果
結論
評価関数切替閾値が3500のときが平均勝率78.58%と最も高くなった。よってこれを爆裂訓練太郎をV2.0.0とし、学習棋譜生成および評価関数の学習を行う。