Я использую нейронные сети уже некоторое время. Тем не менее, одна вещь, с которой я постоянно борюсь, это выбор оптимизатора для обучения сети (используя backprop). Что я обычно делаю, так это просто начинаю с одного (например, стандартного SGD), а затем пробую другие другие довольно случайно. Мне было интересно, есть ли лучший (и менее случайный) подход к поиску хорошего оптимизатора, например, из этого списка:
- SGD (с или без импульса)
- AdaDelta
- AdaGrad
- RMSProp
- Адам
В частности, мне интересно, есть ли какое-то теоретическое обоснование для выбора одного над другим, учитывая, что тренировочные данные имеют какое-то свойство, например, они редки. Я также предположил бы, что некоторые оптимизаторы работают лучше, чем другие в определенных областях, например, при обучении сверточных сетей против сетей прямой связи или классификации против регрессии.
Если кто-то из вас разработал стратегию и / или интуицию о том, как вы выбираете оптимизаторы, мне было бы очень интересно услышать это. Кроме того, если есть какая-то работа, которая обеспечивает теоретическое обоснование выбора одного над другим, это было бы еще лучше.
источник