DQNを用いて
DQNはMiniMaxやモンテカルロなど、先読みが不可能であるテレビゲームの攻略などには使われていますが、ボードゲームのように評価の探索が可能である場合には使う必要性は薄いかと思われます。
今回はオリジナルゲームであるため教師データはなく、どのような考え方で実装すればいいのかわかりません。
強化学習の考え方としては、とりあえずわからない部分は、最終結果から判断して学習させるというものです。
例えば、対局させてその対局中に現れた全ての局面を記憶しておきます。
そして勝った場合は、その局面全てを正しいものとして正解ラベルを与えて学習させていきます。
負けた場合は、その逆の事を行います。
勝ったとしても、その全てが正しい行動であるとは限りませんが、それを繰り返していく事で、勝ちのパターンを見つけていく事が出来るという感じです。
データの性質は違うかもしれませんが、大まかにはただの教師あり学習と同じです。
ソルバーというゲームがどのようなものかはわかりませんが、オセロ、チェス将棋などのボードゲームのようなものだと仮定してもう少し詳しく実装に触れてみます。
1.出力層にはTanh関数を使う。
-1であれば自分の勝率は0% 1であれば自分の勝率は100%として表現します。
sigmoid関数よりも強い勾配を得られるので、学習がしやすいです。
ただし重みが大きくなると-1か1しか返さなくなるので、l2ノルムやBatchNormalizationなどを使う事をお勧めします。
AlphaGoZeroでは両方使われています。
2.MiniMaxで先読みした評価値を学習させる(DQNでいうQ値なようなもの)。
より少ない探索で正しい評価が出来るように必要です。
一手指す毎、もしくは一局終わる毎に学習させていきます。
AlphaGoZeroではモンテカルロ法(PUCTアルゴリズム)で8回探索する毎に学習が行われています。
(教師データのサイズは81919 トータル探索数は1600回)
この時に局面をランダムで回転させる事で、局面が回転しても同じである事を教えています。
3.最終結果から学習させる。(正解ラベルは負けなら-1 勝ちなら1を与えます)
一局毎もしくは、ある一定の試合数を行う毎に学習させていきます。
AlphaGoZeroでは、50万局毎に全ての局面を用いて、ミニバッチ学習を行っています。
(最適化手法はMomentum ミニバッチサイズは2024 イテレーション数は1000)
先読み探索で得られた評価値 + 最終結果からの学習を何かしらのタイミングで学習させていく感じですね。この辺りは完全に模倣しようとせず、手探りや好みで決めてもいいと思います。
ちなみに以下リンクでは、Q値(先読み探索の評価値)の学習とゲーム結果の学習のバランスを変える事でAlphaGoZeroよりもいい結果が得られたという報告があります。
http://tadaoyamaoka.hatenablog.com/entry/2018/07/01/121411
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/23 09:50
2018/08/23 12:33
2018/08/23 13:34
2018/08/23 13:34