Keras, ¿cómo funciona la disminución de la tasa de aprendizaje de SGD?

23

Si nos fijamos en la documentación http://keras.io/optimizers/ hay un parámetro en el SGD para la descomposición. Sé que esto reduce la tasa de aprendizaje con el tiempo. Sin embargo, no puedo entender cómo funciona exactamente. ¿Es un valor que se multiplica por la tasa de aprendizaje como lr = lr * (1 - decay) exponencial? Además, ¿cómo puedo ver qué tasa de aprendizaje utiliza mi modelo? Cuando imprimo model.optimizer.lr.get_value()después de ejecutar un ajuste durante algunas épocas, devuelve la tasa de aprendizaje original a pesar de que configuré el decaimiento.

También tengo que establecer nesterov = True para usar el impulso o hay solo dos tipos diferentes de impulso que puedo usar. Por ejemplo, ¿hay algún punto para hacer esto?sgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
fuente

Respuestas:

24

La documentación a la que se refiere incluye una referencia a la fuente de Python (simplemente haga clic en el [Source]enlace en el lugar apropiado), que se puede utilizar para responder sus preguntas. Aquí está la línea más relevante, que muestra cómo decaymodifica la tasa de aprendizaje:

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

La nesterovopción no tiene que establecerse en True para que se use el impulso; da como resultado que el impulso se use de una manera diferente, como se puede ver nuevamente desde la fuente:

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
fuente
1
y se self.iterationsrefiere al número de pasos SGD individuales, no al número de épocas, rigt?
guillefix