Tut Theano automatisches Entfalten für BPTT?

8

Ich führe ein RNN in Theano ein und habe Schwierigkeiten, es zu trainieren. Es kommt nicht einmal annähernd an den Trainingskorpus heran. Mein Fehler wird höchstwahrscheinlich dadurch verursacht, dass ich nicht genau verstehe, wie Theano die Backpropagation mit der Zeit bewältigt. Im Moment ist mein Code so einfach wie es geht:

%Vor%

Meine Frage ist: Da mein Netzwerk immer wiederkehrend ist, führt das automatisch dazu, dass sich die Architektur zu einem Feed-Forward entwickelt? Auf der einen Seite macht dieses Beispiel genau das, was ich mache. Auf der anderen Seite bringt mich dieser Thread dazu, dass ich falsch liege.

>

Falls es das Entfalten für mich tut, wie kann ich es abschneiden? Ich kann sehen, dass es einen Weg gibt, von der Dokumentation von scan , aber ich kann nicht kommen Sie mit dem Code, um es zu tun.

    
John Jaques 26.06.2014, 13:17
quelle

1 Antwort

10

Ich würde nicht sagen, dass es automatisch "entfaltet" - Theano hat eine Vorstellung davon, welche Variablen verbunden sind, und kann Aktualisierungen entlang dieser Kette weitergeben. Wenn Sie das mit Entfaltung meinen, dann sprechen wir vielleicht über dasselbe.

ich durch diesen auch verlasse, aber unter Verwendung von Rasvan Pascanus rnn.py-Code (aus diesem Thread ) für Referenz. Es scheint viel einfacher für ein Lernbeispiel.

Sie können durch das Visualisieren / Zeichnen von Diagrammen aus dem Tutorial einen gewissen Mehrwert erhalten. Es gibt auch eine Reihe von Folien online mit einer einfachen Zeichnung , die das Diagramm von a zeigt 1 Layer "Entfaltung" eines RNN, die Sie in Ihrem Beitrag diskutieren.

Sehen Sie sich speziell die Funktion step an:

%Vor%

Diese Funktion stellt das "einfache wiederkehrende Netz" dar, das in diesen Folien, S. 10 . Wenn Sie Updates durchführen, übergeben Sie einfach den Gradienten w.r.t. W, W_in, und W_out (beachte, dass y über die Funktion step mit diesen drei verbunden ist! So funktioniert die Gradienten-Magie).

Wenn Sie mehrere W-Schichten (oder Indizes in einem großen W, wie ich glaube, gwtaylor macht), dann würde das mehrere Schichten von "Entfaltung" erstellen. Von dem, was ich verstehe, sieht dieses Netzwerk nur einen Schritt zurück in der Zeit. Wenn es hilft, hat theanonets auch eine RNN-Implementierung in Theano.

Als zusätzliche Anmerkung ist das Trainieren von RNNs mit BPTT hard . Ilya Sutskevers Dissertation diskutiert dies ausführlich - wenn Sie können, versuchen Sie es mit einem < a href="https://github.com/boulanni/theano-hf"> Hessian Free-Optimierer, hier gibt es auch eine Referenz-RNN-Implementierung . Theanets tut dies auch und kann eine gute Referenz sein.

    
Kyle Kastner 26.06.2014, 17:57
quelle