これからの予定を整理
まずはメタ強化学習の構成について。
おおざっぱに書くと下の様なイメージです。"→" は矢印の左側の値が右側の挙動を決める、 "⇒" は矢印の左側が右側の値を修正する事を表します。
メタエージェント ⇒ メタパラメータ → エージェント ⇒ 評価関数のパラメータ
エージェントとかメタエージェントは強化学習の主体となる部分で、学習を行うクラスみたいなイメージです。
んで、例えばエージェントの方策*1がεグリーディーならεが、ソフトマックスなら温度がメタパラメータになります。他にはTD(λ)のλとか学習率とかもメタパラメータです。
ここ一ヶ月ばかり悩んでたのは、メタパラメータの設定次第で学習が上手く行ったり行かなかったりするのですが、ちょっと問題を変えると(例えば後手の指し手を少し変えると)最適なメタパラメータの値が違ってくるという事でした。
そうすると簡単な問題でメタパラメータを調整しておいてから、本番の将棋にそのメタパラメータを流用するのが難しいんで、メタ強化学習を実装して楽をしよう、というのが目的です。
で、メタエージェントの目的は「最適なメタパラメータを探す」事ですが、メタパラメータは連続した値なのでTD法やQ学習は使えません。
という訳でメタエージェントのアルゴリズムはActor-Critic*2にして、Actor*3をGA + UCB1-TUNEDで実装しようかと考えています。
Actor部分は、まずGAで「メタパラメータの候補(複数)」を生成し、UCB1-TUNEDで候補の中から最適なものを選択。その後、各候補を使用した場合に得られた報酬の平均値を、その候補の適応度*4としてGA部分を一世代進める、という処理の流れです。
まぁ、GA部分は候補を複数生成出来れば良いだけですし、UCB1-TUNED部分も複数の候補の中から最適なものを選べれば良いだけなんで、例えば「PSO + εグリーディー」 とか 「免疫アルゴリズム + UCB1」とかって構成でもいけるかもしれません。この辺はGA + UCB1-TUNEDがうまく動かなかったら検討します。
さて、そういう訳で自分の中では整理出来たんで、そろそろ実装に入ります。