Closed burokoron closed 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に置換して学習する。
また、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、爆裂駒拾太郎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とする。
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために様々な閾値で爆裂転生太郎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とし、学習棋譜生成および評価関数の学習を行う。
爆裂駒拾太郎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に置換して学習する。
また、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、爆裂駒拾太郎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とする。
爆裂駒拾太郎V1.0.2-rc1で使用している評価関数を強化学習を用いて調整する。
以下の局面における爆裂駒拾太郎V1.0.2-rc1の評価値は21663と非常に大きくなってしまっているため、評価値スケール係数の調整行う。現在の評価値スケール係数は512のため、256に変更し、勝率を比較する。
爆裂駒拾太郎V1.0.2-rc1の評価値スケール係数を512から256に変更して、探索深さ4での対局勝率を比較した。
エンジン名 | 勝 | 負 | 分 | 勝率[%] | 使用局面集 |
---|---|---|---|---|---|
爆裂駒拾太郎 V 1.0.2-rc1 | 496 | 504 | 0 | 49.6 | たややん互角局面集 |
勝率45%以上であり、有意水準99%において有意に弱いわけではないため爆裂駒拾太郎V1.0.2-rc0を入玉するように調整した爆裂訓練太郎では評価値スケール係数を256とする。
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために様々な閾値で爆裂転生太郎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とし、学習棋譜生成および評価関数の学習を行う。
爆裂駒拾太郎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に置換して学習する。
また、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、爆裂駒拾太郎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とする。
目的
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために、閾値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局対局を行い勝率を測定した。
結果
結論
評価関数切替閾値が4500のときが平均勝率69.6%と最も高くなった。よってこれを爆裂訓練太郎をV2.0.2とし、学習棋譜生成および評価関数の学習を行う。