以下の続き。
前回はMCTSNetの学習式に従って実験したが、結果は振るわなかった。学習の挙動などを見ていて、個人的な印象としてはSimulation Policyを方策勾配法のような形で学習していくのは難しいように感じている。
具体的な要因としては、特に学習序盤でSimulation Policyが変に学習されてしまうと考えている。Simulation Policyは0回目からm回目までの探索で損失が改善した量を報酬として学習するわけだが、学習序盤では損失値はたいてい次のようになる。(以下は実際の学習で得られた値)
0回後 | 1回後 | 2回後 | 3回後 | 4回後 | 5回後 | 6回後 | 7回後 | 8回後 | 9回後 | 10回後 |
---|---|---|---|---|---|---|---|---|---|---|
1.862 | 1.911 | 2.014 | 2.197 | 2.435 | 2.735 | 3.104 | 3.492 | 3.783 | 3.983 | 4.137 |
Policyを事前学習しているので0回後の損失値はそこそこ良いものになっている一方で、Backupネットワークは事前学習できないので探索すればするほど損失値は悪くなる。つまり序盤ではどんな探索行動を取っていても悪化するというシグナルしか与えられない。
方策勾配法が必要になるのはSimulation Policyを学習させるためだが、つまりSimulation Policyなんてものがなければ妙なことはしなくて済む。探索中に用いるSimulation Policyと最終決定で用いるReadout Policyが異なるというのは納得できる話なのだが、実践的に学習を安定化させるためには両者に同一のものを使ってしまうのが良いと考えた。
まとめると改善案として次の2つの工夫を加えた。
- Simulation PolicyとReadout Policyに同じパラメータを用いる
- 学習方法を0回目からm回目までの各探索後のReadout結果と教師の交差エントロピーのみに変更する
実験
- 教師あり学習でEmbedネットワークおよびPolicyネットワークを事前学習
- Backupネットワークを追加して学習(このときEmbedネットワークは凍結する)
という手順で実験を行った。将棋ではfloodgateの棋譜を用い、オセロでは以前山岡さんが記事に書いていたサイトの棋譜を利用した。
将棋
検証損失の推移は以下のようになった。
6万ステップを超えたタイミングで学習率を1/10にしており、そこからの減少で本当に少しだけ損失が改善するようになった。
一番最後の検証損失は横軸に探索回数を取ってプロットすると次のようになっている。
3回目までは下がっていき、それ以降は上がってしまっている。
MCTSNetの学習により0回目の損失値がやや悪化しているのだが、事前学習での検証損失は1.877444であるのに対して3回目での損失値は1.877302なので一応小さいことは小さい。しかし誤差レベルか。
オセロ
検証損失の推移は以下のようになった。
オセロの方が学習が上手くいっている。3万ステップを超えたタイミングで学習率を1/10にしてからかなり差が出た。
一番最後の検証損失は横軸に探索回数を取ってプロットすると次のようになっている。
とても綺麗な形で右肩下がりになっている。疑わしいくらいに理想的な結果だ。
事前学習との比較では、オセロでの事前学習の検証損失は0.853867なのでそもそも0回後の時点で改善がされている。事前学習のチューニングが甘く、収束しきっていない状態からMCTSNetの学習を始めてしまっているかもしれない。
まとめ
将棋では微妙だがオセロでは効果がありそうだという結果が得られた。以前も少し考察した通り、10回程度の探索が有効に機能するシーンが多そうなのは将棋よりもオセロのように感じている。将棋でも大駒をタダで捨ててしまう局面などでは有効かもしれないが、全体から見てそういう局面があまり多くないのではないか。オセロは最終盤でほぼ毎回有効に機能すると思われる。
上手くいったとはいえ今回の手法はかなりMCTSNetの主張を無視しているのでこれで再現できたと言い張ってよいものかどうか。むしろこれで上手くいくならなぜMCTSNetはSimulation Policyを導入して複雑化したのだろうという気にもなるが、Simulation Policyを用いてランダムプレイアウトする由緒正しいMCTSの影響が強かったということなのだろうか。
今後はオセロで実際に対局してみて性能が上がっているかどうかの検証や、どういう局面で損失が改善されているかなどの分析を行っていきたい。