Керас, как работает снижение скорости обучения SGD?

23

Если вы посмотрите документацию http://keras.io/optimizers/, в SGD есть параметр для затухания. Я знаю, что это снижает скорость обучения с течением времени. Однако не могу понять, как именно это работает. Это значение умножается на скорость обучения, например, lr = lr * (1 - decay) экспоненциально? Кроме того, как я могу узнать, какую скорость обучения использует моя модель? Когда я печатаю model.optimizer.lr.get_value()после прогона в течение нескольких эпох, он возвращает исходную скорость обучения, даже если я установил затухание.

Также я должен установить nesterov = True, чтобы использовать импульс или есть только два различных типа импульса, которые я могу использовать. Например, есть ли смысл делать этоsgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = False)

chasep255
источник

Ответы:

24

Документация, на которую вы ссылаетесь, включает ссылку на исходный код Python (просто нажмите на [Source]ссылку в соответствующем месте), которую можно использовать для ответа на ваши вопросы. Вот наиболее подходящая строка, показывающая, как decayизменяется скорость обучения:

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

nesterovПараметр не должен быть установлен в значение True для импульса , которые будут использоваться; это приводит к тому, что импульс используется по-другому, как опять-таки видно из источника:

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

if self.nesterov:
    new_p = p + self.momentum * v - lr * g
else:
    new_p = p + v
Брент Керби
источник
1
и self.iterationsотносится к числу отдельных шагов SGD, а не к числу эпох, верно?
Guillefix