複数評価関数での合議の為の学習
まず、従来の*1合議では、単一の評価関数&パラメータから、評価値に適当な乱数を足して複数の合議クライアントを生成します。で、複数クライアントが個別に探索し、その結果から得票数が最高の手だったり評価値が最高の手だったりを選択します。
私が今からやろうとしているのは多数決合議ですが、複数の評価関数&パラメータを使用するのが異なります。
複数の評価関数は、評価項目の有効・無効を切り替えて生成します。大体こんな感じ。(○が付いている評価項目が有効。)
No. | 駒割 | 絶対位置評価 | 二駒相対 | 二駒絶対 | 駒の自由度 | 王将の移動可能範囲 | 王将周辺の利き |
---|---|---|---|---|---|---|---|
1 | ○ | ○ | ○ | ||||
2 | ○ | ○ | ○ | ○ | |||
3 | ○ | ○ | ○ | ○ | |||
4 | ○ | ○ | ○ | ○ | ○ | ||
略 | |||||||
16 | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
二駒絶対〜王将周辺の利きまでの4項目の有効・無効の組み合わせ、トータル16種類から16個の評価関数(16個の合議クライアント)を生成します。
選手権等での対局時は、各クライアントがシングルスレッドの探索ルーチンを使用し、16クライアントが16並列で探索します。
次にパラメータの学習方法ですが、16個の合議クライアントをランダムな組み合わせで対局させ(1vs5, 13vs8, 4vs2…)、その結果から強化学習(SR-PGLeaf)で評価関数パラメータの学習をします。ここは、第25回選手権バージョンとほとんど変わりません。
んで、こうすると何が嬉しいかというと
- 合議による棋力の底上げが可能
- 多様なプレイヤー同士の対局から学習する事により、様々な棋譜を生成する事が可能
の2点です。
特に2.が重要で、従来の*2学習方式では対振り飛車が苦手だったり、相居飛車前提で駒を移動させたりという問題が解決出来るのではないかと考えています。
さて、ここからが本題の、開発日記の内容。
上記の学習方式で、5五将棋を450万局ほど学習させてみました。探索は全幅1手+静止探索6手。クライアントごとの勝率と、予測報酬のRMSEは下のグラフのとおり。
一部のクライアント*3は勝率が低く、RMSEが大きめですが、まぁどちらも許容範囲内かと。
合議をアンサンブル学習の一種と考えると、「強いクライアントを作る」より「多様なクライアントを作る」方が重要ですので、多少勝率の低いクライアントが混じっていてもOKかな、と。
ssp(5五将棋モード)と連続対局中
「先手頑張れ、先手頑張れ!! あーーーーーーーーーっ、負けた _| ̄|○」って考えてたら、GA将!!!!!!!!!は後手だった。
…ありますよね、こういう事。
CSA研究賞を頂きました
遅くなって申し訳ありませんが、選手権時の話。
芝浦将棋Jr.の五十嵐治一先生、ひまわりの山本一将さんと共同で、CSA研究賞を頂きました。
強化学習の一手法である方策勾配法に関する一連の研究に対して、「コンピュータ将棋をさらに強くできる可能性を示し」たと評価して頂き、今回の受賞につながったそうです。
今回、こうして賞を頂けた事はとても光栄ですし、嬉しいです。
今後は方策勾配法でより強いプログラムを作成し、学習法などに関しても積極的に公開して行きたいです。
「きちんと」アルゴリズムを設計し実装出来れば、方策勾配法でボナンザメソッドを越える事も可能だと考えていますので、次回の選手権ではもっと上を目指そうと思います。
コードネーム「India」開発開始
Ver.9だからNATOフォネティックコードの9番目っていう安直な名前ですが、「India」というソリューション名でGA将!!!!!!!!!の開発を開始。
とりあえず、今日中には合議用SR-PGLeafで三目並べの学習が動く様にしたいですね。
つっても、やる事はVer.8から各種コードをコピーして、ビルド用の設定をするだけですが。
ま、とりあえはサクサクやりましょうか。
学習時専用の探索ルーチンを実装
αβ探索がバグってる疑惑があるんで、全幅1手+静止探索に限定した探索ルーチンを実装。現在アサーション有効にしてテスト中。
…暇なんで、も一回日向ぼっこしてきます。