Was ist die Intuition hinter einem wiederkehrenden neuronalen Netzwerk mit langem Kurzzeitgedächtnis (LSTM)?

11

Die Idee hinter Recurrent Neural Network (RNN) ist mir klar. Ich verstehe es folgendermaßen:
Wir haben eine Folge von Beobachtungen ( o1,o2,,on ) (oder mit anderen Worten multivariate Zeitreihen). Jede einzelne Beobachtung oi ist ein N dimensionaler numerischer Vektor. Innerhalb des RNN-Modells nehmen wir an, dass die nächste Beobachtung oi+1 eine Funktion der vorherigen Beobachtung oi sowie des vorherigen "verborgenen Zustands" hi, 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:

oi,hi=F(oi1,hi1)

Schließlich wird im RNN-Modell angenommen, dass die Funktion F 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:

ci

ci+1=ω1(oi,hi)ci+ω2(oi,hi)cint(oi,hi),

ω1ω2cint

ci+1=ω1ci+ω2cint

cici1cint

ω2ω1ω1ω1ω2

oihihint

hi+1=hintS(ci+1),

S

Meine Frage lautet also: Warum (oder wie genau) löst diese Architektur das Problem?

Insbesondere verstehe ich Folgendes nicht:

  1. 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?
  2. 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.

römisch
quelle
1
Sie scheinen LSTMs besser zu verstehen als ich, daher werde ich keine tatsächliche Antwort veröffentlichen, da dies möglicherweise nicht das ist, wonach Sie suchen: Die LSTM-Gates (hauptsächlich die Vergessens-Gates) ermöglichen es, Aktivierungen und Verläufe so lange beizubehalten wie nötig. So können Informationen zum Zeitpunkt t für beliebig große n bis zum Zeitpunkt t + n verfügbar gehalten werden.
rcpinto
@rcpinto, ich denke auch, dass die Hauptidee hinter der vorgeschlagenen "Architektur" darin besteht, Informationen für lange Zeit (viele Zeitschritte) aufzubewahren. Aber ich verstehe nicht, was genau es möglich macht. Die beiden Gates-Netzwerke ("keep" und "write") lernen möglicherweise, dass Keep-Gewichte groß und Schreibgewichte klein sein sollten (dann behalten wir den Speicher für lange Zeit). Aber kann das nicht nur durch ein Netzwerk erreicht werden? Kann ein neuronales Netzwerk (das den verborgenen Zustand (Speicher) und den beobachtbaren Zustand als Eingabe verwendet) nicht lernen, dass der verborgene Zustand ohne Änderungen beibehalten werden sollte?
Roman
Stellen Sie einfach die wiederkehrende Gewichtsmatrix auf die Identität ein und sie behält immer die letzte Aktivierung bei. Das Problem ist der immer Teil, was bedeutet, dass sich neue Eingaben ansammeln und die Neuronenaktivierung schnell sättigen, was auch eine Art Vergessen ist. Daher ist die Fähigkeit, einen vorherigen Speicher zu löschen oder die Bildung neuer Speicher zu blockieren, von entscheidender Bedeutung.
rcpinto
@rcpinto, aber kann die "Fähigkeit, einen vorherigen Speicher zu löschen oder die Bildung eines neuen zu blockieren" nicht innerhalb eines einzelnen neuronalen Netzwerks erreicht werden? Das neuronale Netzwerk erhält den Speichervektor (oder einen verborgenen Zustandsvektor) und den beobachteten Zustandsvektor als Eingabe. Kann ein solches Netzwerk nicht "entscheiden", einige Komponenten des verborgenen Zustands (seines Speichers) basierend auf den Werten der Komponenten im beobachteten Zustandsvektor beizubehalten oder zu ersetzen?
Roman
LSTMs können dies tun, da sich die Gates je nach aktuellem Eingang und Status öffnen oder schließen. In einfachen RNNs gibt es kein solches Konzept. In diesem Fall reagiert der Status selbst immer direkt und sofort auf Eingaben / Status und verhindert, dass er "wählt", ob die neuen Informationen gespeichert werden sollen oder nicht. Es gibt auch keinen Mechanismus zum Löschen eines gespeicherten Speichers. Er sammelt sich immer entsprechend den Eingabegewichten für das Neuron an, und diese Gewichte können sich nach dem Training nicht ändern. Da die LSTM-Gatter multiplikativ sind, simulieren sie Gewichtsänderungen während der Inferenz und reagieren auf den aktuellen Eingang / Zustand.
rcpinto

Antworten:

1

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.

Gianni
quelle
0

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.

Lerner
quelle