Erfassung von Anfangsmustern bei Verwendung der verkürzten Backpropagation durch die Zeit (RNN / LSTM)

12

Angenommen, ich verwende ein RNN / LSTM, um eine Stimmungsanalyse durchzuführen, bei der es sich um einen 1: 1-Ansatz handelt (siehe diesen Blog ). Das Netzwerk wird durch eine verkürzte Backpropagation Through Time (BPTT) trainiert, bei der das Netzwerk wie gewohnt nur für 30 letzte Schritte abgewickelt wird.

In meinem Fall ist jeder meiner zu klassifizierenden Textabschnitte viel länger als die 30 Schritte, die abgewickelt werden (~ 100 Wörter). Nach meinem Wissen wird BPTT nur einmal für einen einzelnen Textabschnitt ausgeführt, wenn es den gesamten Textabschnitt durchlaufen und das binäre Klassifizierungsziel berechnet haty , das es dann mit der Verlustfunktion vergleicht, um den Fehler zu finden.

pÖsichtichveneGeintichve beginnen mit "Ich hasse die". Wie würde das RNN / LSTM das erfassen, wenn es nur für die letzten 30 Schritte abgerollt wird, wenn es das Ende einer 100 Schritte langen Sequenz erreicht?

pir
quelle

Antworten:

11

Es ist richtig, dass eine Beschränkung der Gradientenausbreitung auf 30 Zeitschritte das Lernen verhindert alles Mögliche in Ihrem Datensatz wird. Es hängt jedoch stark von Ihrem Datensatz ab, ob dies verhindert, dass er wichtige Informationen zu den Funktionen Ihres Modells erhält.

Das Begrenzen des Gradienten während des Trainings entspricht eher dem Begrenzen des Fensters, über das Ihr Modell Eingabefunktionen und den verborgenen Zustand mit hoher Sicherheit verarbeiten kann. Da Sie Ihr Modell zum Testzeitpunkt auf die gesamte Eingabesequenz anwenden, können weiterhin Informationen zu allen Eingabe-Features in den verborgenen Zustand übernommen werden. Es kann sein, dass es nicht genau weiß , wie es diese Informationen aufbewahren soll, bis es seine endgültige Vorhersage für den Satz trifft, aber es gibt möglicherweise einige (zugegebenermaßen schwächere) Verbindungen, die es noch herstellen kann.

Denken Sie zuerst an ein erfundenes Beispiel. Angenommen, Ihr Netzwerk generiert eine 1, wenn irgendwo in der Eingabe eine 1 vorhanden ist, und ansonsten eine 0. Angenommen, Sie trainieren das Netzwerk mit Sequenzen der Länge 20 und begrenzen dann den Gradienten auf 10 Schritte. Wenn der Trainingsdatensatz in den letzten 10 Schritten einer Eingabe niemals eine 1 enthält, hat das Netzwerk ein Problem mit Testeingängen beliebiger Konfiguration. Wenn der Trainingssatz jedoch einige Beispiele wie [1 0 0 ... 0 0 0] und andere wie [0 0 0 ... 1 0 0] enthält, kann das Netzwerk die "Anwesenheit von" erkennen eine 1 "-Funktion an einer beliebigen Stelle in der Eingabe.

Zurück zur Stimmungsanalyse. Nehmen wir an, Ihr Modell trifft während des Trainings auf einen langen negativen Satz wie "Ich hasse das, weil ... herum und herum" mit beispielsweise 50 Wörtern in den Auslassungspunkten. Indem die Gradientenausbreitung auf 30 Zeitschritte begrenzt wird, verbindet das Modell das Wort "Ich hasse das, weil" nicht mit der Ausgabebezeichnung, sodass es nicht "Ich", "Hass" oder "Das" aufnimmt. aus diesem Training nicht aufnimmt Beispiel. Aber es werden die Wörter aufgenommen, die innerhalb von 30 Zeitschritten vom Ende des Satzes entfernt sind. Wenn Ihr Trainingssatz andere Beispiele enthält, die dieselben Wörter enthalten, möglicherweise zusammen mit "Hass", hat er die Chance, die Verbindung zwischen "Hass" und dem negativen Stimmungsetikett zu erkennen. Wenn Sie kürzere Trainingsbeispiele haben, sagen Sie: "Wir hassen das, weil es schrecklich ist!" dann kann Ihr Modell die Funktionen "hate" und "this" mit dem Zieletikett verbinden. Wenn Sie genug von diesen Trainingsbeispielen haben, sollte das Modell in der Lage sein, den Zusammenhang effektiv zu lernen.

Nehmen wir zum Test an, Sie präsentieren dem Modell einen weiteren langen Satz wie "Ich hasse das, weil ... auf dem Gecko!" Die Eingabe des Modells beginnt mit "Ich hasse das", das in irgendeiner Form in den verborgenen Zustand des Modells überführt wird. Dieser verborgene Zustand wird zur Beeinflussung zukünftiger verborgener Zustände des Modells verwendet, sodass der verborgene Zustand dieser Anfangswörter die theoretische Chance hat, die Ausgabe zu beeinflussen, obwohl dies niemals der Fall war trainiert an Proben, die einen so großen Abstand zwischen dem "Ich hasse das" und dem Ende des Satzes enthielten.

lmjohns3
quelle
0

@ Imjohns3 hat Recht, wenn Sie lange Sequenzen (Größe N) verarbeiten und die Rückübertragung auf die letzten K Schritte beschränken, lernt das Netzwerk zu Beginn keine Muster.

Ich habe mit langen Texten gearbeitet und benutze den Ansatz, bei dem ich Verluste berechne und nach jedem K-Schritt eine Backpropagation durchführe. Angenommen, meine Sequenz hatte N = 1000 Token, mein RNN-Prozess zuerst K = 100, dann versuche ich, Vorhersage (Rechenverlust) und Backpropagate durchzuführen. Anschließend unter Beibehaltung des RNN-Zustands die Gradientenkette bremsen (in pytorch-> detach) und weitere k = 100 Schritte starten.

Ein gutes Beispiel für diese Technik finden Sie hier: https://github.com/ksopyla/pytorch_neural_networks/blob/master/RNN/lstm_imdb_tbptt.py

ksopyla
quelle