("Комментарии")

TL; DR Адам хорошо работает на практике и превосходит другие адаптивные техники.

Используйте SGD + Nesterov для мелких сетей и Adam или RMSprop для глубоких сетей.

Ранее на этой неделе я проходил курс 2 Улучшение глубоких нейронных сетей на Coursera. Неделя №2 этого курса была посвящена алгоритмам оптимизации. Я считаю полезным развить лучшую интуицию о том, как работают различные алгоритмы оптимизации, даже если нас интересует только ПРИМЕНЕНИЕ глубокого обучения к реальным проблемам.

Вот некоторые выводы и вещи, которые я узнал в результате некоторых исследований.

Адам

Адам: оценка адаптивного момента

Адам = RMSprop + Momentum

К некоторым преимуществам Адама можно отнести:

  • Относительно низкие требования к памяти (хотя и выше, чем градиентный спуск и градиентный спуск с импульсом)
  • Обычно хорошо работает даже при небольшой настройке гиперпараметров.

В Керасе это можно определить так.

keras.optimizers.Adam(lr=0.001)

Что такое моментум?

Momentum учитывает прошлые градиенты, чтобы сгладить шаги градиентного спуска. Его можно применять с пакетным градиентным спуском, мини-пакетным градиентным спуском или стохастическим градиентным спуском.

Стохастический градиентный спуск (SGD)

В Керасе это можно сделать, чтобы включить SGD + Nesterov, это хорошо работает для неглубоких сетей.

keras.optimizers.SGD(lr=0.01, nesterov=True)

Что такое Нестеровский импульс?

Ускоренный градиент Нестерова (НАГ)

Интуиция, как это работает для ускорения градиентного спуска.

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

Вот анимированный градиентный спуск с несколькими оптимизаторами.

Изображение предоставлено: CS231n

Обратите внимание, что два оптимизатора, основанных на импульсе (Green-Momentum, Purple-NAG), имеют перескакивающее действие, подобное мячу, катящемуся по склону.

Импульс Нестерова имеет немного меньшее превышение по сравнению со стандартным импульсом, поскольку он использует подход «риск-› коррекция », показанный ниже.

Адаград

Он делает большие обновления для нечастых параметров и небольшие обновления для частых параметров. По этой причине он хорошо подходит для работы с разреженными данными.

Основное преимущество Adagrad заключается в том, что нам не нужно вручную настраивать скорость обучения. Большинство реализаций используют значение по умолчанию 0,01 и оставляют его на этом уровне.

Недостаток -

Его главная слабость в том, что скорость его обучения постоянно уменьшается и ухудшается.

АдаДельта

Это расширение AdaGrad, которое устраняет проблему снижения скорости обучения.

Еще одна особенность AdaDelta заключается в том, что нам даже не нужно устанавливать скорость обучения по умолчанию.

Дальнейшее чтение

Сверточные нейронные сети CS231n для визуального распознавания

Keras doc Использование оптимизаторов

Курс 2« Улучшение глубоких нейронных сетей от Coursera

Первоначально опубликовано на www.dlology.com.