LSTMを用いた探索的NNの学習:単純なLSTM

 以下の続き。

 前回はLSTMによくわからない工夫を入れることで探索(?)回数が増えると損失が落ちる結果を得ることができた。

 今回はもっと単純に本当にLSTMだけを使うものと比較する。

手法

 余計な部分を加えず、LSTMで単純に規定回数だけ推論してから出力する。便宜上、LSTMで推論させる回数を探索回数と呼ぶことにする。

 PyTorchにおいてLSTMはnum_layersという引数でLSTMの層をどれだけ重ねるか制御できるが、今回はnum_layers=2で実験を行った。

 入力としては常にルート局面を事前学習したEncoderにかけて得られた同じ表現ベクトルを与える。

f:id:tokumini:20200924094730p:plain

 以下の論文でやっていることに近いと思われる。現状で相違点としては

  • Conv-LSTMではなく単純なLSTMであること
  • LSTM内の一番奥から手前へのTop-down skip connectionがないこと
  • LSTMの状態を前状態から引き継がないこと

があると認識している。1,2個目はあまり重大ではないかもしれないが、3つ目はやや大きい違いかもしれない。

 以前読んだときのメモ

実験結果

f:id:tokumini:20200924075202p:plain

 綺麗に層が分かれて、なかなか良い結果に見える。

 10回探索後の検証損失を前回の手法(LSTM+α)と比較すると次のようになった。

f:id:tokumini:20200924075217p:plain

 終始、今回の単純なLSTMモデルの方が良い値となった。

 横軸に学習時間を取ってプロットしても以下のように前回の手法よりも短い時間で済んでいることがわかるので、計算量が増えているということもない。

f:id:tokumini:20200924080115p:plain

 最終ステップでの検証損失を比較すると

f:id:tokumini:20200924075237p:plain

となり、単純なLSTMではなだらかに下がっていっていることがわかる。

検証対局

 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
SimpleLSTM 0 33.9% -116.4 0.701362
SimpleLSTM 10 37.6% -87.6 0.658220

 探索回数0→10で改善はしているが、損失値のわりには弱い。やっぱり検証対局が損失と相関しない印象がある。

所感

 入力に常に同じものを与えるLSTMというのは結局SkipコネクションがあるフィードフォワードNNと変わらないようにも思える。「探索回数を増やす=ネットワークの層を増やす」ということになっているならばそれに伴って損失が小さくなることも納得できる。となると単純に層を増やした探索なしモデルと比較してみるべきか。

 手法のところで挙げた論文を読んだメモでは、プランニングの特徴として

  1. 様々な状況に対して簡単に一般化可能
  2. 少量のデータから効率的に学習可能
  3. 思考時間が伸びるほど性能向上

というものを挙げている。個人的には3が一番重要だと思っているが、今回の結果ではわりと早い段階で頭打ちになっている。今後はそこの改善を目指していきたい。