В большинстве кодов 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)
Обычно люди используют какое-то снижение скорости обучения, для Адама это кажется необычным. Есть ли теоретическая причина для этого? Может ли быть полезным объединить оптимизатор Адама с затуханием?
global_step
параметрminimize
. Смотрите редактировать.1e-4
=0.0001
, нет0.0004
.Ответы:
Эмпирически говоря: определенно попробуйте, вы можете найти некоторые очень полезные учебные эвристики, в этом случае, пожалуйста, поделитесь!
Я не видел достаточного количества людей, использующих оптимизатор ADAM, чтобы сказать, правда это или нет. Если это правда, возможно, это потому, что ADAM является относительно новым, а «лучшие практики» снижения скорости обучения еще не установлены.
Проще говоря: я не думаю, что в теории ничто не препятствует использованию правил затухания скорости обучения с ADAM. Я видел, как люди сообщали о некоторых хороших результатах, используя ADAM, и находил, что некоторые хорошие обучающие эвристики были бы невероятно ценными.
источник
Причина, по которой большинство людей не используют снижение скорости обучения с Адамом, заключается в том, что сам алгоритм выполняет снижение скорости обучения следующим образом:
где
t0
начальный временной шаг иlr_t
новая используемая скорость обучения.источник
sqrt(1 - beta2^t) / (1 - beta1^t)
не гниет. Кажется, это компенсирует инициализацию оценок первого и второго моментов.Адам использует начальную скорость обучения или размер шага в соответствии с терминологией оригинальной статьи при адаптивном вычислении обновлений. Размер шага также дает приблизительную оценку для обновлений. В связи с этим я считаю хорошей идеей уменьшить размер шага к концу тренировки. Это также подтверждается недавней работой NIPS 2017: Предельная ценность адаптивных градиентных методов в машинном обучении .
Последняя строка в Разделе 4: Эксперименты по глубокому обучению говорит
И последнее, но не менее важное: в статье предлагается использовать SGD в любом случае.
источник
Я согласен с мнением @Indie AI, здесь я предоставляю другую информацию:
От CS231n :
А также из статьи « Переосмысление начальной архитектуры для компьютерного зрения», раздел 8:
источник
Я подготовил набор данных с очень простыми данными, если человек считается толстым или нет, рост и вес - данные для расчета 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%, просто для заметки.
источник
Скорость затухания в Адаме такая же, как и в RSMProp (как вы можете видеть из этого ответа ), и это в некоторой степени основано на величине предыдущих градиентов, чтобы отбросить колебания . Таким образом, экспоненциальный спад (для снижения скорости обучения в процессе обучения) может быть принят одновременно. Все они снижают скорость обучения, но для разных целей .
источник