KerasでステートフルとステートレスのLSTMの違いを概念化するのに苦労しています。私の理解では、各バッチの最後に、ステートレスの場合は「ネットワークの状態がリセット」されますが、ステートフルの場合は、ネットワークの状態がバッチごとに保持され、その後で手動でリセットする必要があります。各エポックの終わり。
私の質問は次のとおりです。1.ステートレスの場合、状態がバッチ間で保持されない場合、ネットワークはどのように学習しますか? 2. LSTMのステートレスモードとステートフルモードをいつ使用するのですか?
最初にBPTT(バックプロパゲーションスルータイム)とミニバッチSGD(確率的勾配降下法)の概念を学習してから、LSTMのトレーニング手順をさらに理解することをお勧めします。
ご質問は、
Q1。ステートレスの場合、LSTMはbatch1のパラメーターを更新してから、batch2の非表示状態とセル状態(通常はすべてゼロ)を開始しますが、ステートフルの場合、batch1の最後の出力非表示状態とセル状態を、batch2の初期状態として使用します。
Q2。上記のように、2つのバッチ内の2つのシーケンスに接続がある場合(たとえば、1つの株の価格)、ステートフルモードを使用するほうが適切です。それ以外の場合(たとえば、1つのシーケンスが完全な文を表す)、ステートレスモードを使用する必要があります。
ところで、@ vu.phamはif we use stateful RNN, then in production, the network is forced to deal with infinite long sequences
。これは正しくないようですが、実際には、Q1のLSTM WO N'Tでシーケンス全体を学習します。最初にバッチ1でシーケンスを学習し、パラメーターを更新してから、バッチ2でシーケンスを学習します。
ネットワークは引き続き、すべてのバッチでアイテムiとアイテムi + 1から接続を学習します。したがって、ステートレスRNNを使用する場合、シリーズを複数のセグメントに分割することがよくあります。各セグメントは長さNです。これらのセグメントをネットワークにフィードすると、以前のすべての知識を基に次の要素を予測することが学習されます要素。
ほとんどの人は実際にはステートレスRNNを使用していると思います。なぜなら、ステートフルRNNを使用すると、実稼働環境ではネットワークが無限の長いシーケンスを処理する必要があり、これが扱いにくい場合があるためです。