LSTMを用いた探索的NNの学習

 以下の続き。

 前回はMCTSNetの学習方法を工夫することで上手く学習できた。

 今回はそれに対する提案手法に近いものとして、LSTMを用いてGPU上のみで探索的な振る舞いを可能にするモデルについて実験を行った。

手法

f:id:tokumini:20200923143240p:plain

 Simulation Policyに相当するLSTMは状態の表現ベクトルを系列的に受け取り、探索する行動の表現ベクトルを出力する。行動の表現ベクトルというのはただの個人的な解釈であり、特定の行動と結びつくようになにか制約を入れているわけではない。

 Env Model(環境モデル)は全結合NNであり、状態表現ベクトルと行動表現ベクトルを連結したものを入力して次の状態表現ベクトルを出力する。これもまた個人的な解釈であり、再構成誤差等の制約を導入しているわけではない。

f:id:tokumini:20200923143226p:plain

 最終決定はSimulation Policy用LSTMとはまた別のReadout用LSTMにより、状態表現ベクトルの系列を入力して最後に方策を出力する。

実験設定

 オセロでの学習を施行した。

 EncoderはMCTSNetの学習と同様に、普通のMLPモデルで事前学習したパラメータを用いて、学習しないように凍結した。

 MCTSNetに比べて高速なので10倍のステップ数で学習を行った。

実験結果

f:id:tokumini:20200923143823p:plain

 1回探索した時点で大きく下がり、学習後半では2回探索した時点でもやや下がる。それ以降ではほぼ変わらない。

 最終ステップ時点での検証損失をプロットすると次のようになる。

f:id:tokumini:20200923143832p:plain

 見事に2回目以降はX軸に並行となっている。

 興味深い点として、事前学習での最終的なPolicy損失が0.853867であったのに対して、今回の学習では0回目時点で0.784351とそれより小さくなっている。事前学習はややチューニング不足ではあるので、しっかりやればこの程度はいくかもしれないが、今回の学習の2回探索時点では0.661485となっており、ここまで通常のMLPで学習させるのは困難に思える。つまり、損失値としては非常に良い値が出た。

検証対局

 前回のMCTSNetと合わせてEdax Level1と対局した。それぞれ1000局行った。

手法 探索回数 勝率 レート差 参考(損失値)
MCTSNet 0 35.6% -102.6 0.833593
MCTSNet 10 37.9% -86.0 0.812401
LSTM 0 36.0% -100.0 0.784351
LSTM 10 39.9% -71.5 0.661252

 一応どちらも探索を入れた方が勝率は上がっているが、それほど損失値と対応したレート値にはなっていない。EdaxのLevelも1という低いものであり、この検証対局での勝率が指標として良いものかどうかはわからない。

 (AlphaZeroのように強化学習してMCTSを行う手法では800回の探索でEdaxのLevel 6と同程度の性能になる)。

分析

 今回の学習で得られたパラメータについて探索中に得られた表現ベクトルについて値を検証した。

 初期局面に対する探索について、表現ベクトルを1回前の探索時点の表現ベクトルからどの程度変わったかを調べた。

f:id:tokumini:20200923150007p:plain

 Y軸は対数となっており、要するに探索すればするほど表現ベクトルが大きく変わっていくということになっている。要素平均値が1000も変わるというのは尋常ではない変わり方であり、まともな挙動とは言い難いように思える。

 それだけ変わると状態表現ベクトルもおかしい値になっていそうだが、Policyに影響は出ていない。おそらくLSTM部分でほとんど入力が受け付けられていない(Input gateがほとんど0になっている)のではないか。

所感

 上手くいっているんだかいってないんだかよくわからない結果となったが、可能性はありそうに感じる。いろいろ正則化を入れてどうなるか、モデルの構造を工夫してどうなるかといったところを検証してみたい。

 一応、今回の結果を信頼するならば、AlphaZeroモデルの評価関数部分をこのLSTM的なもので置き換えるだけで性能向上ということがあり得るのかもしれない。評価する時点でネットワークで小探索をして、その出力を使ってさらにMCTSするという感じになるのか?