Closed burokoron closed 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に置換して学習する。
また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、したがって、先後の玉の位置をそれぞれ81パターンで表現するのではなく、先後の玉の位置を1段目~9段目の9パターンで表現した。さらに手番は考慮しないこととした。
まとめると学習条件は以下の通りである。
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評価値
棋譜を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とする。
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために、閾値を変更して爆裂転生太郎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とし、学習棋譜生成および評価関数の学習を行う。
爆裂駒拾太郎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に置換して学習する。
また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、したがって、先後の玉の位置をそれぞれ81パターンで表現するのではなく、先後の玉の位置を1段目~9段目の9パターンで表現した。さらに手番は考慮しないこととした。
まとめると学習条件は以下の通りである。
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評価値
棋譜を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とする。
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために、閾値を変更して爆裂転生太郎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とし、学習棋譜生成および評価関数の学習を行う。
爆裂駒拾太郎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に置換して学習する。
また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、したがって、先後の玉の位置をそれぞれ81パターンで表現するのではなく、先後の玉の位置を1段目~9段目の9パターンで表現した。さらに手番は考慮しないこととした。
まとめると学習条件は以下の通りである。
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評価値
棋譜を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とする。
目的
爆裂駒拾太郎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倍する。
さらに、評価関数を変更する評価値の閾値を決定するために、閾値を変更して爆裂転生太郎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局対局を行い勝率を測定した。
結果
結論
評価関数切替閾値が5500のときが平均勝率64.7%と最も高くなった。よってこれを爆裂訓練太郎をV2.1.0とし、学習棋譜生成および評価関数の学習を行う。