Оптимізатор Адама з експоненціальним розпадом


53

У більшості кодів Tensorflow, який я бачив, використовується оптимізатор Адама з постійною швидкістю навчання 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" ... чи можете ви уточнити, будь ласка?
Дієго

@Diego: пізня відповідь, але: передача змінної кроку для мінімізації, оскільки параметр global_step змушує функцію мінімізації збільшувати параметр global_step щоразу, коли викликається мінімізація. Дивіться документацію для мінімізації. Зверніть увагу, що це означає, що при виконанні міні-пакетів змінна ступінь оновлюється для кожної міні-партії, а не лише для кожної епохи.
димпол

Відповіді:


37

Емпірично кажучи: неодмінно спробуйте це, можливо, ви знайдете дуже корисну навчальну евристику, і в цьому випадку, будь ласка, поділіться!

Зазвичай люди використовують якийсь розпад, для Адама це здається рідкісним. Чи є якась теоретична причина цього? Чи може бути корисним поєднувати оптимізатор Адама з розпадом?

Я не бачив достатнього коду людей, використовуючи оптимізатор ADAM, щоб сказати, правда це чи ні. Якщо це правда, можливо, це тому, що ADAM є відносно новим, а рівень кращого навчання «кращі практики» ще не створений.

αт=α/т

Простіше кажучи: я не думаю, що нічого в теорії не перешкоджає використанню правил зниження швидкості навчання з 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)не знижується. Схоже, це компенсує ініціалізацію оцінок першого та другого моменту.
Thijs

25
Ця відповідь невірна. Цей фактор наближається до 1,0, коли t переходить до нескінченності. Побічна примітка: тут виправлено_наук_рат . Це не ступінь навчання в момент 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, але все одно, це те, що я маю ...

Все це за допомогою categorical_crossentropy, але mean_square також отримує це 99-100%, роблячи цей метод. AdaDelta, AdaGrad, Nesterov не змогли отримати понад 65% точності, лише на замітку.


0

Занепад швидкості навчання в Адамі такий самий, як і в RSMProp (як видно з цієї відповіді ), і це, як правило, засноване на величині попередніх градієнтів, щоб скинути коливання . Таким чином, експоненціальний занепад (для зменшення темпів навчання в ході навчального процесу) може бути прийнятий одночасно. Усі вони розкладають ступінь навчання, але для різних цілей .

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