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)

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

1
et se self.iterationsréfère au nombre d'étapes SGD individuelles, pas au nombre d'époques, rigt?
guillefix
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.