Keras, wie funktioniert der Zerfall der SGD-Lernrate?

23

Wenn Sie sich die Dokumentation http://keras.io/optimizers/ ansehen, gibt es in der SGD einen Parameter für den Zerfall. Ich weiß, dass dies die Lernrate im Laufe der Zeit reduziert. Allerdings kann ich nicht herausfinden, wie es genau funktioniert. Ist es ein Wert, der mit der Lernrate multipliziert wird, wie lr = lr * (1 - decay) es exponentiell ist? Wie kann ich auch sehen, welche Lernrate mein Modell verwendet? Wenn ich model.optimizer.lr.get_value()nach einem Fit über ein paar Epochen drucke, wird die ursprüngliche Lernrate zurückgegeben, obwohl ich den Zerfall eingestellt habe.

Muss ich nesterov = True setzen, um den Impuls zu verwenden, oder gibt es nur zwei verschiedene Arten von Impulsen, die ich verwenden kann? Zum Beispiel gibt es einen Grund, dies zu tunsgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
quelle

Antworten:

24

Die Dokumentation, auf die Sie sich beziehen, enthält einen Verweis auf die Python-Quelle (klicken Sie einfach an [Source]der entsprechenden Stelle auf den Link), mit dem Sie Ihre Fragen beantworten können. Hier ist die relevanteste Zeile, die zeigt, wie sich decaydie Lernrate ändert:

lr = self.lr * (1. / (1. + self.decay * self.iterations))

Die nesterovOption muss nicht auf True gesetzt sein, damit der Impuls verwendet wird. Dies führt dazu, dass der Impuls auf eine andere Weise verwendet wird, wie aus der Quelle hervorgeht:

v = self.momentum * m - lr * g  # velocity

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v
Brent Kerby
quelle
1
und self.iterationsbezieht sich auf die Anzahl der einzelnen SGD-Schritte, nicht auf die Anzahl der Epochen, richtig?
Guillefix