Kerasのリカレントネットワークと、通常のネットワークの違いについて
KerasでSimpleRNNを用いたネットワークでは、時系列データ [x(0), x(1), ... , x(t)]を与えるのではなく、
[[x(0), x(1), x(2)],
[x(1), x(2), x(3)],
[x(2), x(3), x(4)],]
のように、時刻毎に入力データを用意し、さらに
[[x(0)], [x(1)], [x(2)]],
[[x(1)], [x(2)], [x(3)]],
[[x(2)], [x(3)], [x(4)]],]
のように変形しなければなりませんよね?
学習時だけでなく、予測時にも
[[x(10)], [x(11)], [x(12)]], # x(13)を予測
[[x(15)], [x(16)], [x(17)]], # x(18)を予測
[[x(100)], [x(101)], [x(102)]],] # x(103)を予測
のような、形式で与えなければならないと認識しています
実際、このように与えることで、RNNは正しく値を予測してくれました
しかし、入力データとして、数ステップ前の値を自分で用意するのであれば、そもそもRNNに意味はあるのでしょうか?
上記の内容を
入力データを
[[x(0), x(1), x(2)],
[x(1), x(2), x(3)],
[x(2), x(3), x(4)],]
とする、MLPに置き換えても、うまく推定できました。
KerasのRNNについて勉強する前は、fitやperdictをするたびにネットワークが前回の値を保持してくれて、入力としては現在時刻の値だけ入れればやってくれるのだと思っていました。
Layerとして、SimpleRNNを使う意味はなんなのでしょうか?