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.
Antworten:
Wenn Sie Ihre Fragen verstehen, verketten Sie im Grunde genommen die Eingabe, den vorherigen verborgenen Zustand und den vorherigen Zellenstatus und leiten sie durch eine oder mehrere vollständig verbundene Schichten, um den verborgenen Ausgabezustand und den Zellenstatus zu berechnen, anstatt "gated" unabhängig zu berechnen "Aktualisierungen, die arithmetisch mit dem Zellenstatus interagieren. Dies würde im Grunde eine reguläre RNN erzeugen, die nur einen Teil des verborgenen Zustands ausgibt.
Der Hauptgrund, dies nicht zu tun, besteht darin, dass die Struktur der Zellzustandsberechnungen von LSTM einen konstanten Fehlerfluss durch lange Sequenzen gewährleistet . Wenn Sie Gewichte zur direkten Berechnung des Zellzustands verwendet haben, müssen Sie diese bei jedem Zeitschritt zurückpropagieren! Das Vermeiden solcher Operationen löst weitgehend verschwindende / explodierende Gradienten, die ansonsten RNNs plagen.
Darüber hinaus ist die Möglichkeit, Informationen über längere Zeiträume problemlos zu speichern, ein guter Bonus. Intuitiv wäre es für das Netzwerk viel schwieriger, von Grund auf zu lernen, um den Zellzustand über längere Zeiträume zu erhalten.
Es ist erwähnenswert, dass die häufigste Alternative zu LSTM, die GRU , in ähnlicher Weise Aktualisierungen verborgener Zustände berechnet, ohne Gewichte zu lernen, die direkt auf den verborgenen Zustand selbst wirken.
quelle
Wenn ich richtig verstanden habe, laufen Ihre beiden Fragen darauf hinaus. Zwei Stellen, an denen wir sowohl Tanh als auch Sigmoid zur Verarbeitung der Informationen verwenden. Stattdessen sollten wir ein einziges neuronales Netzwerk verwenden, das alle Informationen aufnimmt.
Ich kenne die Nachteile der Verwendung eines einzelnen neuronalen Netzwerks nicht. Meiner Meinung nach können wir ein einzelnes neuronales Netzwerk mit Sigmoid-Nichtlinearität verwenden, das den Vektor korrekt lernt, der angemessen verwendet wird (im ersten Fall im Zellzustand hinzugefügt oder im zweiten Fall als versteckter Zustand weitergegeben).
So wie wir es jetzt machen, teilen wir die Aufgabe in zwei Teile, einen Teil, der die Sigmoid-Nichtlinearität verwendet, um die Menge der zu speichernden Daten zu lernen. Der andere Teil, der Tanh als Nichtlinearität verwendet, besteht lediglich darin, die wichtigen Informationen zu lernen.
In einfachen Worten, Sigmoid lernt, wie viel gespart werden muss, und Tanh lernt, wie man spart. Wenn Sie es in zwei Teile teilen, wird das Training einfacher.
quelle