2015-01-29 8 views
9

Die Parameter-Updates derano-Funktion nehmen eine Paarliste, in der jedes Paar eine gemeinsame symbolische Variable und ihren neuen Ausdruck nach der Berechnung der Funktionsausgaben angibt. Ich frage mich, ob es eine Reihenfolge für das Update-Verfahren gibt. Die Reihenfolge spielt eine Rolle, wenn der neue Ausdruck zweier symbolischer Variablen aufeinander angewiesen ist und die Aktualisierungsprozedur die aktualisierte symbolische Variable zur Aktualisierung anderer symbolischer Variablen verwendet, die sich darauf beziehen. Beispiele sieht diese Liste könnte wie folgt,Die Aktualisierungsreihenfolge der Update-Liste derano-Funktion

[(a, b + a), (b, b+ 1)] 

ich eine Funktion, dies zu testen, geschrieben haben. Das Ergebnis scheint zu zeigen, dass es immer den alten Wert im Ausdruck (zweite Term in dem Paar) die symbolische Variable in der ersten Amtszeit zu aktualisieren, das heißt

a_new = b_old + a_old 
b_new = b_old + 1 

Ist das ein definiertes Verhalten?

Jedoch habe ich die Umsetzung der Dynamik gefunden here, Hier sind die Codes für die Erzeugung der Aktualisierungsliste und param_update symbolischen Variablen

param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable) 
updates += [(param, param - learning_rate*param_update), 
(param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param)) 

Dann in der ersten Iteration wird die param nicht aktualisiert werden, weil param_updates sind alles null. Nach meinem Verständnis sollte param_update zuerst aktualisiert werden und dann zum Aktualisieren von param verwendet werden.

Antwort

7

Für das Update wird immer der vorherige Wert (der Wert vor dem Theano Funktionsaufruf) verwendet. Du hast also das Richtige gefunden.

Für Momentum, ich denke es ist normal, dass es eine Verzögerung gibt.