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

Это приводит к следующим проблемам.

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

Обратите внимание на поверхность ниже стоимости.

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

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

Как импульс может это исправить?

Теперь представьте, что из точки A катится мяч. Мяч начинает медленно катиться вниз и набирает импульс по склону AB. Когда мяч достигает точки B, он набирает достаточный импульс, чтобы протолкнуться через область плато B и, наконец, пройти по склону BC, чтобы приземлиться в глобальных минимумах C.

Как это можно использовать и применить к градиентному спуску?

Чтобы учесть импульс, мы можем использовать скользящее среднее по прошлым градиентам. В регионах с высоким градиентом, например AB, обновления веса будут большими. Таким образом, мы в некотором смысле набираем импульс, взяв скользящее среднее по этим градиентам. Но есть проблема с этим методом, он рассматривает все градиенты по итерациям с одинаковым весом. Градиент при t = 0 имеет такой же вес, что и градиент на текущей итерации t. Нам нужно использовать какое-то средневзвешенное значение прошлых градиентов, чтобы недавним градиентам был придан больший вес.

Это можно сделать с помощью экспоненциальной скользящей средней (EMA). Экспоненциальная скользящая средняя - это скользящая средняя, ​​которая присваивает больший вес самым последним значениям.

EMA для серии Y можно рассчитать рекурсивно.

куда

  • Коэффициент β представляет собой степень увеличения веса, постоянный коэффициент сглаживания от 0 до 1. Чем ниже β, тем быстрее отсчитываются старые наблюдения.
  • Y (t) - значение за период t.
  • S (t) - значение EMA в любой период t.

В нашем случае последовательности градиентов новое уравнение обновления веса на итерации t становится

Давайте разберемся с этим.

𝓥 (t): новое обновление веса выполняется на итерации t

β: Постоянная импульса

𝛿 (t): градиент на итерации t.

Предположим, что обновление веса на нулевой итерации t = 0 равно нулю.

Подумайте о константе β и проигнорируйте член (1-β) в приведенном выше уравнении.

Примечание: во многих текстах вы можете найти (1-β) замененным на η скорость обучения.

что, если β равно 0,1?

При n = 3; градиент при t = 3 будет вносить 100% своего значения, градиент при t = 2 будет составлять 10% своего значения, а градиент при t = 1 будет составлять только 1% своего значения.

здесь вклад более ранних градиентов быстро уменьшается.

что, если β = 0,9?

При n = 3; градиент при t = 3 будет вносить 100% своего значения, t = 2 будет составлять 90% своего значения, а градиент при t = 1 будет составлять 81% своего значения.

Исходя из вышеизложенного, мы можем сделать вывод, что более высокое значение β будет соответствовать большему количеству градиентов из прошлого. Следовательно, обычно в большинстве случаев β поддерживается на уровне 0,9.

Примечание. Фактический вклад каждого градиента в обновление веса будет зависеть от скорости обучения.

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

На поверхности стоимости, показанной ранее, увеличьте масштаб до точки C.

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

Как Momentum это исправляет?

Давайте снова посмотрим на последнее уравнение суммирования импульса.

Случай 1: когда все предыдущие градиенты имеют одинаковый знак

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

Случай 2: некоторые градиенты имеют знак + ve, а другие - -ve.

Член суммирования станет небольшим, а обновления веса будут небольшими. Если скорость обучения высока, градиент на каждой итерации вокруг впадины C будет менять свой знак между + ve и -ve, и после нескольких колебаний сумма прошлых градиентов станет небольшой. Таким образом, внесение небольших изменений в веса и гашение колебаний.

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

Заключение

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

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

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