とりあえず試しで回した学習が一通り終わったので結果をまとめる。
実験設定
将棋での教師あり学習でモデルの学習を行い、Policy損失を比較した。
比較手法
- 探索なしの全結合ネットワーク
- MCTSnet
- 提案手法
- Stacked LSTM(Deep Repeated ConvLSTMを意識したもの)
各手法の詳細
前提
4つの手法はどれも同じアーキテクチャの状態エンコーダを用いる。これは3つの残差ブロックの(6層CNN)からなり、将棋の盤面を次元の表現ベクトルへと変換する。
1.探索なしの全結合ネットワーク
先のエンコーダによって得られた表現ベクトルを全結合層に入力し、次元で表される行動について方策を得る。
2.MCTSnet
先のエンコーダによって得られた表現ベクトルをMCTSnetにおけるEmbedネットワークとして利用し、それ以降はMCTSnetの動作に従う。
3.提案手法
先のエンコーダによって得られた表現ベクトルをLSTMに対する入力とし、そこから探索方策用LSTMを用いて方策を出力し、最大の確率を持つ行動を選択し、次の状態に移る。ここで探索方策は一局面戻るという行動も付け加えており、2188次元の出力を持つ。
最終的に得られた表現ベクトルの系列全体を最終決定用LSTMに全て入力し、実際に取るべき行動を選択する。ここでは一局面戻るという選択肢はないため出力は2187次元となる。
4.Stacked LSTM
先のエンコーダによって得られた表現ベクトルを最初だけLSTMに入力し、以降は方策RNNと遷移モデルRNNと見なす2つのLSTMによってLSTMの推論のみで探索のようなことを行う。
厳密にはDeep Repeated ConvLSTMとは違うところが多いが、探索という行為をLSTMに全て任せるということを試すために比較手法として採用した。
学習方法
探索なしの全結合ネットワーク
単純にネットワークが出力した方策と正解ラベルから交差エントロピーを算出し最小化
MCTSnet、提案手法、Stacked LSTM
10回の探索(MCTSnetの場合はシミュレーション)を行い、各回の探索後にReadout方策を計算してそれと正解ラベルから交差エントロピーを算出し、最小化
MCTSnetの正しい学習方法とは異なるが、学習条件を平等に揃えることを重視した。
実験結果
全体の結果
simple mlpの性能が妙に低くて違和感がある。やはりバッチサイズ1だと性能が悪くなってしまうのだろうか。また他のネットワークは同じ局面を10回の探索分学習しているので、擬似的に10倍の学習をしているとも考えられる。
学習は全て3Mステップで統一したが、横軸をかかった時間でプロットすると次のようになる。
時間で見ればsimple mlpも悪くはないのでやはり学習量の問題なのかもしれない。
個別の結果
MCTSNet
シミュレーション回数が1回だろうが10回だろうがほとんど損失の値が変わらない。
提案手法
探索回数(遷移回数)が増えるとむしろ性能が落ちる。全然ダメ。
Stacked LSTM
探索回数(遷移回数)が1回よりは2回以上のほうが良くなっているところがあるが、探索回数が多くなればなるほど下がるという傾向は見られない。
結論
全体的にそもそも学習があまり上手くいっていない感じがあった。バッチサイズ1というのが難しいのかもしれない。学習のバッチ化は各手法でそれぞれ個別に実装しなければいけなさそうなので実装量が重い気がしている。次はとりあえずBatch Norm以外のものを試してみる予定。
BN以外の小さいバッチサイズ向けの正規化は駄目なんでしょうか https://t.co/ZOn5eKzk3H
— zakki (@k_matsuzaki) 2020年7月23日
またエンコーダ部分は事前学習してフリーズさせるのも再検討してみたい。表現ベクトルの次元数も、32chなので小さいように思えるがこれにボードサイズの9×9がかかると意外と大きくなるということに気がついていなかったのでこのあたりも変えてみるか。