Differentiable Neural Computersの実装

で書いた通り、ワーキングメモリモジュールを持つ探索マネージャについて考えている。

 ワーキングメモリモジュールとしては

あたりが可能性ありそうなのかなと思うところ。調べているとLSTMに木構造的なものを導入する研究もある1,2

 とりあえず今回はDifferentiable Neural Computer(DNC)を実装してみて、単純なタスクで上手くいくのかどうかを確かめてみた。

実装

 DNCの実装では、コントローラ部分にもLSTMを使うようではあったが、LSTMを使ってしまうと以降の部分が間違っていてもそこで学習できてしまう可能性を危惧してとりあえず普通の全結合層とした。

実験

 やったタスク : 10種類の記号(1~10)の系列をOnehotベクトルとして入力し、それらとは別の「入力終了」を示す記号(-1)が入ってきたタイミングから、それまでの入力と全く同じ記号系列を出力する。-1以降の入力は0(Onehotベクトルとしてもどの要素も経っていない0)。

入力: 3,4,1,2,-1,0,0,0
正答: X,X,X,X,3,4,1,2(Xは何でも良い)

 系列長は4から7まで一様ランダムに生成。記号も1~10でランダムに生成。長さが揃ってないというのもあってバッチ学習とかはせず1系列ごとに学習。

実験結果

f:id:tokumini:20200701115259p:plain

 DNCの方もなんだか学習出来ている気配はあるが、非常に不安定でなにか実装ミスがあるのではないかと疑いたくなるところ。

 いろいろ考えているうちに実はメモリモジュールにこだわる必要がなく、ただの時系列モデルを使えれば良いのではないかと思えてきたところもあるので、とりあえずLSTMで上手くいくかを試してみることを優先するのが次の工程か。