2016-09-24 18 views
7

Ich habe eine harte Zeit, den Unterschied zwischen Stateful und Stateless LSTMs in Keras zu konzeptualisieren. Mein Verständnis ist, dass am Ende jedes Stapels der "Status des Netzwerks im zustandslosen Fall zurückgesetzt wird", wohingegen für den statusbehafteten Fall der Zustand des Netzwerks für jeden Stapel erhalten bleibt und dann manuell auf dem Server zurückgesetzt werden muss Ende jeder Epoche.Keras - Stateful vs zustandslose LSTMs

Meine Fragen sind wie folgt: 1. Wie lernt das Netzwerk im zustandslosen Fall, wenn der Zustand zwischen Batches nicht erhalten bleibt? 2. Wann würde man die zustandslosen vs stateful-Modi eines LSTM verwenden?

Antwort

7

empfehle ich Ihnen zunächst die Konzepte der BPTT (Back Propagation Through Time) zu lernen und Mini-Batch SGD (Stochastic Gradient Descent), dann werden Sie weitere Verständnis von Trainingsprozedur LSTM haben.

Für Ihre Fragen,

Q1. In zustandslosen Fällen aktualisiert LSTM Parameter auf Batch1 und initiiert dann verborgene Status und Zellenstatus (normalerweise nur Nullen) für Batch2, während in statusbehafteten Fällen die letzten ausgeblendeten Status von Batch1 und Zellen als Anfangszustände für Batch2 verwendet werden.

Q2. Wie Sie oben sehen können, wenn zwei Sequenzen in zwei Batches Verbindungen haben (z. B. Preise für eine Aktie), sollten Sie besser den Stateful-Modus verwenden, sonst (z. B. eine Sequenz stellt einen vollständigen Satz dar) sollten Sie den Stateless-Modus verwenden.

BTW, @ vu.pham sagte if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences. Dies scheint nicht korrekt, tatsächlich, wie Sie in Q1 sehen können, LSTM wird nicht lernen auf die gesamte Sequenz, lernt es zuerst die Sequenz in Batch1, aktualisiert Parameter, und dann lernen Sequenz auf Batch2.

+0

In Bezug auf den Hinweis, was @ vu.pham sagte ... Wenn der LSTM "stateful" ist, werden die Informationen über vorherige Stapel in den ausgeblendeten Zuständen gespeichert, also sollten die Aktualisierungen von Stapel2 von Stapel1 abhängen, nicht wahr ? (Dies ist als der abgeschnittene BPTT von Vanille RNN zu betrachten, ich denke, da der Backprop nur ein paar Zeitschritte verwendet, aber der RNN könnte immer noch lange Abhängigkeiten lernen, länger als die Länge der Sequenz, auf der Gradienten berechnet werden) –

4
  1. Das Netzwerk lernt immer noch die Verbindung von Element i und Element i + 1 in jeder Gruppe. Wenn Sie sich also für eine zustandslose RNN entscheiden, würden Sie Ihre Serie sehr oft in mehrere Segmente mit jeweils Länge N teilen. Wenn Sie diese Segmente in das Netzwerk einspeisen, lernen Sie trotzdem das nächste Element aufgrund seines Wissens über alle vorherigen Elemente vorherzusagen Elemente.

  2. Ich glaube, dass die meisten Leute stateless RNN in der Praxis verwenden, denn wenn wir Stateful RNN verwenden, dann ist das Netzwerk in der Produktion gezwungen, mit unendlich langen Sequenzen zu arbeiten, und dies könnte umständlich sein.