Подтвердить что ты не робот

Должны ли мы сделать снижение скорости обучения для Adam Optimizer

Я тренирую сеть для локализации изображения с помощью оптимизатора Адама, и кто-то предлагает мне использовать экспоненциальный распад. Я не хочу этого пытаться, потому что сам оптимизатор Ада уменьшает скорость обучения. Но этот парень настаивает, и он сказал, что сделал это раньше. Так должен ли я это делать и есть ли какая-то теория за твоим предложением?

4b9b3361

Ответ 1

Это зависит. ADAM обновляет любой параметр с индивидуальной скоростью обучения. Это означает, что каждый параметр в сети имеет определенную скорость обучения.

Но единичная скорость обучения для параметра вычисляется с использованием lambda (начальная скорость обучения) в качестве верхнего предела. Это означает, что каждый курс обучения может варьироваться от 0 (без обновления) до лямбда (максимальное обновление).

Скорости обучения адаптируются во время поездок, это правда, но если вы хотите быть уверенным, что каждый шаг обновления не превышает лямбда, вы можете, чем нижняя лямбда, использовать экспоненциальный распад или что-то еще. Это может помочь уменьшить потери на последнем этапе обучения, когда вычисляемая потеря с ранее связанным параметром лямбда остановилась, чтобы уменьшить.

Ответ 2

По моему опыту, обычно нет необходимости снижать скорость обучения с помощью оптимизатора Adam.

Теория заключается в том, что Адам уже занимается оптимизацией скорости обучения (проверьте ссылку):

"Мы предлагаем Адам, метод эффективной стохастической оптимизации, который требуются только градиенты первого порядка с небольшим объемом памяти. Метод вычисляет индивидуальные адаптивные показатели обучения для разных параметры из оценок первого и второго моментов градиенты; имя Адам получено из адаптивной оценки момента. "

Как и в случае любой проблемы глубокого обучения YMMV, один размер не подходит всем, вы должны попробовать разные подходы и посмотреть, что работает для вас и т.д. И т.д.

Ответ 3

Да, конечно. Из моего собственного опыта, это очень полезно для Адама с затуханием скорости обучения. Без затухания вы должны установить очень малую скорость обучения, чтобы потери не начали расходиться после снижения до точки. Здесь я публикую код для использования Адама с затуханием скорости обучения с помощью TensorFlow. Надеюсь, это кому-нибудь пригодится.

decayed_lr = tf.train.exponential_decay(learning_rate,
                                        global_step, 10000,
                                        0.95, staircase=True)
opt = tf.train.AdamOptimizer(decayed_lr, epsilon=adam_epsilon)

Ответ 4

У Адама есть единая скорость обучения, но это максимальная скорость, которая является адаптивной, поэтому я не думаю, что многие люди используют планирование обучения с ней.

Из-за адаптивного характера ставка по умолчанию довольно устойчива, но могут быть моменты, когда вы хотите оптимизировать ее. Что вы можете сделать, это заранее найти оптимальную ставку по умолчанию, начав с очень маленькой ставки и увеличивая ее до тех пор, пока потери не перестанут уменьшаться, а затем посмотрите на наклон кривой потерь и выберите скорость обучения, связанную с самым быстрым уменьшением потерь ( не та точка, где потери на самом деле самые низкие). Джереми Ховард упоминает об этом в курсе глубокого обучения fast.ai и в статье о циклическом обучении.

Редактировать: Люди довольно недавно начали использовать политику однократного обучения в сочетании с Адамом с отличными результатами.