自己対戦学習でも合議を有効活用出来ないか
ゲーム情報学研究発表会*1の「合議アルゴリズムプレイヤの棋譜を用いた将棋の評価関数の学習」を読んでたらふと思ったんですが、自己対戦学習で合議を使って手を選択するってのはどうかなぁ、と。
まず、現状の評価項目は下記の通り。
- 駒割の評価
- 筋・段個別の絶対位置評価
- 駒の絶対位置評価
- 二駒の相対位置関係*
- 飛び利きを遮る駒の評価
- 駒の自由度の評価*
- 王将の移動可能範囲の評価*
んで、*を付けた3項目の有効・無効の組み合わせで8通りの評価関数を作り*2、それらを合議クライアントとして使用します。
問題は学習時で、今は8種の評価関数それぞれが完全に独立して自己対戦・学習を行い、その結果出来たパラメータセットを用いて合議します。ま、要するにバギング*3みたいなものです。
こっからが本題で、自己対戦時に8種の評価関数で合議を行い、その結果を元に自己対戦棋譜を生成し、パラメータ修正をするってのはどうかなというのが今回のアイデア。
メリットとして、例えば「終盤が得意だけど序盤が苦手なクライアント(評価関数)」と「序盤が得意で終盤苦手なクライアント(評価関数)」がいたとして、それぞれが合議で選ばれた別のクライアントの指し手を見て「序盤(終盤)ではこういう手が有効なんだ」と気付く事が出来ないかな、と考えています。
もちろんデメリットもあって、全クライアントが同じ棋譜から学習する事になるので、合議に必要なクライアントの多様性が失われる可能性もあります。
ただ、現状では合議無しの学習が上手く行っていないので、合議を組み込んだ強化学習でちょっとでも強くなってくれれば、って感じです。
実装のイメージは頭ん中で大体出来てるんで、今週末にでも実装してみようと思います。・・・大きな読み抜けが無ければ、ですが。