多数決合議用の、複数の評価関数パラメータセットの学習
久々の更新ですが、ちょっとだけ進展有りました。
まず、以前から何回かトライしていた「複数の評価関数を生成し、それらのリーグ戦の結果から強化学習する」という手法ですが、ようやく成功したみたいです。
以前は学習結果の各パラメータの平均値をファイルに保存しておき、実戦ではその(平均をとった)パラメータにDropoutをかけて対局していました。
ただ、せっかく学習時に複数のパラメータセットを生成したんですから、それをそのまま使った方が良いんじゃないかと考えました。
んで、現在の実装では「複数のパラメータセットをそれぞれ個別のファイルに保存しておき、実戦では各評価関数はそれぞれ異なるファイルのパラメータセットを使用する」となっています。
肝心の棋力ですが、同じタイミングで保存しておいた、平均化したパラメータと生のパラメータ8個を使った場合を比較してみました。5五将棋モードで対局相手はssp、思考時間はGA将0.1秒・ssp1秒です。
結果、平均化した場合は627勝131敗で勝率82.7%。生のパラメータの場合は988勝149敗で勝率86.9%。ほぼ確実に強くなっています。レーティングは50程度向上した様子。
パラメータの推移を見た感じだとまだ収束していない様ですので、引き続き学習させてどこまで伸びるか見てみます。
「Combining policy gradient and Q-learning」を読んで、実装する為に最低限必要な知識をまとめてみた。
前提
二人零和有限確定完全情報ゲームで、自己対局の結果からPGQ(論文の提案アルゴリズム)を用いて評価関数パラメータの学習を行う事を目的とします。
報酬は「勝ち:+1、引き分け:0、負け:-1」と設定し、終局後に報酬を与えるものとします。
方策勾配法やQ学習に関しては本エントリでは解説しませんので、適当なリソースに当たって下さい。
論文の重要な部分
まず、エントロピー正則化ありの方策勾配法を考えます。方策π・状態sに対するエントロピーHは次式です。
この時、方策勾配法の停留点*1における状況から、「方策π・エントロピーH・状態価値Vを元に行動価値Qを計算出来る」というのが最大のポイントです。
具体的には、論文の式(5)です。(一部省略して記載します。)
パラメータ更新則
方策πはパラメータθを、状態価値関数Vはパラメータwを持ちます。この時、パラメータ更新則は次式の通りです。(論文の式(14)。)
ηは第一項と第二項のバランスを取る為のパラメータで、0~1の値を設定します。は方策πに従って得られた報酬を用いれば良い様です。
で期待値を取る計算が出て来ますが、これはREINFORCEの様にサンプリング結果から計算すればOKかと。
また、は最適ベルマンオペレータで、論文中では3ページ目に記載があります。
まー要するに、通常のQ学習の目標値を求めるやり方ですね。
GA将?の実装にあたって
ここからは論文に書いてない事で、「私はこうしました」って話です。
まず、論文ではパラメータθとwは別個に持っている様でしたが、わざわざ2つに分ける必要性を感じませんでしたので、θのみにしてあります。
具体的には、方策πと状態価値関数Vは下記の通りです。
evl(s,a|θ)は「パラメータθを用いて、局面sから手aを指した後の探索結果(評価値)」、evl_qui(s|θ)は「パラメータθを用いて、局面sから静止探索をして得られた探索結果(評価値)」です。Vに関しては、報酬が-1~+1なのでVの値もその範囲に収まる様にしています*2。
メタパラメータですが、α=0.1・η=0.5が三目並べでの実験結果では最適でしたので、本将棋モードでも同様の値を使用しています。
ついカッとなってやった。後悔はしていない。
二駒関係の学習を打ち切って、三駒関係の学習開始。色々コードをいじったんで、デグレしていないのを確認する為に、現在は5五将棋モードで学習中。
…したら、二駒関係のパラメータ、強くなっていました。
まぁ、選手権で使うパラメータが確保出来たと思って納得しときます。
で、上で書いたコード修正です。三駒関係有効でNoisy Networks風のノイズを加えた局面評価をしようとすると、ノイズの初期化に10数秒オーダーで時間がかかります。
なので、ここは擬似的にノイズをクリアして、パラメータ参照時にノイズが設定されていなかったらその時にノイズを設定する様に修正しました。これで、ノイズ設定の負荷は大分軽減されたはずです。
問題は擬似的なノイズクリアとオンデマンドでのノイズ設定ですが、ちゃんと動いているか不安が残りますね。まだ時間はあるので、5五将棋モードで検証して、ちゃんと動いている様なら本将棋モードでの学習を開始する予定です。