Руководство по выбору оптимизатора для обучения нейронных сетей

18

Я использую нейронные сети уже некоторое время. Тем не менее, одна вещь, с которой я постоянно борюсь, это выбор оптимизатора для обучения сети (используя backprop). Что я обычно делаю, так это просто начинаю с одного (например, стандартного SGD), а затем пробую другие другие довольно случайно. Мне было интересно, есть ли лучший (и менее случайный) подход к поиску хорошего оптимизатора, например, из этого списка:

  • SGD (с или без импульса)
  • AdaDelta
  • AdaGrad
  • RMSProp
  • Адам

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

Если кто-то из вас разработал стратегию и / или интуицию о том, как вы выбираете оптимизаторы, мне было бы очень интересно услышать это. Кроме того, если есть какая-то работа, которая обеспечивает теоретическое обоснование выбора одного над другим, это было бы еще лучше.

mplappert
источник

Ответы:

3

1) AdaGrad слишком резко снижает скорость обучения для параметров, которые часто обновляются, и дает большую скорость обучения разреженным параметрам, параметры, которые обновляются не так часто. В некоторых проблемах часто наиболее важная информация присутствует в данных, которые не так часто, но редко. Поэтому, если проблема, над которой вы работаете, связана с разреженными данными, такими как tf-idf и т. Д. Адаград может быть полезен.

2) AdaDelta, RMSProp почти работает на похожих линиях, с той лишь разницей в Adadelta, что для начала не требуется начальная константа скорости обучения.

3) Адам сочетает в себе хорошие свойства Adadelta и RMSprop и, следовательно, имеет тенденцию к лучшему решению большинства проблем.

4) Стохастический градиентный спуск является очень простым и редко используется в настоящее время. Одна проблема связана с глобальной скоростью обучения, связанной с тем же. Следовательно, он не работает хорошо, когда параметры находятся в разных масштабах, поскольку низкая скорость обучения замедляет обучение, а большая скорость обучения может привести к колебаниям. Также стохастическому градиентному спуску, как правило, трудно избежать седловых точек. Adagrad, Adadelta, RMSprop и ADAM обычно лучше обрабатывают седловые точки. SGD с импульсом обеспечивает некоторую скорость оптимизации, а также помогает лучше избежать локальных минимумов.

Santanu_Pattanayak
источник
2

Мой личный подход состоит в том, чтобы выбрать оптимизатор, который является самым новым (то есть самым новым, опубликованным в рецензируемом журнале), потому что они обычно сообщают результаты в стандартных наборах данных, или в лучшем состоянии, или в обоих. Например, когда я использую Caffe, я всегда использую Адама ( http://arxiv.org/abs/1412.6980 ).

mprat
источник
0
Nadam(lr=0.002, beta_1=0.9, beta_2=0.999, epsilon=None, schedule_decay=0.004)

Очень похоже на Adamэто RMSpropс импульсом, Nadamэто Адам RMSpropс Нестеровым импульсом.

Риго
источник