клин
Несколько дней назад я писал окончательный отчет о книге класса вычислительной математики Тема, которую я выбрал, была «Анализ различных алгоритмов оптимизации в глубоком обучении». На моей предыдущей работе я обычно был безмозглым «Адам хорош в Дафа», и я не знал смысла самого алгоритма. Я всегда надеялся найти время, чтобы систематически пройти процесс разработки алгоритмов оптимизации и интуитивно понять сильные и слабые стороны каждого алгоритма. На этот раз я просто воспользовалась возможностью сделать домашнее задание, чтобы составить урок макияжа.
Эта статья в основном опирается на
@JuliuszhИдея статьи [1] использует общую структуру для описания каждого варианта алгоритма градиентного спуска. Фактически данную статью можно рассматривать как переформулировку [1], на основании чего в недостаточно подробное описание исходного текста внесены некоторые дополнения, а также исправлены многие неверные выражения и формулы.Другой крупной справочной статьей является обзор Sebastian Ruder [2]. Эта статья очень известная и, наверное, лучшая в обзоре алгоритмов оптимизации глубокого обучения. Рекомендуется читать исходный текст напрямую. Многие выводы и иллюстрации в этой статье взяты из этого обзора.
Слишком много статей по анализу и сравнению алгоритмов оптимизации, эту статью можно рассматривать только как повторяющийся цикл, направленный на личное обучение и подведение итогов.Студенты, желающие получить более глубокое представление об алгоритме оптимизации, могут напрямую обратиться к ссылкам в конце статьи.
введение
Задача оптимизации является одним из важнейших направлений исследований в вычислительной математике. В области глубокого обучения выбор алгоритма оптимизации также является главным приоритетом модели. Даже когда набор данных и архитектура модели абсолютно одинаковы, разные алгоритмы оптимизации могут привести к очень разным результатам обучения.
Градиентный спуск — один из наиболее широко используемых алгоритмов оптимизации в нейронных сетях. Чтобы восполнить недостатки наивного градиентного спуска, исследователи изобрели серию вариантов алгоритмов, постепенно эволюционирующих от исходного SGD (стохастический градиентный спуск) к NAdam. Тем не менее, многие из самых передовых статей в академическом мире не используют слепо самоадаптивные алгоритмы, которые признаны «простыми в использовании», такие как Adam/NAdam, и многие даже выбирают самый простой SGD или SGD с Momentum. .
Эта статья направлена на то, чтобы разобраться в процессе разработки алгоритмов оптимизации глубокого обучения, а также проанализировать и сравнить алгоритмы оптимизации в более общей структуре.
Gradient Descent
Градиентный спуск означает, что при заданных оптимизируемых параметрах моделии целевая функцияПосле этого алгоритм проходит по градиентуобновить в обратном направлениисвести к минимуму. скорость обученияОпределяет размер шага обновления в каждый момент времени. на каждый момент, мы можем описать процесс градиентного спуска следующими шагами:
(1) Рассчитать градиент целевой функции по параметрам
(2) Рассчитать импульс первого и второго порядка на основе исторического градиента
(3) Обновить параметры модели
в,является сглаживающим членом, который предотвращает нулевое значение знаменателя, обычно 1e-8.
Градиентный спуск и варианты его алгоритма
В соответствии с приведенной выше структурой мы анализируем и сравниваем различные варианты градиентного спуска.
Vanilla SGD
Простой SGD (стохастический градиентный спуск) является самым простым, без понятия импульса, а именно
На данный момент шаг обновления является самым простым
Недостатком SGD является то, что он медленно сходится и может колебаться в седловой точке. Более того, как разумно выбрать скорость обучения, является основной трудностью SGD.
Momentum
SGD склонен к шоку при столкновении с оврагами. Для этого в него можно ввести Momentum[3], который ускоряет спуск SGD в правильном направлении и подавляет колебание.
В дополнение к исходному размеру шага SGD-M добавляет размер шага, относящийся к предыдущему моменту.,Обычно берется около 0,9. Это означает, что направление обновления параметра определяется не только текущим градиентом, но также связано с предыдущим накопленным направлением спуска. Это позволяет изменять размеры параметров, направления градиента которых не сильно меняются, чтобы ускорить обновление и уменьшить величину обновлений измерений, где направления градиента сильно меняются. Это приводит к ускорению сходимости и уменьшению колебаний.
Как видно из рисунка 1, введение импульса эффективно ускоряет процесс сходимости градиентного спуска.
Nesterov Accelerated Gradient
Кроме того, есть надежда, что нисходящий процесс будет более интеллектуальным: алгоритм может замедлить скорость обновления до того, как целевая функция начнет увеличиваться.
Для этого предназначен NAG, и он дополнительно улучшает формулу расчета градиента на шаге 1 на основе SGD-M:
Ссылаясь на рисунок 2, размер шага SGD-M вычисляет текущий градиент (короткий синий вектор) и момент импульса (длинный синий вектор). Однако, поскольку для обновления использовался термин импульса, давайте сначала рассчитаем следующий момент, и вычислить градиент (красный вектор) от этого будущего положения, а затем вычислить размер шага (зеленый вектор) так же, как в SGD-M. Такой способ расчета градиентов позволяет алгоритму лучше «предсказывать будущее» и заранее регулировать частоту обновления.
Adagrad
SGD, SGD-M и NAG обновляются с одинаковой скоростью обучения.каждого компонента. В моделях глубокого обучения часто задействовано большое количество параметров, и частота обновления разных параметров часто бывает разной. Для параметров, которые обновляются нечасто (типичный пример: обновление низкочастотных слов при встраивании слов), мы надеемся, что размер одного шага будет больше, чтобы получить больше знаний; для часто обновляемых параметров мы надеемся, что размер шага будет небольшим, так что изученные параметры более стабильны и не будут слишком сильно зависеть от одного образца.
Алгоритм Adagrad[4] позволяет достичь этого эффекта. Он вводит импульс второго порядка:
в,— диагональная матрица, элементы которойдля параметраизмерение от начального момента до моментаСумма квадратов градиента.
На данный момент это можно понять следующим образом: скорость обучения эквивалентна. Для параметров, которые ранее часто обновлялись, соответствующая составляющая импульса второго порядка больше, а скорость обучения меньше. Этот метод хорошо работает в сценариях с разреженными данными.
RMSprop
В Адаграде,монотонно увеличивается, в результате чего скорость обучения постепенно снижается до 0, что может привести к преждевременному завершению процесса обучения. Чтобы исправить этот недостаток, мы можем рассмотреть возможность не накапливать все исторические градиенты при расчете импульса второго порядка, а сосредоточиться только на нисходящих градиентах в недавнем временном окне. По этой идее есть RMSprop[5]. Помнитеза,имеют
Его импульс второго порядка рассчитывается с использованием формулы экспоненциального скользящего среднего, что позволяет избежать проблемы непрерывного накопления импульса второго порядка. Аналогично параметрам в СГД-М,Обычно берется около 0,9.
Adadelta
Быть добавленным
Adam
Adam[6] можно рассматривать как комбинацию RMSprop и Momentum. Подобно тому, как RMSprop использует экспоненциальную скользящую среднюю для импульса второго порядка, Адам использует экспоненциальную скользящую среднюю для импульса первого порядка.
Среди них начальное значение
Обратите внимание, что на начальном этапе итерациииИмеется смещение к начальному значению (слишком большое смещение к 0). Следовательно, импульс первого и второго порядка может быть скорректирован с учетом смещения (коррекция смещения),
обновить снова,
Это может гарантировать, что итерация будет относительно стабильной.
NAdam
НАдам[7] включает в себя идею НАГ поверх Адама.
Сначала просмотрите формулу NAG,
Суть NAG заключается в том, что для расчета градиента используется «будущая позиция».. В НАдам предложена идея деформации формулы [7].Общую идею можно понять так: пока при расчете градиента можно учитывать «фактор будущего», можно достичь эффекта Нестерова; случае, при расчете градиента можно еще использовать исходную формулу, но рассчитано на предыдущей итерации, используется импульс будущего момента, т.е., то теоретически достигаемый эффект аналогичен.
В настоящее время формула изменена на
Теоретически импульс в следующий момент равен, в предположении, что градиент двух последовательных моментов времени сильно не меняется, т. е.,имеют. На этом этапе вы можете использоватьПриблизительное представление будущего импульса, добавленного кв итерационной формуле.
Точно так же в Адаме вы можете присоединитьсядеформация, волярасширяться с
вводить
обновить снова,
Эффект ускорения Нестерова можно ввести в Адама.
Визуальный анализ
На рисунках 3 и 4 наглядно показана производительность различных алгоритмов. (Изображение предоставлено:Alec Radford)
На рисунке 3 мы можем видеть процесс обучения различных алгоритмов на графике контура поверхности потерь, все они начинаются с одной и той же точки, но следуют разными путями, чтобы достичь точки минимума. Среди них Adagrad, Adadelta и RMSprop нашли правильное направление с самого начала и быстро сошлись; SGD нашла правильное направление, но скорость сходимости была очень медленной; SGD-M и NAG изначально отклоняются от курса, но также могут быть окончательно скорректирована на правильное направление, Инерция отклонения СГД-М больше, чем у НАГ.
На рис. 4 показана производительность различных алгоритмов в седловых точках. Здесь SGD, SGD-M и NAG сильно зависят от седловой точки, хотя последние два в конечном итоге избегают седловой точки; в то время как Adagrad, RMSprop и Adadelta быстро находят правильное направление.
Для обсуждения этих двух рисунков также обратитесь к [2] и [8].
Видно, что некоторые адаптивные алгоритмы показывают лучшую производительность в этих сценариях.
Обсуждаем, выбираем стратегии
Содержание обсуждения в отчете о книге относительно беспорядочно, и эта часть будет опубликована после завершения.
References
[2] An overview of gradient descent optimization algorithms
[3] On the momentum term in gradient descent learning algorithms
[4] Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
[5] CSC321 Neural Networks for Machine Learning - Lecture 6a
[6] Adam: A Method for Stochastic Optimization
[7] Incorporating Nesterov Momentum into Adam
[8] CS231n Convolutional Neural Networks for Visual Recognition