Керасе, як працює рівень зниження рівня 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)

Відповіді:


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.