Обзор алгоритмов оптимизации градиентного спуска

Google искусственный интеллект TensorFlow алгоритм

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

Рисунок 1

Функция потерь J Как показано на рисунке 1, точка B является самой низкой точкой функции, а точка A устанавливается в качестве начального значения, тогда роль оптимизатора состоит в том, чтобы направить точку начального значения A к самой низкой точке B, поэтому как ускорить этот процесс???

Узнайте о градиентном спуске!

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

Основываясь на изложенных выше концепциях, мы далее понимаемПакетное обновление градиента BGD, как следует из названия, он вычисляет все выборки за один раз, чтобы получить значение градиента, а затем обновляет параметры. Этот метод очень прост, он может сходиться к глобальному оптимуму для выпуклых функций и к локальному оптимуму для невыпуклых функций. В то же время его недостатки очевидны: при большом объеме данных использование памяти огромно, время расчета велико, и он не может быть обновлен в режиме онлайн.

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

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

  • Трудно выбрать подходящую начальную скорость обучения, слишком большая скорость обучения будет препятствовать сходимости, заставляя функцию потерь колебаться вокруг минимума или даже отклоняться от минимума;

  • В процессе оптимизации невыпуклой функции потерь существует большое количество локальных оптимальных решений или седловых точек;

  • Параметры обновляются с той же скоростью обучения.

В ответ на вышеуказанные вызовы мы перечислим некоторыеоптимизация.

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

Как показано в приведенной выше формуле, метод импульса добавляет произведение значения градиента и скорости затухания ? к текущему значению градиента, так что предыдущее значение градиента может непрерывно накапливаться. Скорость затухания ? обычно меньше или равна 0,9. Когда алгоритм SGD с термином импульса обновляет параметры модели, для параметров, текущее направление градиента которых совпадает с последним направлением градиента, сила обновления будет увеличена; для параметров, текущее направление градиента которых отличается от последнего направления градиента , оно будет обновлено Вычитание, то есть обновление в текущем направлении градиента замедлено. Таким образом, по сравнению с SGD, импульсный метод можетсходятся быстрееуменьшить шок.

В методе импульса скорость мяча уменьшится, если он встретит подъем в процессе скатывания вниз, поэтому лучше замедлить движение до того, как он встретится с подъемом. ЭтоNAGОбщая идея состоит в том, что по сравнению с методом импульса NAG вычитает член импульса из функции потерь при вычислении градиента параметра, что эквивалентно оценке положения следующего параметра. Формула выглядит следующим образом:

Как показано на рисунке 2, синяя часть представляет собой стандартный процесс обновления метода импульса, который сначала вычисляет текущий градиент, а затем большой скачок накопленного градиента. С другой стороны, NAG сначала делает большой скачок (коричневый вектор на рисунке), а затем вычисляет градиент (красный вектор на рисунке ниже) после скачка, чтобы исправить его, чтобы получить реальное направление градиентного спуска, которое зеленый вектор на рисунке ниже. Это может избежать колебаний применительно к RNN.

фигура 2

Можно ли адаптировать скорость обучения в зависимости от важности параметров?AdagradПредлагаемая идея состоит в том, чтобы автоматически регулировать скорость обучения в процессе обучения. Используйте большую скорость обучения для параметров, которые появляются нечасто, и используйте меньшую скорость обучения для параметров, которые появляются часто. Формула Адаграда выглядит следующим образом:


сделатьПредставляет значение градиента текущего параметра.Adagrad вычисляет сумму квадратов градиентов, накопленных до шага t, в качестве знаменателя скорости обучения.

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

У Адаграда высокая ежедневная скорость использования, а также есть много «ям», которые, я надеюсь, все избегают, насколько это возможно. Взяв в качестве примера TensorFlow, θ — это член деления на ноль, но TensorFlow предоставляет только начальное значение кумулятивной суммы квадратов градиентов, и по умолчанию оно равно 0,1. Если мы установим его меньше, это приведет к тому, что начальная скорость обучения будет слишком большой. При фактическом использовании регулировка этого параметра может привести к неожиданному усилению.

AdadeltaЭто улучшенный алгоритм Адаграда, который ссылается на метод Ньютона в процессе обновления.


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

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

Выше указывалось, что Adagrad снижает скорость обучения по мере увеличения времени, что приводит к преждевременной конвергенции.AdadeltaИспользуйте экспоненциальное скользящее среднее квадратов градиентов, чтобы скорректировать изменения скорости обучения:

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

Самое большое изменение в АдаградеНетС настройками скорости обучения, но после выхода на минное поле локального минимума на более позднем этапе обучения будет многократно трястись возле локального минимума.

RMSpropЭто частный случай AdaDelta. Он был предложен Джеффом Хинтоном в открытом классе. Он регулируется экспоненциальным скользящим средним квадратом градиента. Когда обновление параметра велико, оно будет «оштрафовано». Его формула выглядит следующим образом: следует:

RMSprop имеет более медленный градиентный спуск, чем Adagrad, и широко используется в области CNN. RMSprop принимает коэффициент затухания ?=0,9 и параметр ε = 1,0 в Inception v4.

AdamАлгоритм можно рассматривать как комбинацию RMSprop и импульса:

в,– экспоненциальная скользящая средняя, ​​которую можно рассматривать как процесс импульсного метода;представляет собой экспоненциальное скользящее среднее квадрата градиента, которое представляет собой процесс RMSProp. Существует смещение из-за способа, основанного на экспоненциальных скользящих средних, особенно когда m и v инициализируются равными 0 и близки к 1 в начале снижения. С этой целью вводится процесс коррекции смещения:

Наконец, с помощью коррекции смещенияиОбновить параметры модели:


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

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

Поскольку Адам может привести к несхождению или сходимости локальных оптимальных точек, Google предложил на ICLR 2018AMSGrad, в статье упоминается такая проблема:

Для SGD и AdaGrad скорость обучения гарантированно всегда будет уменьшаться, в то время как метод, основанный на скользящем среднем, не обязательно. На самом деле есть две основные проблемы с адаптивными алгоритмами, представленными Адамом:

  • может не сходиться

  • может сходиться к локальному оптимуму

RMSprop предложит относительно большое обновление недавно увеличенного значения и медленно рассеет его эффект с увеличением ступенчатой ​​лестницы; Adagrad накапливает с квадратом градиента, поэтому метод, основанный на скользящем среднем, может не гарантировать затухание тренда. Итак, как вы гарантируете, что скорость обучения затухает?

AMSGrad обеспечивает снижение скорости обучения, беря максимальное значение текущего значения и предыдущего значения в процессе локального обновления второго порядка для вычисления Δ?.

изображение 3

Выше приведен существующий основной алгоритм оптимизации градиентного спуска.Подводя итог вышеизложенным методам, как показано на рисунке 3, значение SDG не может уйти в седловую точку; метод импульса пропустит точку после добавления кинетической энергии, когда значение градиента 0 и Adadelta Несмотря на отсутствие скорости обучения, процесс сходимости происходит очень быстро.

Наконец, мы думаем над вопросом: как использовать существующий алгоритм оптимизации, чтобы достичь уровня искусства?

С нетерпением жду ваших лучших ответов:

1.SGD + Momentum

Он широко используется в задачах CNN и NLP.


2.Adam + SGD

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