Оптимизация
Градиентный спуск
Цели урока
- Понимать градиент как направление наискорейшего роста и шагать против него
- Подбирать learning rate: эффекты слишком малого, слишком большого, оптимального
- Понимать сходимость через condition number kappa = L/mu
- Различать SGD, Momentum, RMSProp, Adam и знать когда какой использовать
Предварительные знания
Adam optimizer обучает GPT-4 на 13 триллионах токенов. Один шаг Adam = gradient + momentum + adaptive learning rate за 8 строк кода. Netflix A/B тест - multi-armed bandit optimization. Весь ML - оптимизация loss function. Алгоритм 1847 года оказался ключом к AI революции 2020-х.
- **GPT-4 обучение** - триллионы шагов AdamW по 175B параметрам; стоимость ~100 млн долларов; lr schedule: warmup + cosine decay
- **ResNet-50 на ImageNet** - SGD + momentum + cosine annealing за 90 эпох; финальный top-5 accuracy 93%
- **Stable Diffusion** - AdamW lr=1e-4 на 550M параметрах U-Net; обучение на 5B image-text pairs
- **Google Ads оптимизация** - gradient descent в реальном времени для bid optimization; миллиарды шагов в день
- **Netflix bandit optimization** - EXP3 и Thompson Sampling (posterior gradient) для A/B тестов thumbnail; +30% click-through
Коши и метод наискорейшего спуска
В 1847 году Огюстен-Луи Коши опубликовал заметку "Methode generale pour la resolution des systemes d equations simultanees" в Comptes Rendus Академии наук. Он предложил двигаться против градиента для решения систем уравнений в астрономии - задача определения орбит. Через 104 года, в 1951, Роббинс и Монро ввели стохастическую аппроксимацию, превратив идею Коши в SGD. В 1964 Поляк добавил momentum (heavy ball method). В 2014 Кингма и Ба объединили momentum и адаптивный learning rate в Adam - и именно этот алгоритм 1847 года в современной обёртке обучает GPT-4 и все большие модели.
Градиент: направление спуска
Adam optimizer обучает GPT-4 на 13 триллионах токенов. Один шаг Adam = gradient + momentum + adaptive learning rate. Netflix A/B тест - multi-armed bandit optimization. Весь ML - оптимизация loss function. В основе всего - **gradient descent**: вычислить наклон функции в текущей точке и шагнуть вниз. Звучит просто. Работает для миллиардов параметров.
**Градиент** ∇f(x) - вектор: каждая компонента показывает, как быстро функция растёт по оси. Длина ||∇f|| - крутизна склона. В точке минимума ∇f = 0 (плоско во все стороны). В нейросети с 175B параметров (GPT-3) градиент - вектор 175 миллиардов чисел. Принцип тот же.
В machine learning градиент loss по весам нейросети может иметь миллиарды компонент. Backpropagation вычисляет его за один обратный проход - chain rule через всю сеть. Именно gradient descent + backprop = рецепт глубокого обучения.
Градиент функции f(x,y) = 3x² + y² в точке (1, 2) равен [6, 4]. В каком направлении сделает шаг gradient descent?
Learning rate: размер шага
Градиент показывает **куда** идти. Но **как далеко**? **Learning rate** (alpha) - один из самых важных гиперпараметров в ML. И один из самых коварных. Слишком маленький - обучение занимает дни. Слишком большой - loss взлетает в NaN. Leslie Smith в 2015 году показал: один цикл lr finder экономит недели экспериментов.
| Learning rate | Поведение | Проблема |
|---|---|---|
| Слишком маленький (1e-6) | Медленная, но стабильная сходимость | Может застрять; обучение занимает дни |
| Оптимальный (~1e-3) | Быстрая сходимость к минимуму | Нужно подбирать для каждой задачи |
| Слишком большой (1+) | Осцилляции вокруг минимума | Loss растёт вместо уменьшения - дивергенция |
**Эмпирические стартовые точки:** lr = 3e-4 для Adam (правило Андрея Карпати), lr = 0.01-0.1 для SGD. Learning rate schedule: начинать с большого шага для быстрого прогресса, уменьшать для точной настройки. Популярные стратегии: cosine annealing (GPT, BERT), warmup + linear decay, OneCycleLR (fastai, ResNet).
Во время обучения нейросети loss сначала падал, потом начал расти и стал NaN. Наиболее вероятная причина?
Сходимость
Когда gradient descent сходится - и как быстро? Ответ: зависит от формы функции. **Выпуклость** и **гладкость** - два ключевых параметра. Квадратичная потеря (MSE) - сильно выпуклая, сходится быстро. Loss нейросети - невыпуклый ландшафт с тысячами седловых точек. И всё равно работает.
| Тип функции | Скорость сходимости | Пример |
|---|---|---|
| Выпуклая, L-гладкая | O(1/k) - сублинейная | f(x) = |x|^1.5 |
| Сильно выпуклая, L-гладкая | O((1-mu/L)^k) - линейная (экспоненц.) | f(x) = x^2 |
| Невыпуклая, гладкая | O(1/sqrt(k)) до стационарной точки | Loss нейросети |
**Condition number** kappa = L/mu - отношение максимальной кривизны к минимальной. Кругляши (kappa=1) - GD летит прямо. Вытянутые эллипсы (kappa>>1) - GD зигзагами ползёт по оврагу. Adam решает эту проблему адаптивным масштабированием шагов по каждой оси. Именно поэтому Adam быстро сходится даже при плохом kappa.
Condition number kappa = 10000. Что это означает для gradient descent?
Варианты gradient descent
Базовый gradient descent - как пешая прогулка: надёжно, но медленно. За 80 лет появились десятки улучшений. Три ключевые идеи: **стохастичность** (не считать градиент по всем данным), **momentum** (инерция для выхода из оврагов), **адаптивность** (свой learning rate для каждого параметра). Adam = все три сразу. Именно Adam обучил GPT-4 на 13 трлн токенов.
| Метод | Идея | Формула обновления | Когда использовать |
|---|---|---|---|
| SGD | Градиент по мини-батчу | x -= alpha * grad_batch(x) | Большие датасеты |
| SGD + Momentum | Накопление скорости | v = beta*v + grad; x -= alpha*v | Овраги в ландшафте |
| RMSProp | Адаптивный lr по истории градиентов | lr_i = alpha / sqrt(E[g2_i]) | Разреженные градиенты |
| Adam | Momentum + RMSProp | m, v + bias correction | Дефолтный выбор |
**Adam** (Adaptive Moment Estimation, Kingma & Ba 2014) - самый популярный оптимизатор в deep learning. Адаптирует lr для каждого параметра: большие градиенты = меньший lr, маленькие = больший. Дефолтные гиперпараметры (lr=0.001, beta1=0.9, beta2=0.999) работают для большинства задач. **AdamW** - Adam с правильным weight decay; GPT, BERT, Stable Diffusion - все на AdamW.
Adam быстрее сходится на train, но **SGD с momentum часто обобщает лучше**. ResNet, EfficientNet, ViT достигли SOTA именно на SGD + momentum + cosine annealing. Adam может находить острые минимумы с плохой обобщающей способностью. SGD находит более широкие и плоские. Практика: Adam для прототипирования, SGD для выжимания последних процентов accuracy.
Adam всегда лучше всех других оптимизаторов
Adam быстрее сходится, но SGD с momentum часто даёт лучшее обобщение в задачах computer vision и NLP.
Adam адаптивно масштабирует lr, что ускоряет сходимость. Но эта адаптивность приводит к острым минимумам с плохой обобщающей способностью. SGD + momentum находит более плоские минимумы. На практике: Adam для быстрого прототипирования, SGD для финальной настройки state-of-the-art моделей.
Почему SGD (по мини-батчам) часто работает лучше полного gradient descent, хотя его градиент зашумлён?
Ключевые идеи
- **Градиент** ∇f(x) - направление наибольшего роста; шагаем в -∇f для спуска к минимуму
- **Learning rate** alpha: слишком большой → NaN/дивергенция; слишком маленький → дни обучения; lr=3e-4 для Adam как стартовая точка
- **Сходимость**: condition number kappa = L/mu; kappa>>1 → зигзаги по оврагу; Adam адаптивно исправляет это
- **SGD** - шум как регуляризация, находит плоские минимумы; **Adam/AdamW** - адаптивный lr, быстро, default для прототипов
- **Критерии останова**: ||∇f|| < epsilon, |f_k - f_{k-1}| < epsilon, или фиксированное число шагов/эпох
- **История**: Коши 1847 → Cauchy gradient descent → backprop 1986 → Adam 2014 → GPT-4 2023
Связанные темы
Gradient descent - мост между оптимизацией и машинным обучением:
- Введение в оптимизацию — Gradient descent - основной метод решения задач непрерывной оптимизации
- Линейное программирование — Для линейных задач есть метод лучше - симплекс-метод
- Backpropagation — Эффективный способ вычислить градиент в нейросети
- Оптимизаторы глубокого обучения — Adam, AdamW, RMSProp - продвинутые оптимизаторы на базе GD
Вопросы для размышления
- Почему gradient descent работает в пространствах с миллиардами параметров, хотя мы не можем визуализировать ландшафт?
- Если шум SGD помогает обобщению, может ли добавление искусственного шума к полному GD дать тот же эффект?
- Вернёмся к началу урока: в чём фундаментальное сходство между человеком, идущим с горы в тумане, и обучением нейросети?
Связанные уроки
- opt-01 — Введение в оптимизацию - контекст для gradient descent
- opt-03 — Для линейных задач есть метод лучше - симплекс-метод
- ml-26-backpropagation — Backpropagation - эффективный способ вычислить градиент в нейросети
- ml-28-optimizers — Adam, AdamW, RMSProp - продвинутые оптимизаторы на базе GD
- calc-19-gradient — Градиент функции - математическая основа метода
- la-34-la-in-dl — Линейная алгебра в DL - контекст для градиентных операций в пространстве весов