Метод инерции Поляка
Материал из MachineLearning.
| Строка 4: | Строка 4: | ||
== Метод инерции Поляка (Momentum) == | == Метод инерции Поляка (Momentum) == | ||
| - | '''Метод инерции Поляка''' (также известный как ''Heavy Ball method'' или ''Momentum'') — это популярная модификация алгоритма [[Градиентный спуск|градиентного спуска]], предложенная советским математиком Борисом Теодоровичем Поляком в 1964 году. Этот метод значительно ускоряет сходимость при обучении моделей [[Машинное обучение|машинного обучения]] (включая [[ | + | '''Метод инерции Поляка''' (также известный как ''Heavy Ball method'' или ''Momentum'') — это популярная модификация алгоритма [[Градиентный спуск|градиентного спуска]], предложенная советским математиком Борисом Теодоровичем Поляком в 1964 году. Этот метод значительно ускоряет сходимость при обучении моделей [[Машинное обучение|машинного обучения]] (включая [[Глубокие нейронные сети|глубокие нейронные сети]]), решая фундаментальные проблемы классического градиентного спуска. |
== Физическая интуиция: Тяжёлый шарик в овраге == | == Физическая интуиция: Тяжёлый шарик в овраге == | ||
| Строка 13: | Строка 13: | ||
Метод Поляка меняет правила игры. Представьте себе '''тяжёлый металлический шарик''', который мы отпускаем катиться на дно оврага. | Метод Поляка меняет правила игры. Представьте себе '''тяжёлый металлический шарик''', который мы отпускаем катиться на дно оврага. | ||
| - | * '''Ландшафт''' — это поверхность нашей [[Функция потерь|функции потерь]] <tex>\mathcal{L}</tex> (или эмпирического риска <tex>Q</tex>). | + | * '''Ландшафт''' — это поверхность нашей [[Функция потерь|функции потерь]] <tex>\mathcal{L}</tex> (или [[Минимизация эмпирического риска|эмпирического риска]] <tex>Q</tex>). |
* '''Уклон ландшафта''' в данной точке — это [[Градиент|градиент]] <tex>\nabla \mathcal{L}</tex>, который создаёт силу, тянущую шарик вниз. | * '''Уклон ландшафта''' в данной точке — это [[Градиент|градиент]] <tex>\nabla \mathcal{L}</tex>, который создаёт силу, тянущую шарик вниз. | ||
* '''Масса шарика''' задаёт его инерцию. Если шарик уже разогнался в определённом направлении, он продолжит двигаться по инерции, даже если локальный уклон вдруг изменится. | * '''Масса шарика''' задаёт его инерцию. Если шарик уже разогнался в определённом направлении, он продолжит двигаться по инерции, даже если локальный уклон вдруг изменится. | ||
| Строка 33: | Строка 33: | ||
* <tex>w</tex> — параметры (веса) модели. | * <tex>w</tex> — параметры (веса) модели. | ||
* <tex>v</tex> — накопленная скорость (импульс). | * <tex>v</tex> — накопленная скорость (импульс). | ||
| - | * <tex>\nabla \mathcal{L}(w)</tex> — вектор градиента функции потерь в текущей точке. | + | * <tex>\nabla \mathcal{L}(w)</tex> — вектор [[Градиент|градиента]] функции потерь в текущей точке. |
* <tex>h</tex> — размер шага (learning rate). | * <tex>h</tex> — размер шага (learning rate). | ||
* <tex>\gamma</tex> — коэффициент инерции (momentum decay, обычно берётся равным <tex>0.9</tex>). Он играет роль силы трения: если бы <tex>\gamma = 1</tex>, наш шарик катился бы вечно, никогда не останавливаясь. При <tex>\gamma < 1</tex> шарик теряет часть энергии и в итоге оседает на дне. | * <tex>\gamma</tex> — коэффициент инерции (momentum decay, обычно берётся равным <tex>0.9</tex>). Он играет роль силы трения: если бы <tex>\gamma = 1</tex>, наш шарик катился бы вечно, никогда не останавливаясь. При <tex>\gamma < 1</tex> шарик теряет часть энергии и в итоге оседает на дне. | ||
| Строка 46: | Строка 46: | ||
=== 3. Важное свойство: Немонотонность === | === 3. Важное свойство: Немонотонность === | ||
| - | Следует понимать критическое отличие инерционных методов от базовых. Из-за массы шарик может разогнаться так сильно, что '''проскочит''' дно локального минимума и начнёт закатываться на противоположный склон. Поэтому метод является '''немонотонным''': значение ошибки <tex>\mathcal{L}(w)</tex> в процессе обучения может временно возрастать. Однако именно это свойство позволяет выпрыгивать из мелких локальных минимумов и находить более оптимальные решения. | + | Следует понимать критическое отличие инерционных методов от базовых. Из-за массы шарик может разогнаться так сильно, что '''проскочит''' дно локального минимума и начнёт закатываться на противоположный склон. Поэтому метод является '''немонотонным''': значение ошибки <tex>\mathcal{L}(w)</tex> в процессе обучения может временно возрастать. Однако именно это свойство позволяет выпрыгивать из мелких локальных минимумов и находить более [[Оптимизация|оптимальные]] решения. |
== Сравнение с Ускоренным градиентом Нестерова (NAG) == | == Сравнение с Ускоренным градиентом Нестерова (NAG) == | ||
| - | В 1983 году выдающийся советский математик Юрий Евгеньевич Нестеров предложил развитие метода Поляка — Nesterov Accelerated Gradient (NAG). Если метод Поляка — это просто тяжёлый шарик, то метод Нестерова — это шарик с зачатками интеллекта. | + | В 1983 году выдающийся советский математик Юрий Евгеньевич Нестеров предложил развитие метода Поляка — [[Ускоренный градиент Нестерова|Nesterov Accelerated Gradient (NAG)]]. Если метод Поляка — это просто тяжёлый шарик, то метод Нестерова — это шарик с зачатками интеллекта. |
Разница кроется в точке вычисления градиента. В методе Поляка мы: | Разница кроется в точке вычисления градиента. В методе Поляка мы: | ||
| Строка 103: | Строка 103: | ||
* [[Стохастический градиентный спуск]] | * [[Стохастический градиентный спуск]] | ||
* [[Минимизация эмпирического риска]] | * [[Минимизация эмпирического риска]] | ||
| + | * [[Ускоренный градиент Нестерова]] | ||
| + | * [[Оптимизация]] | ||
== Литература == | == Литература == | ||
Текущая версия
| | Статья написана с использованием LLM Gemini 3.1 Pro Preview и проверена участником Polina Khadralinova |
Промпт приводится полностью в Обсуждение:Метод инерции Поляка
Содержание |
Метод инерции Поляка (Momentum)
Метод инерции Поляка (также известный как Heavy Ball method или Momentum) — это популярная модификация алгоритма градиентного спуска, предложенная советским математиком Борисом Теодоровичем Поляком в 1964 году. Этот метод значительно ускоряет сходимость при обучении моделей машинного обучения (включая глубокие нейронные сети), решая фундаментальные проблемы классического градиентного спуска.
Физическая интуиция: Тяжёлый шарик в овраге
Чтобы понять суть метода, давайте отвлечёмся от строгой математики и представим себе физическую картину.
Обычный градиентный спуск можно сравнить с человеком, который спускается с горы в густом тумане с завязанными глазами. На каждом шаге он просто нащупывает ногой, где уклон максимален, и делает шаг туда. У него нет памяти: каждый новый шаг не зависит от предыдущего. Из-за этого на сложном ландшафте его путь будет очень дёрганым.
Метод Поляка меняет правила игры. Представьте себе тяжёлый металлический шарик, который мы отпускаем катиться на дно оврага.
- Ландшафт — это поверхность нашей функции потерь
(или эмпирического риска
).
- Уклон ландшафта в данной точке — это градиент
, который создаёт силу, тянущую шарик вниз.
- Масса шарика задаёт его инерцию. Если шарик уже разогнался в определённом направлении, он продолжит двигаться по инерции, даже если локальный уклон вдруг изменится.
Благодаря этой массе шарик плавно сглаживает неровности рельефа и стремительно несётся к глобальному минимуму, накапливая скорость на затяжных спусках.
Математическая формулировка
В классическом градиентном спуске вектор весов обновляется только на основе текущего антиградиента с темпом обучения (шагом)
:
В методе Momentum мы вводим новую переменную — вектор скорости (вектор импульса). Теперь градиент не меняет напрямую веса
, он лишь изменяет скорость
, а уже скорость двигает веса.
Математически шаг оптимизатора записывается следующей системой уравнений (в форме экспоненциального скользящего среднего):
Где:
-
— параметры (веса) модели.
-
— накопленная скорость (импульс).
-
— вектор градиента функции потерь в текущей точке.
-
— размер шага (learning rate).
-
— коэффициент инерции (momentum decay, обычно берётся равным
). Он играет роль силы трения: если бы
, наш шарик катился бы вечно, никогда не останавливаясь. При
шарик теряет часть энергии и в итоге оседает на дне.
Преимущества метода
1. Преодоление «оврагов»
Функции потерь часто имеют форму узких оврагов (когда по одной оси градиент огромный, а по другой — почти нулевой). Классический градиентный спуск начинает метаться от стенки к стенке (зигзаги), продвигаясь вдоль дна оврага мучительно медленно. Метод Поляка решает эту проблему: поперечные градиенты имеют разные знаки и при сложении (в векторе ) гасят друг друга, а продольные градиенты имеют одинаковый знак и накапливаются. Шарик перестаёт биться о стены и устремляется вперёд.
2. Выход из седловых точек
В седловых точках градиент . Обычный алгоритм здесь навсегда остановится. Но наш шарик, имея накопленную скорость
, просто пролетит это плоское место по инерции и покатится дальше вниз.
3. Важное свойство: Немонотонность
Следует понимать критическое отличие инерционных методов от базовых. Из-за массы шарик может разогнаться так сильно, что проскочит дно локального минимума и начнёт закатываться на противоположный склон. Поэтому метод является немонотонным: значение ошибки в процессе обучения может временно возрастать. Однако именно это свойство позволяет выпрыгивать из мелких локальных минимумов и находить более оптимальные решения.
Сравнение с Ускоренным градиентом Нестерова (NAG)
В 1983 году выдающийся советский математик Юрий Евгеньевич Нестеров предложил развитие метода Поляка — Nesterov Accelerated Gradient (NAG). Если метод Поляка — это просто тяжёлый шарик, то метод Нестерова — это шарик с зачатками интеллекта.
Разница кроется в точке вычисления градиента. В методе Поляка мы:
1. Считаем градиент в текущей точке
.
2. Добавляем его к вектору скорости.
3. Делаем шаг.
Но ведь благодаря инерции мы уже заранее знаем, что нас в любом случае снесёт в направлении вектора ! Логика Нестерова: давайте сделаем заглядывание вперёд (lookahead). Мы сначала «виртуально» прыгнем туда, куда нас несёт инерция (в точку
), и посчитаем градиент уже там.
Формулы NAG:
Это позволяет алгоритму «затормозить» до того, как он начнёт закатываться на крутой холм. Если в будущей точке уклон идёт вверх, градиент сменит знак и погасит скорость превентивно, уменьшая осцилляции.
Реализация на Python
Ниже представлена лаконичная, но полностью рабочая реализация метода инерции Поляка с использованием библиотеки NumPy. Этот код можно интегрировать в кастомные циклы обучения.
import numpy as np class PolyakMomentum: def __init__(self, learning_rate: float = 0.01, gamma: float = 0.9): # Инициализация оптимизатора. # lr: размер шага (h). # gamma: коэффициент инерции. self.lr = learning_rate self.gamma = gamma self.v = None # Вектор скорости инициализируется нулями при первом шаге def step(self, w: np.ndarray, grad: np.ndarray) -> np.ndarray: # Делает один шаг оптимизации. # w: текущие веса. # grad: градиент функции потерь в точке w. # Возвращает обновленные веса w_new. # Ленивая инициализация вектора скорости if self.v is None: self.v = np.zeros_like(w) # Формула обновления скорости v через экспоненциальное скользящее среднее self.v = self.gamma * self.v + (1 - self.gamma) * grad # Обновление весов w w_new = w - self.lr * self.v return w_new
См. также
- Стохастический градиентный спуск
- Минимизация эмпирического риска
- Ускоренный градиент Нестерова
- Оптимизация
Литература
- Поляк Б. Т. Некоторые способы ускорения сходимости итерационных методов // Журнал вычислительной математики и математической физики. — 1964. — Т. 4. — № 5. — С. 791–803.
- Нестеров Ю. Е. Метод минимизации выпуклых функций со скоростью сходимости
// Доклады АН СССР. — 1983. — Т. 269. — № 3. — С. 543–547.

