В статье Адама говорится: «... многие целевые функции состоят из суммы подфункций, оцениваемых для разных подвыборок данных; в этом случае оптимизацию можно сделать более эффективной, если предпринять шаги градиента по отдельным подфункциям ...» Здесь они просто означает, что целевая функция представляет собой сумму ошибок по сравнению с примерами обучения, и обучение может проводиться на отдельных примерах или мини-пакетах. Это то же самое, что и при стохастическом градиентном спуске (SGD), который более эффективен для крупномасштабных задач, чем пакетное обучение, поскольку обновления параметров происходят чаще.
Что касается того, почему Адам работает, он использует несколько хитростей.
Одним из таких приемов является импульс, который может дать более быструю сходимость. Представьте себе объективную функцию, которая имеет форму длинного узкого каньона, который постепенно наклоняется к минимуму. Скажем, мы хотим минимизировать эту функцию, используя градиентный спуск. Если мы начнем с некоторой точки на стене каньона, отрицательный градиент будет указывать в направлении самого крутого спуска, то есть, в основном, к дну каньона. Это потому, что стены каньона намного круче, чем постепенный наклон каньона к минимуму. Если скорость обучения (т.е. размер шага) мала, мы можем спуститься на дно каньона, а затем проследить его до минимума. Но прогресс будет медленным. Мы могли бы увеличить скорость обучения, но это не изменило бы направление шагов. В этом случае мы пролетели бы пол каньона и оказались бы на противоположной стене. Затем мы повторим этот паттерн, колебаясь от стены к стене, делая медленный прогресс в направлении минимума. Импульс может помочь в этой ситуации.
Momentum просто означает, что некоторая часть предыдущего обновления добавляется к текущему обновлению, так что повторные обновления в определенном направлении составляются; мы набираем обороты, движемся все быстрее и быстрее в этом направлении. В случае каньона мы будем наращивать импульс в направлении минимума, поскольку все обновления имеют компонент в этом направлении. Напротив, движение вперед и назад по стенкам каньона предполагает постоянное изменение направления движения, поэтому импульс поможет ослабить колебания в этих направлениях.
Еще один прием, который использует Адам, - адаптивно выбирать отдельную скорость обучения для каждого параметра. Параметры, которые обычно получают меньшие или менее частые обновления, получают большие обновления с Адамом (обратное также верно). Это ускоряет обучение в тех случаях, когда соответствующие скорости обучения варьируются в зависимости от параметров. Например, в глубоких сетях градиенты могут стать небольшими на ранних уровнях, и имеет смысл увеличить скорость обучения для соответствующих параметров. Еще одним преимуществом этого подхода является то, что, поскольку скорость обучения регулируется автоматически, ручная настройка становится менее важной. Стандарт SGD требует тщательной настройки (и, возможно, онлайн-корректировки) скоростей обучения, но это менее верно для Адама и связанных с ним методов. Все еще необходимо выбрать гиперпараметры,
Родственные методы :
Импульс часто используется со стандартным SGD. Улучшенная версия называется Нестеров импульс или Нестеров ускоренный градиент. Другие методы, которые используют автоматически настраиваемую скорость обучения для каждого параметра, включают: Adagrad, RMSprop и Adadelta. RMSprop и Adadelta решают проблему с Adagrad, которая может привести к остановке обучения. Адам похож на RMSprop с импульсом. Надам модифицирует Адама, чтобы использовать импульс Нестерова вместо классического импульса.
Рекомендации :
Кингма и Ба (2014) . Адам: метод стохастической оптимизации.
Goodfellow et al. (2016) . Глубокое обучение, глава 8.
Слайды из курса Джеффа Хинтона
Дозат (2016) . Включение Нестерова Импульса в Адама.