Адам оптимизатор с экспоненциальным затуханием


53

В большинстве кодов Tensorflow, которые я видел, используется Adam Optimizer с постоянной скоростью обучения 1e-4(т.е. 0,0001). Код обычно выглядит следующим образом:

...build the model...
# Add the optimizer
train_op = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Мне интересно, полезно ли использовать экспоненциальный спад при использовании оптимизатора Адама, т.е. использовать следующий код:

...build the model...
# Add the optimizer
step = tf.Variable(0, trainable=False)
rate = tf.train.exponential_decay(0.15, step, 1, 0.9999)
optimizer = tf.train.AdamOptimizer(rate).minimize(cross_entropy, global_step=step)
# Add the ops to initialize variables.  These will include 
# the optimizer slots added by AdamOptimizer().
init_op = tf.initialize_all_variables()

# launch the graph in a session
sess = tf.Session()
# Actually intialize the variables
sess.run(init_op)
# now train your model
for ...:
  sess.run(train_op)

Обычно люди используют какое-то снижение скорости обучения, для Адама это кажется необычным. Есть ли теоретическая причина для этого? Может ли быть полезным объединить оптимизатор Адама с затуханием?


Как получить переменную шага для обновления при каждой итерации?
perrohunter

@perrohunter: используйте global_stepпараметр minimize. Смотрите редактировать.
Чарльз Стаатс

9
Примечание: 1e-4= 0.0001, нет 0.0004.
Клифф АВ

Я вижу, вы назначаете "global_step = step", но я не вижу, как обновляется переменная "step" ... не могли бы вы уточнить, пожалуйста?
Диего

@Diego: поздний ответ, но: передача переменной шага для минимизации, поскольку ее параметр global_step заставляет функцию минимизации увеличивать параметр global_step каждый раз, когда вызывается минимизация. Смотрите документацию для минимизации. Обратите внимание, что это означает, что при выполнении мини-пакетов переменная шага обновляется для каждого мини-пакета, а не только для каждой эпохи.
Димпол

Ответы:


37

Эмпирически говоря: определенно попробуйте, вы можете найти некоторые очень полезные учебные эвристики, в этом случае, пожалуйста, поделитесь!

Обычно люди используют какой-то упадок, для Адама это кажется необычным. Есть ли теоретическая причина для этого? Может ли быть полезным объединить оптимизатор Адама с затуханием?

Я не видел достаточного количества людей, использующих оптимизатор ADAM, чтобы сказать, правда это или нет. Если это правда, возможно, это потому, что ADAM является относительно новым, а «лучшие практики» снижения скорости обучения еще не установлены.

αTзнак равноα/T

Проще говоря: я не думаю, что в теории ничто не препятствует использованию правил затухания скорости обучения с ADAM. Я видел, как люди сообщали о некоторых хороших результатах, используя ADAM, и находил, что некоторые хорошие обучающие эвристики были бы невероятно ценными.


12

Причина, по которой большинство людей не используют снижение скорости обучения с Адамом, заключается в том, что сам алгоритм выполняет снижение скорости обучения следующим образом:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

где t0начальный временной шаг и lr_tновая используемая скорость обучения.


4
Я не уверен, если это так. Фактор sqrt(1 - beta2^t) / (1 - beta1^t)не гниет. Кажется, это компенсирует инициализацию оценок первого и второго моментов.
Тийс

25
Этот ответ неверен. Этот фактор приближается к 1,0, когда т уходит в бесконечность. Примечание стороны: learning_rate здесь фиксируется . Это не скорость обучения в момент времени t-1.
rd11

8

Адам использует начальную скорость обучения или размер шага в соответствии с терминологией оригинальной статьи при адаптивном вычислении обновлений. Размер шага также дает приблизительную оценку для обновлений. В связи с этим я считаю хорошей идеей уменьшить размер шага к концу тренировки. Это также подтверждается недавней работой NIPS 2017: Предельная ценность адаптивных градиентных методов в машинном обучении .

Последняя строка в Разделе 4: Эксперименты по глубокому обучению говорит

Хотя общепринятая мудрость предполагает, что Адаму не требуется настройка, мы находим, что настройка начальной скорости обучения и схемы затухания для Адама дает значительные улучшения по сравнению с настройками по умолчанию во всех случаях.

И последнее, но не менее важное: в статье предлагается использовать SGD в любом случае.


2

Я согласен с мнением @Indie AI, здесь я предоставляю другую информацию:

От CS231n :

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

А также из статьи « Переосмысление начальной архитектуры для компьютерного зрения», раздел 8:

... в то время как наши лучшие модели были получены с использованием RMSProp [21] с распадом 0,9 и ε = 1,0. Мы использовали скорость обучения 0,045, затухая каждые две эпохи с использованием экспоненциальной скорости 0,94. ...


2

Я подготовил набор данных с очень простыми данными, если человек считается толстым или нет, рост и вес - данные для расчета bmi, а если больше 27, человек толстый. Итак, очень простые исходные данные. При использовании Адама в качестве оптимизатора и скорости обучения 0,001 точность получит меня только на 85% за 5 эпизодов, а максимальная - до 90% при тестировании более 100 эпизодов.

Но при повторной загрузке, возможно, на 85% и при скорости обучения 0,0001 точность составит более 3 эпок до 95%, а еще 10 - около 98-99%. Не уверен, что скорость обучения может опуститься ниже 4 цифр 0,0001, но при повторной загрузке модели и использовании 0,00001, накопитель будет колебаться в пределах 99,20-100% и не опустится ниже. Опять же, не уверен, что скорость обучения будет считаться 0, но в любом случае, это то, что у меня есть ...

Все это с использованием categoryorical_crossentropy, но mean_square получает этот показатель на 99-100%, используя этот метод. AdaDelta, AdaGrad, Nesterov не могли получить точность выше 65%, просто для заметки.


0

Скорость затухания в Адаме такая же, как и в RSMProp (как вы можете видеть из этого ответа ), и это в некоторой степени основано на величине предыдущих градиентов, чтобы отбросить колебания . Таким образом, экспоненциальный спад (для снижения скорости обучения в процессе обучения) может быть принят одновременно. Все они снижают скорость обучения, но для разных целей .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.