Мы вместе изучим различные типы алгоритмов оптимизации на основе градиента. Мотивация, стоящая за этим постом, состоит в том, чтобы дать интуитивное представление о работе алгоритмов оптимизации.

Пост выглядит следующим образом:

  1. Введение
  2. Градиентный спуск
  3. SGD с Momentum
  4. Ускоренный градиент Нестерова
  5. Адаград
  6. Ададельта и RMSprop
  7. Адам
  8. Как выбрать алгоритм
  9. Заключение

1. Введение

Градиентный спуск – это итеративный алгоритм оптимизации первого порядка для нахождения локального минимума дифференцируемой функции. Процесс минимизации (или максимизации) любого математического выражения называется оптимизацией.

Давайте посмотрим на оптимизацию с точки зрения нейронной сети.

Оптимизаторы — это алгоритмы или методы, используемые для изменения атрибутов нейронной сети, таких как веса ​​[w1,w2,w3] и скорость обучения (η), для уменьшения потерь.

Прежде чем мы углубимся в алгоритмы, давайте посмотрим, что дали нам Исаак Ньютон и Готфрид Лейбниц.

Да, вы правильно поняли, давайте освежим наши вычисления.

Спуск с холма

Представьте, что у нас есть функция L(W), которую мы хотим минимизировать.

Для простоты мы предполагаем, что W является скалярным (одномерным) входом для функции L. Мы можем расширить эту идею для многомерности.

У нас есть только один минимум при W = 0

Теперь предположим, что L(W) выглядит так.

Здесь у нас есть несколько минимумов и максимумов.

Как в минимуме, так и в максимуме dL/dW =0

Касательная всегда параллельна оси X, даже в седловой точке.

Выпуклые функции

Интуиция.

Возьмите любые две точки {a и b} в одной области и соедините их кратчайшей линией, если все точки прямой ab лежат в одной области, это выпуклая функция.

Выпуклые функции как только один минимум или максимум.

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

ПРИМЕЧАНИЕ. В глубоком обучении невыпуклые поверхности, что означает, что у нас может быть несколько критических точек.

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

Основываясь на приведенном выше введении, мы можем ответить на вопрос.

Q) Почему мы используем Squared loss?

Ответ:) Основная причина заключается в том, что квадрат производной потерь дает набор параметров с одним значением и, следовательно, дает одно уникальное решение.

2. Градиентный спуск

  1. Ванильный градиентный спуск, вычисляет градиент функции стоимости относительно. к параметрам X для всего обучающего набора данных
  2. Стохастический градиентный спуск (SGD), напротив, выполняет обновление параметров для каждого обучающего примера случайным образом.
  3. Мини-пакетный градиентный спуск, наконец, берет лучшее из обоих миров и выполняет обновление для каждого случайного подмножества из k точек в нашем наборе данных.

ПРИМЕЧАНИЕ. Мини-пакетный градиентный спуск является приближенным к ванильному градиентному спуску.

3. Пакетная обработка SGD с помощью Momentum.

Поскольку мы можем заметить, что SGD дает нам очень зашумленные обновления градиентов, поэтому для устранения шума был введен этот Momentum.

Предположим, что с SGD мы получаем обновления на каждой итерации t следующим образом:

При t =1 получаем a_1

При t = 2 получаем a_2

и так далее.

Теперь, что мы можем сделать, это:

At t = 1:

Пусть v_1 = a_1

At t =2

Пусть v_2 = alpha*a_2 и {0≤alpha≤1}

Случай — 1: если альфа == 1

получаем, v_2 =v_1+a_2

Случай — 2: если альфа == 0

получаем, v_2 = a_2

Случай — 3: если альфа ==0,5

получаем, v_2 =0.5*v_1 +a_2

ПРИМЕЧАНИЕ. Из приведенных выше трех случаев мы наблюдаем, что это значение альфы помогает нам количественно определить, «сколько информации мы должны учитывать из предыдущего обновления».

Обобщая это, мы получаем:

  1. v_1 = a_1
  2. v_2 = альфа*v_1+ a_2
  3. v_3 = альфа*v_2+ a_3

Развернув v_3 получаем:

4. v_3 = альфа(альфа*v_1+a_2)+a_3

= альфа² * a_1 + альфа¹ * a_2 + альфа⁰ * a_3

so,

5.v_t = альфа*v_t-1 +a_t

ПРИМЕЧАНИЕ. Уравнение 5 носит рекурсивный характер.

Теперь давайте объединим идею экспоненциального средневзвешенного значения с SGD.

Мы получили,

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

4. Нестеров Ускоренный градиент.

Юрий Нестеров — российский математик, всемирно признанный эксперт в области выпуклой оптимизации, особенно в области разработки эффективных алгоритмов и численного оптимизационного анализа. В настоящее время он является профессором Лувенского университета (UCLouvain).

Чем мы занимаемся в НАГ:

  1. Сначала вычислите импульс.
  2. Двигайтесь в направлении импульса.
  3. Затем вычислите градиент в той новой точке, куда мы переместились.

Итак, мы получаем следующее:

NAG сначала делает большой скачок в направлении предыдущего накопленного градиента, измеряет градиент, а затем вносит поправку, что приводит к полному обновлению NAG. Это упреждающее обновление не позволяет нам работать слишком быстро и приводит к увеличению скорости отклика.

5. Адаград

В SGD и SGD + Momentum скорость обучения η = некоторое значение, одинаковое для каждого веса.

Идея: у нас есть адаптивная скорость обучения для каждого веса, т. е. каждый вес имеет разную скорость обучения.

Зачем нужна эта Идея?

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

Главной слабостью Adagrad является накопление квадратов градиентов в знаменателе: поскольку каждый добавленный член положителен, накопленная сумма продолжает расти во время обучения. Это, в свою очередь, приводит к тому, что скорость обучения сокращается и в конечном итоге становится бесконечно малой.

По мере увеличения t t-1 также увеличивается, а η’_t уменьшается, поэтому при увеличении итерации скорость обучения для этого веса значительно снижается.

6. Ададельта и RMSprop.

Итак, мы увидели проблему Адаграда в том, что alpha_t становится очень маленьким, что приводит к медленной сходимости.

RMSprop — это метод, предложенный Джеффом Хинтоном в Лекции 6e его курса Coursera.

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

Идея: что если использовать метод экспоненциального затухания вместо суммы квадратов, как мы видели в Адаграде.

Давайте посмотрим, как это работает:

В Adadelta мы берем экспоненциальное среднее gi² вместо суммы gi², как мы видели в Adagrad, чтобы избежать большого знаменателя в η’_t, что позволяет избежать медленной сходимости.

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

7. Адам — — Адаптивная оценка момента:

Идея: что, если мы сохраним экспоненциальное затухание среднего значения g_t(eda) также:

Давайте посмотрим, как это выглядит:

Авторы предлагают значения по умолчанию 0,9 для β1β1, 0,999 для β2β2 и 10-8·10-8 для ϵϵ. Они эмпирически показывают, что Адам хорошо работает на практике и выгодно отличается от других алгоритмов адаптивного метода обучения.

8. Как выбрать алгоритм

  1. В большинстве случаев Адам работает лучше других алгоритмов
  2. Если наш Loss строго выпуклый, то импульс будет сходиться быстрее, но для точки минимума он может немного колебаться.
  3. Если размер функции стоимости очень высок, то адаптивное обучение также даст лучший результат, потому что оно дает нам контроль над тем, сколько нам нужно спускаться в каждом направлении.
  4. Могут быть случаи, когда ададельта и адаград попадают в седловидные области, но в многомерном пространстве признаков вероятность очень мала.
  5. Делайте градиентную проверку в каждую эпоху, чтобы увидеть, как оптимизаторы работают с активациями. Некоторое время это помогает нам обнаружить проблему исчезающего градиента.

Есть еще много алгоритмов для изучения, таких как AdaMax, Nadam, AMSGrad. После AMSGrad был предложен ряд других оптимизаторов. К ним относятся AdamW, который фиксирует потерю веса в Адаме; QHAdam , который усредняет стандартный шаг SGD с шагом импульса SGD; и AggMo , который объединяет несколько терминов импульса γγ; и другие.

Вывод

Сначала мы рассмотрели три варианта градиентного спуска, среди которых мини-пакетный градиентный спуск является наиболее популярным. Затем мы исследовали алгоритмы, наиболее часто используемые для оптимизации SGD: Momentum, ускоренный градиент Нестерова, Adagrad, Adadelta, RMSprop, Adam. Я надеюсь, что эта запись в блоге смогла предоставить вам некоторое интуитивное представление о мотивации и поведении различных алгоритмов оптимизации.

Пожалуйста, не стесняйтесь комментировать и указывать на любые ошибки и допущенные ошибки. :)