Импульс – это расширение алгоритма Оптимизации (Optimization) Градиентного спуска (Gradient Descent), которое позволяет функции поиска создавать инерцию в пространстве, преодолевать колебания шумных градиентов и двигаться по ровным участкам пространства с целью достигнуть точки Локального минимума (Local Minima).
Градиентный спуск – это алгоритм оптимизации, который следует отрицательному градиенту целевой функции, чтобы найти ее минимум.
Проблема с градиентным спуском заключается в том, что он может перемещаться по пространству поиска в задачах оптимизации, которые имеют большое количество кривизны или Шума (Noise), и застревает в плоских участках, где нет градиента.
Основная идея импульса в Машинном обучении (ML) – увеличить скорость обучения. Эта концепция – один из тех маленьких наворотов, которые, может, не так важны, но в действительности позволяют сэкономить время и значительно упрощают процесс.
Он в основном используется в Нейронных сетях (Neural Network), учитывая, что размер данных здесь провоцирует значительные временные затраты. Порой градиентный спуск может занять много времени, когда Датасет (Dataset) достаточно велик.
Плюсы:
Минусы:
Прежде чем мы начнем, вот небольшой пересмотр основ градиентного спуска. Мы будем обсуждать 2 типа методов обновления – Простое обновление импульса, Обновление импульса Нестерова.
Идея импульса заключается в том, чтобы подобрать именно такую величину шага (скорость обучения), чтобы целевая функция попала в точку локального минимума, а не перескочила ее.
Урок физики начался. Ну вот как это происходит.
Подумайте о потере как о американских горках, представьте, что она имеет потенциальную энергию PE, равную произведению массы, силы тяжести и высоты.
Когда градиент находится наверху, мы хотим, чтобы он шел вниз быстрее, а когда внизу, – чтобы он замедлялся и "поймал" точку минимума.
$$v_2 = mu * v_1 - LR * dw $$
$$v_2\space{}{–}\space{скорость}\space{новой}\space{эпохи,}$$
$$mu\space{}{–}\space{ммпульс,}$$
$$v_1\space{}{–}\space{скорость}\space{предыдущей}\space{эпохи,}$$
$$LR\space{}{–}\space{скорость}\space{обучения,}$$
$$dw\space{}{–}\space{изменение}\space{весов}$$
v – как бы обозначает скорость, которая инициализируется нулем (с вершины холма), mu – импульс. Думайте об этом как о коэффициенте трения, который будет противодействовать v, когда он "идет с горки". Обычно значение находится в диапазоне (0,1–0,9) и изначально принимается равным 0,9.
Эта переменная гасит энергию системы, позволяя v снова в нужный момент принять нулевое значение в точке минимума. Иногда мы меняем значение mu с 0,5 до 0,9 в течение нескольких эпох для дальнейшей оптимизации, что обеспечивает относительно небольшой прирост скорости системы.
Импульс Нестерова (Nesterov Momentum) – это дальний родственник обычного обновления импульса, но он довольно популярен из-за последовательности в получении минимумов и скорости, с которой это происходит.
Итак, основная концепция импульса Нестерова заключается в том, что, если вы знаете скорость и направление объекта, вы можете предсказать его местоположение во времени T.
(Слева) вместо того, чтобы идти в сторону градиентного шага, иногда движение идет в другом направлении, теряя время. (Справа) импульс Нестерова вычисляет шаг, который нужно сделать в будущем, и предпринимает корректирующие действия.
Скажем, текущий вектор в позиции x
, скорость mu * v
. Чтобы предсказать, где эта точка окажется во времени t (следующий шаг), используем уравнение x + mu * v
. Мы можем использовать это как прогноз для функции и отрегулировать движение градиента, чтобы занять правильное положение.
Автор оригинальной статьи: Abhinav Mahapatra
© Лена Капаца. Все права защищены.