Keras, comment fonctionne la décroissance du taux d'apprentissage SGD?

23

Si vous regardez la documentation http://keras.io/optimizers/ il y a un paramètre dans le SGD pour la désintégration. Je sais que cela réduit le taux d'apprentissage au fil du temps. Cependant, je ne peux pas comprendre comment cela fonctionne exactement. Est-ce une valeur multipliée par le taux d'apprentissage telle qu'elle lr = lr * (1 - decay) est exponentielle? Comment puis-je voir quel taux d'apprentissage mon modèle utilise? Lorsque j'imprime model.optimizer.lr.get_value()après avoir exécuté un ajustement sur quelques époques, cela donne le taux d'apprentissage d'origine même si j'ai défini la décroissance.

Dois-je également définir nesterov = True pour utiliser l'élan ou y a-t-il seulement deux types différents d'élan que je peux utiliser. Par exemple, est-il utile de le fairesgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
la source

Réponses:

24

La documentation à laquelle vous vous référez comprend une référence à la source Python (cliquez simplement sur le [Source]lien à l'endroit approprié), qui peut être utilisée pour répondre à vos questions. Voici la ligne la plus pertinente, montrant comment decaymodifie le taux d'apprentissage:

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

L' nesterovoption n'a pas besoin d'être définie sur True pour que l'élan soit utilisé; il en résulte que l'élan est utilisé d'une manière différente, comme on peut le voir à la source:

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
la source
1
et se self.iterationsréfère au nombre d'étapes SGD individuelles, pas au nombre d'époques, rigt?
guillefix