2016-09-24 3 views
7

ケラスのステートフルLSTMとステートレスLSTMの違いを概念化するのは難しいです。私の理解では、各バッチの終わりには、ステートレスの場合、ネットワークの状態は各バッチごとに保持されるのに対し、ステートレスの場合は「ネットワークの状態がリセットされます。各エポックの終わり。ケラスステートフルステートレスLSTM

私の質問は次のとおりです: 1.ステートレスの場合、状態がバッチの間に保存されていない場合、ネットワークはどのようにして学習していますか? 2. LSTMのステートフルモードとステートフルモードはいつ使用されますか?

答えて

7

私は、あなたはLSTMのトレーニング手順の更なる理解を持っているよ、あなたはまず、ミニバッチSGD(確率的勾配降下)(時をバックプロパゲーション)BPTTの概念を学ぶことをお勧めします。

Q1。ステートレスの場合、LSTMはバッチ1のパラメータを更新し、次にバッチ2の隠しステートとセルステート(通常はすべてゼロ)を開始します。ステートフルの場合は、batch1の最後の出力隠しステートとセルステートをbatch2の初期ステートとして使用します。

Q2。上記のように、2つのバッチの2つのシーケンスに接続(たとえば、1つの在庫の価格)がある場合は、ステートフルモードを使用してください。そうでない場合(たとえば、1つのシーケンスが完全な文を表します)

BTW、@ vu.pham said if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences。これは正しいとは限りませんが、Q1で見ることができるように、LSTM ではありません。全体シーケンスについて学ぶには、まずbatch1でシーケンスを学習し、パラメータを更新してからbatch2でシーケンスを学習します。

+0

LSTMが「ステートフル」の場合、以前のバッチに関する情報は隠し状態で保存されるため、バッチ1の更新はバッチ1に依存する必要があります。 ? (これはバニラのRNNの切り捨てられたBPTTと見なされると私は思うが、バックプロップはわずかな時間ステップを使用するが、RNNは依然として勾配が計算されるシーケンスの長さよりも長い依存性を学ぶことができる) –

4
  1. ネットワークは、依然として、すべてのバッチでアイテムiとアイテムi + 1からの接続を学習します。したがって、ステートレスRNNを使用することに決めた場合は、シリーズを複数のセグメントに分割し、各セグメントの長さをNにします。これらのセグメントをネットワークにフィードすると、以前のすべてのセグメントについての知識要素。

  2. ステートフルなRNNを使用すると、実際にはネットワークが無限の長いシーケンスに対処する必要があり、処理が面倒になることがあるため、ほとんどの人がステートレスRNNを使用していると思います。