Die Idee hinter Recurrent Neural Network (RNN) ist mir klar. Ich verstehe es folgendermaßen:
Wir haben eine Folge von Beobachtungen ( ) (oder mit anderen Worten multivariate Zeitreihen). Jede einzelne Beobachtung ist ein dimensionaler numerischer Vektor. Innerhalb des RNN-Modells nehmen wir an, dass die nächste Beobachtung eine Funktion der vorherigen Beobachtung sowie des vorherigen "verborgenen Zustands" , wo verborgene Zustände auch durch numerische Vektoren dargestellt werden (Dimensionen von beobachteten und verborgenen Zuständen können unterschiedlich sein). Es wird auch angenommen, dass die verborgenen Zustände selbst von der vorherigen Beobachtung und dem verborgenen Zustand abhängen:
Schließlich wird im RNN-Modell angenommen, dass die Funktion ein neuronales Netzwerk ist. Wir trainieren (passen) das neuronale Netzwerk unter Verwendung der verfügbaren Daten (eine Folge von Beobachtungen). Unser Ziel im Training ist es, die nächste Beobachtung anhand der vorherigen Beobachtungen so genau wie möglich vorhersagen zu können.
Das LSTM-Netzwerk ist eine Modifikation des RNN-Netzwerks. Soweit ich verstanden habe, besteht die Motivation hinter LSTM darin, das Problem des kurzen Speichers zu lösen, das RNN eigen ist (herkömmliche RNN haben Probleme mit verwandten Ereignissen, die zeitlich zu weit voneinander entfernt sind).
Ich verstehe, wie LSTM-Netzwerke funktionieren. Hier ist die beste Erklärung für LSTM , die ich gefunden habe. Die Grundidee lautet wie folgt:
Meine Frage lautet also: Warum (oder wie genau) löst diese Architektur das Problem?
Insbesondere verstehe ich Folgendes nicht:
- Wir verwenden ein neuronales Netzwerk, um einen "Zwischenspeicher" (Zellzustandsvektor) zu erzeugen, der mit dem "alten" Speicher (oder Zellzustand) gemischt wird, um einen "neuen" Speicher (Zellzustand) zu erhalten. Die Gewichtungsfaktoren für das Mischen werden auch von neuronalen Netzen berechnet. Aber warum können wir nicht nur ein neuronales Netzwerk verwenden, um den "neuen" Zellzustand (oder Speicher) zu berechnen? Oder mit anderen Worten, warum können wir den beobachteten Zustand, den verborgenen Zustand und den alten Speicher nicht als Eingaben in ein neuronales Netzwerk verwenden, das den "neuen" Speicher berechnet?
- Am Ende verwenden wir die beobachteten und verborgenen Zustände, um einen neuen verborgenen Zustand zu berechnen, und verwenden dann den "neuen" Zellzustand (oder das (Langzeit-) Gedächtnis), um die Komponente des neu berechneten verborgenen Zustands zu korrigieren. Mit anderen Worten, die Komponenten des Zellenzustands werden nur als Gewichte verwendet, die nur die entsprechenden Komponenten des berechneten verborgenen Zustands reduzieren. Aber warum wird der Zellzustandsvektor auf diese Weise verwendet? Warum können wir den neuen verborgenen Zustand nicht berechnen, indem wir den Zellzustandsvektor (Langzeitgedächtnis) in die Eingabe eines neuronalen Netzwerks einfügen (das auch die beobachteten und verborgenen Zustände als Eingabe verwendet)?
Hinzugefügt:
Hier ist ein Video, das helfen kann zu verdeutlichen, wie verschiedene Gates ("behalten", "schreiben" und "lesen") organisiert sind.