Модуль III·Статья I·~3 мин чтения

Градиентный спуск и ускорение Нестерова

Алгоритмы первого порядка

Превратить статью в подкаст

Выберите голоса, формат и длину — AI запишет аудио

Градиентный спуск и ускорение Нестерова

Зачем нужны алгоритмы первого порядка?

Методы второго порядка (метод Ньютона) очень быстрые, но требуют вычисления и обращения матрицы Гессе — O(n³) операций за шаг. При n = 10⁶ параметров (нейросеть среднего размера) это просто невозможно. Методы первого порядка используют только градиент — O(n) операций. Они медленнее на итерацию, но каждая итерация дёшевая, что делает их незаменимыми для задач большой размерности.

Градиентный спуск: базовый алгоритм

Идея проста: двигаемся в направлении наибольшего убывания функции.

x^{k+1} = x^k − α ∇f(x^k)

Здесь α > 0 — размер шага (learning rate). При слишком большом α — алгоритм расходится. При слишком малом — очень медленная сходимость.

Класс L-гладких функций: f называется L-гладкой, если ‖∇f(x) − ∇f(y)‖ ≤ L‖x − y‖ для всех x, y. Константа L — «степень гладкости» (наибольшее собственное значение матрицы Гессе).

Теорема о сходимости: для выпуклой L-гладкой f с шагом α = 1/L:

f(x^k) − f* ≤ L‖x⁰ − x*‖² / (2k)

Это скорость O(1/k): чтобы уменьшить ошибку вдвое, нужно удвоить число итераций.

Для μ-сильно выпуклых функций (все собственные значения ∇²f ≥ μ > 0):

f(x^k) − f* ≤ (1 − μ/L)^k · (f(x⁰) − f*)

Это линейная (экспоненциальная) сходимость! Число κ = L/μ — «число обусловленности» задачи. При κ = 1 сходимость мгновенная; при κ = 1000 нужно ~4000 итераций для 4 знаков точности.

Ускорение Нестерова (1983)

Юрий Нестеров обнаружил удивительный факт: добавив «инерцию» к градиентному спуску, можно вдвое увеличить скорость сходимости без увеличения стоимости одной итерации.

Алгоритм Нестерова (NAG):

y^{k+1} = x^k − α ∇f(x^k) (шаг градиента) x^{k+1} = y^{k+1} + βₖ(y^{k+1} − y^k) (момент инерции)

где βₖ = (k−1)/(k+2) — «моментный» коэффициент, который растёт к 1.

Скорость сходимости: O(1/k²) — вдвое быстрее градиентного спуска! Это теоретически оптимально для методов первого порядка (нижняя оценка Нестерова).

Физический смысл: «инерция» не даёт застрять в «ущельях» — местах с большим κ. Шарик, катящийся с инерцией, «перелетает» узкое дно ущелья и останавливается ближе к минимуму.

Полный разбор примера

Задача: минимизировать f(x) = (1/2)(x₁² + 100x₂²) — вытянутая парабола с κ = 100.

Градиентный спуск с α = 1/L = 1/100:

x^{k+1} = x^k − (1/100)(x₁^k, 100x₂^k) = (x₁^k(1 − 1/100), x₂^k(1 − 1))

По x₂ мгновенное обнуление, по x₁ медленное: x₁^k = (99/100)^k x₁⁰. После 1000 итераций: (0.99)^{1000} ≈ 0.000045 → примерно 4-5 значимых цифр.

Нестеров: сходится за ~20√κ ≈ 200 итераций вместо 1000. Это 5-кратное ускорение при κ = 100.

Стохастический градиентный спуск (SGD)

Для задач машинного обучения: f(x) = (1/N) Σᵢ fᵢ(x). При N = 10⁶ вычисление полного градиента стоит O(N). SGD использует случайный подвыборку:

x^{k+1} = x^k − αₖ ∇fᵢ(x^k), где i выбирается случайно

Стоимость итерации: O(1) вместо O(N). Цена: «шум» в оценке градиента → нельзя использовать фиксированный шаг.

Скорость: O(1/√k) для выпуклых, O(1/k) для сильно выпуклых (при правильном затухании шага).

Адаптивные методы: Adam, RMSProp, AdaGrad — масштабируют шаг покоординатно. В глубоком обучении Adam почти всегда лучше SGD с фиксированным шагом.

Применения в машинном обучении

Вся современная нейросетевая оптимизация — это варианты SGD с моментом. GPT-4 обучался с Adam на 100+ миллиардах параметров. Ускорение Нестерова используется при обучении физических моделей, задачах сжатия, рекомендательных систем. Понимание теоретической скорости сходимости позволяет выбрать правильный алгоритм и настроить гиперпараметры.

Связь с современными библиотеками

В практике машинного обучения алгоритмы первого порядка реализованы в специализированных библиотеках: PyTorch (torch.optim.SGD, Adam, AdamW), TensorFlow (tf.keras.optimizers), JAX (optax). Все они построены вокруг градиентных методов, расширенных адаптивными шагами, моментом и нормализацией. Adam (Kingma & Ba, 2014) поддерживает экспоненциально сглаженные оценки первого и второго моментов градиента — этим он автоматически адаптирует шаг для каждой координаты, что критично при работе с разреженными или плохо обусловленными задачами. Для очень больших моделей (LLM с миллиардами параметров) применяются распределённые версии: ZeRO, FSDP, которые шардируют состояние оптимизатора между GPU.

Сравнение скорости сходимости

В выпуклой задаче:

  • Градиентный спуск: O(1/k) для гладких функций, O(1/√k) для негладких
  • Ускоренный (Нестеров): O(1/k²) — теоретический оптимум для гладких выпуклых задач
  • Прокс-методы: O(1/k) или O(1/k²) с ускорением (FISTA)
  • Стохастический градиентный спуск (SGD): O(1/√k) для выпуклых, O(1/k) с усреднением

Этот порядок сходимости определяет, сколько итераций нужно для достижения заданной точности ε: для O(1/k) нужно ~1/ε итераций, для O(1/k²) — лишь ~1/√ε. Разница колоссальная при ε = 10⁻⁶: 10⁶ против 10³ итераций.

§ Акт · что дальше