Closed burokoron closed 1 year ago
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に必要な棋譜数を調べる。
仮想敵を爆裂転生太郎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、学習対象は入玉宣言勝ちを強制された爆裂訓練太郎V2.0.3とする。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を用いた線形回帰で行う。また、勝ち(負け)読み切り局面における評価値は以下の局面における評価値13544に置換して学習する。
また、P型評価関数とKKPT型評価関数は単純計算で表現力が13122倍となるため、学習の収束に必要な棋譜が相対的に非常に多くなる可能性が高い。したがって、前回は先後の玉の位置をそれぞれ81パターンで表現するのではなく、盤面を自陣・敵陣・その他の3パターンに分割し、先後の玉の位置をそれぞれ3パターンで表現した。さらに手番は考慮しないこととした。今回は先後の玉の位置が1段目~9段目の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評価値
棋譜を20000局分作成し、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 2000 | 6000 | 10000 | 14000 | 18000 |
---|---|---|---|---|---|
実質MSE | 4480644 | 2793406 | 2281630 | 1737097 | 1555458 |
勝率(転生V1.0.1)[%] | 23.0 | 55.8 | 79.0 | 88.0 | 93.5 |
勝率(V2.0.1)[%] | 17.1 | 48.3 | 73.2 | 87.0 | 89.4 |
勝率(V2.0.2)[%] | 13.5 | 47.5 | 66.5 | 75.0 | 87.3 |
勝率(V0.2.0)[%] | 15.5 | 41.6 | 66.1 | 80.8 | 82.2 |
勝率(V0.3.0)[%] | 6.7 | 17.8 | 28.2 | 38.6 | 47.2 |
勝率(V1.0.0)[%] | 2.6 | 8.3 | 22.8 | 30.7 | 38.3 |
勝率(駒拾V1.0.1)[%] | 2.9 | 13.4 | 24.9 | 33.4 | 34.3 |
勝率(V1.0.2-rc0)[%] | 3.1 | 9.2 | 18.7 | 34.7 | 42.7 |
勝率(V1.0.2-rc1)[%] | 1.9 | 16.2 | 26.4 | 34.0 | 28.8 |
勝率(V1.0.2)[%] | 3.1 | 7.0 | 15.1 | 25.5 | 26.4 |
学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数18000局は実質MSEが収束しきっていないので、棋譜を2倍の40000局分作成し、もう一度調査する。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。
方法は一つ前の実験と同様とする。
棋譜を一つ前の実験の20000局分に加えて新たに20000局、合計40000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 4000 | 12000 | 20000 | 28000 | 36000 |
---|---|---|---|---|---|
実質MSE | 3622017 | 1925395 | 1485989 | 1337380 | 1258239 |
勝率(転生V1.0.1)[%] | 43.2 | 84.1 | 94.0 | 97.0 | 97.7 |
勝率(V2.0.1)[%] | 33.2 | 80.2 | 90.6 | 95.0 | 97.6 |
勝率(V2.0.2)[%] | 25.1 | 70.2 | 87.1 | 93.0 | 92.6 |
勝率(V0.2.0)[%] | 27.9 | 71.2 | 83.7 | 90.5 | 94.2 |
勝率(V0.3.0)[%] | 8.9 | 32.7 | 47.0 | 62.5 | 58.7 |
勝率(V1.0.0)[%] | 8.5 | 29.0 | 41.9 | 48.8 | 44.8 |
勝率(駒拾V1.0.1)[%] | 9.0 | 27.6 | 43.2 | 52.2 | 57.1 |
勝率(V1.0.2-rc0)[%] | 8.3 | 24.8 | 41.0 | 48.7 | 54.7 |
勝率(V1.0.2-rc1)[%] | 6.8 | 29.2 | 36.1 | 54.9 | 52.5 |
勝率(V1.0.2)[%] | 6.3 | 20.7 | 43.5 | 38.9 | 44.9 |
学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数36000局では実質MSEが収束しきっていないので、棋譜を2倍の80000局分作成し、もう一度調査する。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。
方法は二つ前の実験と同様とする。
棋譜を一つ前の実験の40000局分に加えて新たに40000局、合計80000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 8000 | 24000 | 40000 | 56000 | 72000 |
---|---|---|---|---|---|
実質MSE | 2492806 | 1416207 | 1253756 | 1197605 | 1168140 |
勝率(転生V1.0.1)[%] | 69.1 | 97.3 | 96.4 | 95.6 | 97.9 |
勝率(V2.0.1)[%] | 62.2 | 93.7 | 98.4 | 97.8 | 97.6 |
勝率(V2.0.2)[%] | 57.4 | 90.4 | 95.7 | 89.9 | 95.0 |
勝率(V0.2.0)[%] | 50.0 | 87.9 | 95.2 | 96.4 | 95.7 |
勝率(V0.3.0)[%] | 22.4 | 54.0 | 64.6 | 67.4 | 68.1 |
勝率(V1.0.0)[%] | 19.9 | 46.9 | 60.3 | 64.5 | 63.5 |
勝率(駒拾V1.0.1)[%] | 20.8 | 49.7 | 49.6 | 58.7 | 63.0 |
勝率(V1.0.2-rc0)[%] | 12.5 | 45.8 | 52.0 | 52.5 | 53.1 |
勝率(V1.0.2-rc1)[%] | 17.8 | 44.4 | 55.7 | 53.9 | 60.2 |
勝率(V1.0.2)[%] | 15.7 | 37.7 | 46.0 | 48.6 | 43.1 |
学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。学習棋譜数72000局では実質MSEが収束しきっていないので、棋譜を2倍以上の200000局分作成し、もう一度調査する。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。学習棋譜数が十分な量であるかを再度調べる。
方法は三つ前の実験と同様とする。
棋譜を一つ前の実験の80000局分に加えて新たに120000局、合計200000局分作成した。そのうち、学習棋譜を10、30、50、70、90%の5パターン、検証棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 20000 | 60000 | 100000 | 140000 | 180000 |
---|---|---|---|---|---|
実質MSE | 1518731 | 1199990 | 1153329 | 1136473 | 1127691 |
勝率(転生V1.0.1)[%] | 92.7 | 95.2 | 99.4 | 96.8 | 95.5 |
勝率(V2.0.1)[%] | 91.0 | 96.8 | 97.6 | 98.2 | 97.5 |
勝率(V2.0.2)[%] | 87.1 | 94.0 | 95.5 | 97.1 | 96.6 |
勝率(V0.2.0)[%] | 85.4 | 93.6 | 96.8 | 95.7 | 96.1 |
勝率(V0.3.0)[%] | 44.5 | 68.9 | 68.7 | 71.4 | 70.1 |
勝率(V1.0.0)[%] | 43.0 | 59.1 | 62.0 | 68.0 | 67.6 |
勝率(駒拾V1.0.1)[%] | 44.5 | 61.2 | 61.3 | 54.9 | 63.0 |
勝率(V1.0.2-rc0)[%] | 41.2 | 55.5 | 53.7 | 54.1 | 59.1 |
勝率(V1.0.2-rc1)[%] | 35.0 | 58.9 | 57.5 | 62.4 | 61.1 |
勝率(V1.0.2)[%] | 42.8 | 51.9 | 52.3 | 54.4 | 50.8 |
学習棋譜数を増やすと、実質MSEおよび勝率が改善することがわかった。ただし、実質MSEの減少や勝率の上昇が鈍化しているためこれ以上棋譜を増やしても効果は薄いこともわかった。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に関するパラメータを調整する。まずは学習時間短縮のためにバッチサイズを調整する。
学習方法は基本的に四つ前の実験と同様とし、パラメータ調整項目はバッチサイズと学習率とする。また、学習率は各バッチサイズにおいて、3エポック学習した時点で最もMSEが小さくなった学習率を用いる。
各バッチサイズおよび学習率で学習した結果を以下に示す。
バッチサイズ | 学習率 | 実質MSE | 学習時間[分] |
---|---|---|---|
4096 | 0.005 | 1128110 | 551 |
8192 | 0.01 | 1130601 | 284 |
16384 | 0.02 | 1132069 | 160 |
32768 | 0.02 | 1132986 | 94 |
65536 | 0.05 | 1134009 | 61 |
131072 | 0.1 | 1134979 | 41 |
表より、バッチサイズを大きくすると学習時間を短縮できることがわかった。また、実質MSEは少し大きくなっていることもわかった。勝率に影響があるほど実質MSEが悪いわけではないと思われるため、バッチサイズ131072を採用する。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。次に学習に関するパラメータを調整する。さらに、評価値スケール係数について調整する。
学習方法は基本的に五つ前の実験と同様とする。ただし、バッチサイズは131072とする。機械学習において、出力値が大きいと学習が難しくなるため、現在は評価値をそのまま正解値にするのではなく、評価値を-13544~13544の範囲にクロップしたのち、512で割った値で学習している。つまり学習時の正解評価値は-26.5~26.5の範囲に制限している。この制限範囲について調整する。調整パラメータは評価値スケール係数と学習率とする。学習率は各評価値スケール係数において、3エポック学習した時点で最も実質MSEが小さくなった学習率を用いる。
各評価値スケール係数および学習率で学習した結果を示す。
評価値スケール係数 | 学習率 | 実質MSE | 評価値範囲 |
---|---|---|---|
1.0 | 50 | 1134203 | ±13544 |
451.5 | 0.1 | 1134902 | ±30 |
677.2 | 0.05 | 1135080 | ±20 |
1354.4 | 0.02 | 1135493 | ±10 |
表より、評価値スケール係数が小さいほど実質MSEが小さいことがわかった。しかし、勝率に影響があるほど差がでるようなものではなさそうなので、評価値スケール係数は変更しないこととする。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。調整したパラメータで学習しても弱くなっていないことを確認する。
学習方法は基本的に六つ前の実験と同様とする。ただし、バッチサイズは131072、学習率は0.1とする。
三つ前の実験で作成した合計200000局分のうち、学習棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 学習局面数(データ拡張含む) | 検証棋譜数 | 検証局面数(データ拡張含む) | 実質MSE |
---|---|---|---|---|
180000 | 20762938 | 20000 | 2884586 | 1134979 |
エンジン名 | 勝 | 負 | 分 | 勝率[%] | 使用局面集 |
---|---|---|---|---|---|
爆裂転生太郎V1.0.1 | 945 | 51 | 4 | 94.7 | たややん互角局面集 |
爆裂転生太郎V2.0.1 | 982 | 18 | 0 | 98.2 | たややん互角局面集 |
爆裂転生太郎V2.0.2 | 968 | 30 | 2 | 96.9 | たややん互角局面集 |
爆裂駒拾太郎V0.2.0 | 974 | 17 | 9 | 97.9 | たややん互角局面集 |
爆裂駒拾太郎V0.3.0 | 655 | 345 | 0 | 65.5 | たややん互角局面集 |
爆裂駒拾太郎V1.0.0 | 664 | 336 | 0 | 66.4 | たややん互角局面集 |
爆裂駒拾太郎V1.0.1 | 622 | 378 | 0 | 62.2 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2-rc0 | 558 | 439 | 3 | 56.0 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2-rc1 | 681 | 318 | 1 | 68.2 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2 | 443 | 555 | 2 | 44.4 | たややん互角局面集 |
実験の結果から、爆裂駒拾太郎V1.0.2に対して勝率45%以下となっており、有意水準99%において有意に弱いことがわかった。弱くなっているため、バッチサイズ131072、学習率0.1のパラメータは採用しないこととする。
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。調整したパラメータで学習しても弱くなっていないことを確認する。
学習方法は基本的に七つ前の実験と同様とする。ただし、バッチサイズは65536、学習率は0.05とする。
四つ前の実験で作成した合計200000局分のうち、学習棋譜を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と探索深さ4での対局勝率を比較した。また、局面の重複は除外した。結果は以下の通りである。
学習棋譜数 | 学習局面数(データ拡張含む) | 検証棋譜数 | 検証局面数(データ拡張含む) | 実質MSE |
---|---|---|---|---|
180000 | 20762938 | 20000 | 2884586 | 1134009 |
エンジン名 | 勝 | 負 | 分 | 勝率[%] | 使用局面集 |
---|---|---|---|---|---|
爆裂転生太郎V1.0.1 | 953 | 41 | 6 | 95.6 | たややん互角局面集 |
爆裂転生太郎V2.0.1 | 961 | 37 | 2 | 96.2 | たややん互角局面集 |
爆裂転生太郎V2.0.2 | 960 | 39 | 1 | 96.1 | たややん互角局面集 |
爆裂駒拾太郎V0.2.0 | 956 | 37 | 7 | 96.0 | たややん互角局面集 |
爆裂駒拾太郎V0.3.0 | 730 | 270 | 0 | 73.0 | たややん互角局面集 |
爆裂駒拾太郎V1.0.0 | 664 | 336 | 0 | 66.4 | たややん互角局面集 |
爆裂駒拾太郎V1.0.1 | 666 | 333 | 1 | 66.7 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2-rc0 | 539 | 457 | 4 | 54.1 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2-rc1 | 638 | 362 | 0 | 63.8 | たややん互角局面集 |
爆裂駒拾太郎V1.0.2 | 513 | 483 | 4 | 51.5 | たややん互角局面集 |
実験の結果から、すべてのエンジンに対して勝率45%を超えているため、有意水準99%において有意に弱いわけではないことがわかった。弱くなってはいないので、バッチサイズ65536および学習率0.05を採用し、この評価関数を用いたものを爆裂駒拾太郎V1.1.0とする。
目的
K/27K/27PT/2型評価関数をK/9K/9PT/2型に変更する。まずは爆裂駒拾太郎V1.0.2を入玉のみでしか勝てないように制限する。
方法
爆裂駒拾太郎V1.0.2の探索部において、相手を詰ました場合は自分の負けとなるようにする。さらに、一定以上優勢の局面からは爆裂駒拾太郎V1.0.2の評価関数ではなく爆裂訓練太郎V1.0.0と同等の評価関数に変更して指すようにする。また、下図の局面において、爆裂駒拾太郎V1.0.2の評価関数では評価値13544であるのに対し、爆裂訓練太郎V1.0.0と同等の評価関数では評価値5676となっている。したがって、爆裂訓練太郎V1.0.0の評価関数を用いる場合は評価値を13544/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と探索深度4で1000局対局を行い勝率を測定した。
結果
結論
評価関数切替閾値が5000のときが平均勝率66.1%と最も高くなった。よってこれを爆裂訓練太郎をV2.0.3とし、学習棋譜生成および評価関数の学習を行う。