Intuitive Beschreibung für das Training von LSTM (mit Vergissentor / Guckloch)?

9

Ich bin ein CS-Student (aber ich weiß nicht viel über KI, habe keine Kurse besucht und definitiv nichts über NN bis vor kurzem), der im Begriff ist, ein Schulprojekt in KI zu machen, also wähle ich ein Thema aus Grammatikinduktion (der kontextfreien Sprache und möglicherweise einer Teilmenge der kontextsensitiven Sprache) unter Verwendung des verstärkenden Lernens in einem neuronalen Netzwerk. Ich habe angefangen, den vorherigen erfolgreichen Ansatz zu studieren, um zu sehen, ob sie optimiert werden können, und jetzt versuche ich, den Ansatz mithilfe von überwachtem Lernen mit Langzeitgedächtnis zu verstehen. Ich lese "Lernen zu vergessen: Kontinuierliche Vorhersage mit LSTM". Ich lese auch die Zeitung über Guckloch, aber es scheint noch komplizierter zu sein und ich versuche zuerst etwas Einfacheres. Ich denke, ich verstehe richtig, wie die Speicherzelle und die Netzwerktopologie funktionieren. Was ich momentan nicht verstehe, ist der Trainingsalgorithmus. Ich muss also einige Fragen stellen:

  • Wie genau werden unterschiedliche Eingaben unterschieden? Anscheinend wird das Netzwerk nicht nach jeder Eingabe zurückgesetzt, und es gibt kein spezielles Symbol, um andere Eingaben abzugrenzen. Empfängt das Netzwerk nur einen kontinuierlichen Strom von Zeichenfolgen ohne Anhaltspunkte dafür, wo die Eingabe endet und die nächste beginnt?

  • Was ist die Zeitverzögerung zwischen der Eingabe und der entsprechenden Zielausgabe? Sicherlich ist eine gewisse Zeitverzögerung erforderlich, und daher kann das Netzwerk niemals darauf trainiert werden, eine Zielausgabe von einer Eingabe zu erhalten, für deren Verarbeitung nicht genügend Zeit zur Verfügung steht. Wenn nicht die Reber-Grammatik verwendet wurde, sondern etwas Komplizierteres, bei dem möglicherweise viel mehr Informationen gespeichert und abgerufen werden müssen, kann der Zeitaufwand für den Zugriff auf die Informationen je nach Eingabe variieren, was wahrscheinlich nicht vorhergesagt werden kann während wir uns für die Zeitverzögerung für das Training entscheiden.

  • Gibt es eine intuitivere Erklärung des Trainingsalgorithmus? Ich finde es schwierig herauszufinden, was hinter all den komplizierten Formeln vor sich geht, und ich müsste es verstehen, weil ich es später in einen verstärkten Lernalgorithmus umwandeln muss.

  • Das Papier erwähnte auch nichts in Bezug auf verrauschte Trainingsdaten . Ich habe woanders gelesen, dass das Netzwerk sehr gut mit verrauschten Testdaten umgehen kann. Wissen Sie, ob LSTM mit Situationen umgehen kann, in denen die Trainingsdaten möglicherweise mit überflüssigen Informationen beschädigt werden?

Gina
quelle
3
Dies ist eine sehr große Frage, die einige Leser einschüchtern könnte. Ich schlage vor, es in mehrere Teile aufzuteilen (jeder Ihrer Aufzählungspunkte vielleicht). Dieses Thema verbindet auch Informatik und Cross Validated . Sie könnten in Betracht ziehen, nach den CS-bezogenen Aspekten hier in der Informatik und den statistikbezogenen Aspekten in Bezug auf Cross Validated zu fragen (stellen Sie jedoch nicht auf beiden Websites dieselbe Frage).
Gilles 'SO - hör auf böse zu sein'
Einige Referenzen, die Ihnen helfen könnten: lstm.iupr.com/files nntutorial-lstm.pdf auf dieser Seite können hier besonders hilfreich sein
Brian Jack
PS: Könnte jemand diese Epsilons und Deltas im Anhang entschlüsseln, vielleicht aufgrund von etwas, das ich vielleicht nur mit der Berechnung des ersten Jahres verstehe?
Brian Jack
An dieser Stelle vermeide ich Backprop für einen Evolutions- / Mutagen-Trainingsalgorithmus, nur weil der Kalkül für das Backprop etwas beängstigend aussieht. Ich habe ein kleines Problem mit der Vorhersage von Testtexten mit einem backpropMinus lstm in PyBrain versucht, aber es gab Probleme mit der Konvergenz, selbst wenn nur eine 3-stellige Eingabesequenz vorhanden war - Mutationstraining und Fitness-Culling (bei MSE mit Ausgabefehlern gegenüber Trainingspopulation) könnten mehr ermöglichen kreative Suchbereichsanalyse
Brian Jack

Antworten:

1

LSTM ist so konzipiert, dass ein Datenstrom von Datenblöcken (jeder Block ist der Satz von Eingaben für das Netzwerk zu diesem Zeitpunkt) verarbeitet wird, die im Laufe der Zeit eintreffen und in den Daten auftretende Merkmale beobachten und die Ausgabe entsprechend liefern. Die Zeitverzögerung (Verzögerung) zwischen dem Auftreten der zu erkennenden Merkmale kann variieren und sich verlängern.

Man würde dann das Netzwerk trainieren, indem man Trainingsbeispiele in zufälliger Reihenfolge streamen würde, wobei auch etwas Zeitverschiebungsrauschen in Form von Leerlaufdurchläufen hinzugefügt werden sollte (das Netzwerk aktivieren lassen, wenn die Eingaben die Standardwerte für Leerlauf haben, z. B.: Wenn im Fall einer Sprache kein Audio vorhanden ist Prozessor) [Ausnahme: Wenn Trainingsdaten periodischen Zeitverschiebungsmustern wie Musik entsprechen sollten, sollte das Zeitverschiebungsrauschen die Zeitverschiebung synchronisieren, z. B.: Bei Musik muss sichergestellt werden, dass ein Trainingsbeispiel für den Beginn des Takts nicht auf den mittleren Takt verschoben wird her]

Es ist auch möglich, ein halbüberwachtes Setup zu haben, bei dem sich das Netzwerk immer in einer Trainingskonfiguration befindet und mit Beispielen trainiert wird, die die Ausgabe eines Leerlaufwerts erwarten, wenn keine Funktion vorhanden ist, oder den entsprechenden erwarteten Wert, wenn eine Funktion zum Trainieren präsentiert wird.

Wenn ein Feedback-Format-Training gewünscht wird, kann es emuliert werden durch:

  1. Speichern des internen Zustands (Zeit t)
  2. Aktivieren des Netzwerks an aktuellen Eingängen (jetzt bei t + 1)
  3. Der Überwachungsprozess bewertet die bei t erhaltene Leistung
    • 3a Wenn eine Korrektur erforderlich ist, spulen Sie zuerst in den gespeicherten Zustand zurück (spult das Netzwerk zurück auf t).
    • 3b erzeugen ein Trainingsbeispiel mit der Korrektur
    • 3c Führen Sie einen Zugpass (Backprop) für dieses Slice aus und nicht für eine Aktivierung

Daher implementiert man ein Feedback-Stil-System, da Trainingsbeispiele grundsätzlich nur erstellt werden, wenn das Netzwerk "etwas falsch macht". Das Feedback-Format ist nützlich, wenn das Netzwerk eine Improvisation versuchen soll (wie Schmidhubers Musikbeispiel).

  • Es sollte darauf hingewiesen werden, dass ein Teil des Korrektur-Feedbacks (und damit der Trainingsbeispiele) notwendigerweise diejenigen enthält, die eine Ausgabe im Leerlaufwert erzwingen, wenn zum aktuellen Zeitpunkt keine Features vorhanden sind

Es wurde vom OP erwähnt, dass [es gibt keine Trennung der Eingaben], außer dass es tatsächlich gibt. Wenn man an ein Spracherkennungsszenario denkt, hat man Äußerungsperioden (Merkmale, die das LSTM erkennen sollte), die mit langen Stilleperioden durchsetzt sind. Um das Problem anzugehen, ist es fair zu sagen, dass diese Ruheperioden tatsächlich die sequenzierten Gruppen von Eingaben trennen (auch diese Stille ist tatsächlich eine Funktion, die das Netzwerk erkennen und lernen muss, mit nicht genutzten Ausgaben zu reagieren, dh zu lernen, dies zu tun nichts bei Stille).

Ein Hinweis zum Zurücksetzen des Netzwerks

Jedes Zurücksetzen oder Abrufen eines gespeicherten Netzwerkstatus im LSTM-Sinne hat die Bedeutung von "Zurück in die Zeit", wodurch jegliches Lernen rückgängig gemacht wird, das das LSTM vor dem Zurücksetzen durchgeführt hat.

Sie haben also zu Recht angegeben, dass LSTMs nicht vor jeder Trainingsprobe oder Tranining-Epoche zurückgesetzt werden. LSTMs möchten, dass ihre Daten sozusagen gestreamt oder "online" bereitgestellt werden.

Brian Jack
quelle