私はニューラル ネットワークが初めてで、LSTM をゼロから作成しています。順伝播は機能していますが、訓練されたモデル、逆伝播、およびメモリ管理のコンテキストでの順伝播の移動部分についていくつか質問があります。
したがって、現在、順方向伝播を実行すると、新しい列f_t, i_t, C_t, h_t, etc
が対応する配列に積み上げられ、bptt 勾配計算のために以前の位置が蓄積されます。
私の質問は4つの部分です:
1)合理的に長期の記憶を保持するためには、どのくらい前にさかのぼる必要がありますか? (メモリを 20 ~ 40 時間ステップ戻すことは、おそらく私のシステムに必要なものです (ただし、より長い期間の恩恵を受けることができますが、これはまともなパフォーマンスのための最小値にすぎません)。今、私はそれを機能させることができます)
2)モデルが「トレーニング済み」であると考えたら、次の値を計算するために必要な 2 つ以上の時間ステップを保持する理由はありますか? C
h
(C_t
はセルの状態で、h_t
は LSTM ネットの最終出力です) その場合、順伝播関数の複数のバージョンが必要になります
3)トレーニングする時系列データが限られており、モデルをトレーニングしたい場合、モデルのパフォーマンスは、トレーニング データで何度もトレーニングするときに収束します (最大平均パフォーマンスの周りで振動するのに対して)。 ? また、ドロップアウトを実装すると収束しますか?
4)勾配のいくつの要素を考慮する必要がありますか? さまざまな行列の勾配を計算すると、時間ステップ t で一次寄与が得られ、時間ステップ t-1 で二次寄与が得られます (そして、計算は t=0 までずっと繰り返されます)。(言い換えると、一次寄与が勾配計算を支配しますか? 時間ステップを逆伝播するときに再帰の実装を保証するのに十分な二次成分のために勾配が変化しますか...)