Warum werden die Gewichte von RNN / LSTM-Netzwerken über die Zeit hinweg geteilt?

20

Ich habe mich kürzlich für LSTMs interessiert und war überrascht zu erfahren, dass die Gewichte über die Zeit verteilt sind.

  • Ich weiß, dass, wenn Sie die Gewichte über die Zeit teilen, Ihre Eingabezeitsequenzen eine variable Länge haben können.

  • Mit geteilten Gewichten müssen Sie viel weniger Parameter trainieren.

Nach meinem Verständnis liegt der Grund, warum man sich für ein LSTM im Vergleich zu einer anderen Lernmethode entscheidet, darin, dass Sie glauben, dass Ihre Daten eine Art von zeitlicher / sequenzieller Struktur / Abhängigkeit aufweisen, die Sie lernen möchten. Wenn Sie die variable Länge "Luxus" opfern und eine lange Rechenzeit akzeptieren, würde ein RNN / LSTM ohne gemeinsame Gewichte (dh für jeden Zeitschritt haben Sie unterschiedliche Gewichte) nicht eine bessere Leistung erbringen, oder fehlt mir etwas?

beeCwright
quelle

Antworten:

17

Die akzeptierte Antwort konzentriert sich auf die praktische Seite der Frage: Es würde eine Menge Ressourcen erfordern, wenn dort Parameter nicht geteilt werden. Die Entscheidung, Parameter in einer RNN gemeinsam zu nutzen, wurde jedoch getroffen, als eine ernsthafte Berechnung ein Problem darstellte (laut Wiki in den 1980er Jahren ). Ich glaube, dass dies nicht das Hauptargument war (obwohl es immer noch gültig ist).

Es gibt rein theoretische Gründe für das Teilen von Parametern:

  • Es hilft bei der Anwendung des Modells auf Beispiele unterschiedlicher Länge. Wenn das RNN-Modell beim Lesen einer Sequenz verschiedene Parameter für jeden Schritt während des Trainings verwendet, wird nicht verallgemeinert, dass Sequenzen unterschiedlicher Länge nicht angezeigt werden.

  • Häufig arbeiten die Sequenzen in der gesamten Sequenz nach denselben Regeln. Zum Beispiel in NLP:

                                                     "Am Montag hat es geschneit"

                                                     "Es hat am Montag geschneit"

... diese beiden Sätze bedeuten dasselbe, obwohl sich die Details in verschiedenen Teilen der Sequenz befinden. Die Parameterfreigabe spiegelt die Tatsache wider, dass wir bei jedem Schritt dieselbe Aufgabe ausführen, sodass wir die Regeln nicht an jedem Punkt im Satz neu lernen müssen.

LSTM unterscheidet sich in diesem Sinne nicht und verwendet daher auch gemeinsame Parameter.

Maxime
quelle
4
Dies ist bei weitem der wichtigere Grund als die akzeptierte Antwort!
4.
Ich glaube, meine Antwort wurde hier falsch charakterisiert. Ich sagte, dass mehr Rechenressourcen erforderlich wären, ohne das Gewicht zu teilen, aber dies war nicht als Hauptziel gedacht. Insbesondere habe ich auch geschrieben, dass ein Modell ohne geteilte Gewichte wesentlich flexibler und damit anfälliger für Überanpassungen wäre. Das Teilen von Gewichten im Laufe der Zeit ist ein Weg, dies zu überwinden. Wie hier zu Recht ausgeführt, entspricht diese Strategie dem "Prior", dass bei jedem Zeitschritt dieselben Regeln gelten. Die beiden Antworten stimmen also nicht überein.
user20160
12

Die Perspektive der "geteilten Gewichte" beruht darauf, dass RNNs als Feedforward-Netzwerke betrachtet werden, die im Laufe der Zeit abgewickelt werden. Wenn die Gewichte zu jedem Zeitpunkt unterschiedlich wären, wäre dies nur ein Feedforward-Netzwerk. Aber ich nehme an, eine andere Möglichkeit wäre eine RNN, deren Gewichte eine zeitvariable Funktion sind (und die es Ihnen ermöglichen könnte, Sequenzen mit variabler Länge zu verarbeiten).

Wenn Sie dies tun, wächst die Anzahl der Parameter linear mit der Anzahl der Zeitschritte. Das wäre eine große Explosion von Parametern für Sequenzen von jeder nennenswerten Länge. Es würde das Netzwerk in der Tat leistungsfähiger machen, wenn Sie über die enormen Rechenressourcen für die Ausführung und die enormen Daten für die Einschränkung verfügen würden. Für lange Sequenzen wäre es wahrscheinlich rechenintensiv und Sie würden überanpassen. Tatsächlich laufen die Leute normalerweise in die entgegengesetzte Richtung, indem sie eine verkürzte Backpropagation durch die Zeit ausführen, wodurch das Netzwerk nur für einen kurzen Zeitraum und nicht über die gesamte Sequenz abgewickelt wird. Dies erfolgt aus Gründen der rechnerischen Durchführbarkeit. Interessanterweise können RNNs immer noch eine zeitliche Struktur erlernen, die über die Kürzungslänge hinausgeht, da die wiederkehrenden Einheiten Speicher von früher speichern können.

user20160
quelle
Wenn Sie keine Gewichte teilen, haben Sie immer noch den Zellstatus, der über die Zeit erhalten bleibt. Ein nicht gerollter LSTM mit eindeutigen Zeitgewichten würde wie ein Feedforward-Netz aussehen, in dem jede "Schicht" eine Zeitscheibe darstellt, aber jede "Schicht" eingehende Zellzustandsinformationen enthält. Es würde einer Vorwärtskopplung ähneln, jedoch mit der Hinzufügung des Zellenzustands.
BeeCwright
0

Ich denke, da die RNNs mit versteckten zu versteckten Wiederholungen (und zeitlich geteilten Gewichten) den Universal Turing Machines entsprechen, macht es sie nicht leistungsfähiger, wenn sie für verschiedene Zeitschritte unterschiedliche Gewichte haben.

Hossein
quelle
Könnten Sie näher erläutern, was Sie unter "mächtig" verstehen? Der Verweis auf Turing Machines legt nahe, dass sich Ihre Vorstellungen möglicherweise grundlegend von denen in der Statistik unterscheiden.
Whuber
Die RNNs werden zur Verarbeitung von Datensequenzen verwendet. Einer ihrer gebräuchlichsten Typen erhält eine Sequenz als Eingabe und erzeugt eine andere Sequenz als Ausgabe (z. B. Sprachübersetzungssysteme). Ich sage, dass eine RNN-Modellfamilie M1 leistungsfähiger ist als eine andere RNN-Modellfamilie M2, wenn es für ein Problem (z. B. die Zuordnung eines Satzes von Eingabesequenzen zu einem Satz von Ausgabesequenzen) in M1 ein Modell m1 gibt, mit dem dieses Problem gelöst werden kann In M2 gibt es jedoch kein Modell, mit dem sich dieses Problem lösen lässt.
Hossein