Transformerを用いた探索的NNの学習(失敗編)

 以下の続き。

 前回までの手法では多少改善は得られたものの、探索回数を増やすほど性能が良くなるような性質は得られなかった。またこのやり方では本質的にゲームであることを利用しておらず、一般的に画像認識等でも利用できるものになっており、スコープが広すぎる気がしていた。よってここのところはシミュレータを利用してきちんと盤面遷移を含める手法について検討している(単に迷走中と言ったほうが適切かもしれない)。

f:id:tokumini:20201019095735p:plain

 この雑な図で伝わるかはわからないが、今は赤枠のあたりを探っている。

 問題を簡単にするため、探索部分は事前学習したモデルを用いることにした。

f:id:tokumini:20201019102446p:plain

f:id:tokumini:20201019102514p:plain

 注意点として、このやり方だと一つの読み筋を突き進んでいくことしかできない。よって行動はSoftmax層の出力から確率的にサンプリングすることにし、数手(今回は3手)進むごとにルート局面に強制的に戻すことで深さ3の読み筋をたくさん並べることにした。

f:id:tokumini:20201019102809p:plain

 これを時系列モデル、今回はTransformerに入力することで推論をする。src側に探索の系列、target側にルート局面の分散表現を入れて、ルート局面に対するPolicyを推論させる。

f:id:tokumini:20201019103033p:plain

実験

 オセロにおける教師あり学習で実験を行った。事前学習ではPolicy損失は0.776090になった。

 Transformerの学習推移は次のようになった。

f:id:tokumini:20201019103215p:plain

 n回探索は、src側の系列長がn個であることを意味する。

 線が重なっていてさっぱり違いがわからない。つまりsrc側の情報を有効活用できていないということなのだろう。

 最終ステップでの損失を取り出してプロットすると次のようになった。

f:id:tokumini:20201019103219p:plain

 探索しないほうがマシという結果になっている。

所感

 そこまで大幅な改善を期待していたわけではないが、少しくらいは良くなるのではないかと思っていたのでこの結果は意外だし、何か実装ミスがないか不安になるところではある。特にTransformer部分は

などからコピペして、LibTorch1.6.0環境ではそのままでは動かなかったのでちょっと改造して実装したわけだが、そのあたりでミスしている可能性がなくはない。特にLibTorch1.6.0ではMultiheadattentionモジュールにバグがあり、そこも手動で直したのでそのあたりがどうか……。

 LibTorch1.7.0では直っていると思われるのでそれを待ちたいところでもあるが、修論締め切りは待ってくれない。