Keras, jak działa spadek szybkości uczenia się SGD?

23

Jeśli spojrzysz na dokumentację http://keras.io/optimizers/, w SGD znajduje się parametr rozpadu. Wiem, że to zmniejsza szybkość uczenia się w miarę upływu czasu. Nie mogę jednak dowiedzieć się, jak to dokładnie działa. Czy jest to wartość pomnożona przez współczynnik uczenia się, np. Czy lr = lr * (1 - decay) jest wykładnicza? Jak mogę również sprawdzić, jakiej prędkości uczenia się używa mój model? Kiedy drukuję model.optimizer.lr.get_value()po przejściu dopasowania przez kilka epok, przywraca oryginalną szybkość uczenia się, mimo że ustawiłem rozpad.

Czy muszę też ustawić parametr nesterov = True, aby użyć pędu, czy mogę użyć tylko dwóch różnych rodzajów pędu. Na przykład jest sens, aby to zrobićsgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
źródło

Odpowiedzi:

24

Dokumentacja, do której się odwołujesz, zawiera odniesienie do źródła Pythona (wystarczy kliknąć [Source]link w odpowiednim miejscu), którego można użyć, aby odpowiedzieć na twoje pytania. Oto najbardziej odpowiednia linia, pokazująca, jak decaymodyfikuje szybkość uczenia się:

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

nesterovOpcja nie musi być ustawiona na wartość true dla pęd do wykorzystania; powoduje to, że pęd jest wykorzystywany w inny sposób, co znowu można zobaczyć ze źródła:

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
źródło
1
i self.iterationsodnosi się do liczby poszczególnych kroków SGD, a nie liczby epok, rigt?
guillefix,