Ich versuche zu verstehen, wie rnns verwendet werden können, um Sequenzen anhand eines einfachen Beispiels vorherzusagen. Hier ist mein einfaches Netzwerk, bestehend aus einem Eingang, einem versteckten Neuron und einem Ausgang:
Das versteckte Neuron ist die Sigmoidfunktion, und die Ausgabe wird als einfache lineare Ausgabe angesehen. Ich denke, das Netzwerk funktioniert wie folgt: Wenn die verborgene Einheit im Status startet s
und wir einen Datenpunkt verarbeiten, der eine Folge der Länge ist , dann:( x 1 , x 2 , x 3 )
Zu einem Zeitpunkt 1
, der vorhergesagte Wert, ist
Zur Zeit 2
haben wir
Zur Zeit 3
haben wir
So weit, ist es gut?
Das "abgerollte" RNN sieht folgendermaßen aus:
Wenn wir für die Zielfunktion eine Summe der quadratischen Fehlerterme verwenden, wie ist sie dann definiert? Auf die ganze Sequenz? In welchem Fall hätten wir so etwas wie ?
Werden Gewichte erst aktualisiert, wenn die gesamte Sequenz betrachtet wurde (in diesem Fall die 3-Punkt-Sequenz)?
Was den Gradienten in Bezug auf die Gewichte betrifft, müssen wir berechnen. Ich werde versuchen, dies einfach durch Untersuchen der 3 Gleichungen für oben zu tun , wenn alles andere korrekt aussieht. Abgesehen davon sieht dies für mich nicht nach Vanilla-Back-Propagation aus, da dieselben Parameter in verschiedenen Schichten des Netzwerks angezeigt werden. Wie stellen wir uns darauf ein?
Wenn mir jemand helfen kann, mich durch dieses Spielzeugbeispiel zu führen, wäre ich sehr dankbar.
Antworten:
Ich denke, Sie brauchen Zielwerte. Für die Sequenz benötigen Sie also entsprechende Ziele . Da Sie den nächsten Term der ursprünglichen Eingabesequenz vorhersagen möchten, benötigen Sie:(x1,x2,x3) (t1,t2,t3)
Sie müssten definieren. Wenn Sie also eine Eingabesequenz der Länge zum Trainieren des RNN hätten, könnten Sie nur die ersten Terme als Eingabewerte und die letzten Terme als Ziel verwenden Werte.x4 N N−1 N−1
Soweit mir bekannt ist, haben Sie Recht - der Fehler ist die Summe über die gesamte Sequenz. Dies liegt daran, dass die Gewichte , und über die entfaltete RNN gleich sind.u v w
Also ist
Ja, wenn ich die Rückausbreitung durch die Zeit verwende, dann glaube ich das.
Was die Differentiale betrifft, möchten Sie nicht den gesamten Ausdruck für und ihn differenzieren, wenn es um größere RNNs geht. Eine Notation kann es also ordentlicher machen:E
Dann sind die Derivate:
Wobei für eine Folge der Länge gilt und:t∈[1, T] T
Diese wiederkehrende Beziehung ergibt sich aus der Erkenntnis, dass die verborgene Aktivität nicht nur den Fehler am -Ausgang , sondern auch den Rest des Fehlers weiter unten im RNN :tth tth Et E−Et
Diese Methode wird als Back Propagation Through Time (BPTT) bezeichnet und ähnelt der Back Propagation in dem Sinne, dass die Kettenregel wiederholt angewendet wird.
Ein detaillierteres, aber kompliziertes Beispiel für ein RNN finden Sie in Kapitel 3.2 von 'Überwachte Sequenzmarkierung mit wiederkehrenden neuronalen Netzen' von Alex Graves - wirklich interessante Lektüre!
quelle
Der oben beschriebene Fehler (nach der Änderung, die ich im Kommentar unter der Frage geschrieben habe) können Sie nur wie einen Gesamtvorhersagefehler verwenden, aber Sie können ihn nicht im Lernprozess verwenden. Bei jeder Iteration geben Sie einen Eingabewert in das Netzwerk ein und erhalten eine Ausgabe. Wenn Sie eine Ausgabe erhalten, müssen Sie Ihr Netzwerkergebnis überprüfen und den Fehler auf alle Gewichte übertragen. Nach dem Update setzen Sie den nächsten Wert in die Reihenfolge und machen eine Vorhersage für diesen Wert, dann verbreiten Sie auch den Fehler und so weiter.
quelle