Обязательно

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

Знакомимся с главным алгоритмом оптимизации в ML — как модели учатся на данных шаг за шагом.

Время изучения: 15 мин

Интуиция: спускаемся по склону

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

Это и есть градиентный спуск. «Гора» — это функция потерь (MSE, cross-entropy и т.д.). «Положение на горе» — текущие значения весов модели. «Направление спуска» — отрицательный градиент. Мы итеративно обновляем веса, чтобы функция потерь уменьшалась.

Формула обновления весов

wnew=woldαLw\mathbf{w}_{\text{new}} = \mathbf{w}_{\text{old}} - \alpha \cdot \frac{\partial L}{\partial \mathbf{w}}
  • w — веса модели (то, что мы оптимизируем)
  • α (альфа) — learning rate (скорость обучения)
  • ∂L/∂w — градиент функции потерь по весам
  • Минус — потому что мы идём ПРОТИВ градиента (в сторону уменьшения)

Градиент — это вектор частных производных. Он указывает в направлении наибольшего РОСТА функции. Чтобы минимизировать — идём в противоположную сторону.

Learning Rate: почему он так важен

Learning rate (α) — пожалуй, самый важный гиперпараметр в ML. Он определяет размер шага при каждом обновлении весов.

Слишком маленький LR

  • Шаги крошечные → обучение занимает вечность
  • Может застрять в локальном минимуме
  • Но зато стабильное, без «прыжков»

Слишком большой LR

  • Шаги огромные → «перепрыгиваем» через минимум
  • Loss может не уменьшаться, а расти
  • В худшем случае — расходимость (loss → ∞)

На практике: типичные значения — от 0.001 до 0.1. Часто используют расписание (learning rate schedule) — начинают с большого LR и постепенно уменьшают.

Batch, Mini-batch и SGD

Для вычисления градиента нужно пройти по данным. Вопрос — по скольким объектам считать градиент за один шаг?

Batch Gradient Descent

Считаем градиент по ВСЕМ данным, делаем один шаг. Точное направление, но очень медленно при больших датасетах.

Stochastic Gradient Descent (SGD)

Считаем градиент по ОДНОМУ случайному объекту, делаем шаг. Быстро, но направление шумное — «дёргается» вправо-влево. Зато может выбираться из локальных минимумов.

Mini-batch Gradient Descent

Золотая середина: считаем градиент по пачке (batch) из B объектов (обычно 32, 64, 128, 256). Достаточно точное направление + достаточно быстро. Это стандарт в современном ML.

На практике

Когда говорят «SGD» — чаще всего имеют в виду mini-batch SGD. Чистый стохастический (по одному объекту) используется редко.

Продвинутые оптимизаторы

Momentum

Идея: добавляем «инерцию» к обновлению весов. Как шарик, катящийся по склону — он набирает скорость в постоянном направлении и не реагирует на мелкие кочки.

vt=βvt1+αL,w=wvt\mathbf{v}_t = \beta \mathbf{v}_{t-1} + \alpha \nabla L, \quad \mathbf{w} = \mathbf{w} - \mathbf{v}_t

Ускоряет сходимость и сглаживает шум. β обычно = 0.9.

Adam (Adaptive Moment Estimation)

Самый популярный оптимизатор в deep learning. Комбинирует momentum + адаптивный learning rate для каждого параметра отдельно. Для параметров с маленькими градиентами LR увеличивается, для больших — уменьшается.

  • По умолчанию работает хорошо «из коробки» (lr=0.001, β₁=0.9, β₂=0.999)
  • Быстрая сходимость
  • Стандарт для обучения нейросетей
  • Для табличных данных (деревья, линейные модели) обычно не нужен

Проблемы градиентного спуска

🎤 Что такое vanishing/exploding gradients?

Vanishing gradients: при обратном распространении ошибки через много слоёв градиент умножается на маленькие числа и «исчезает» → первые слои перестают обучаться. Exploding gradients: наоборот, градиент растёт экспоненциально → веса «взрываются». Решения: BatchNorm, residual connections (ResNet), gradient clipping, правильная инициализация весов.

  • Локальные минимумы — GD может застрять (на практике это реже проблема, чем кажется)
  • Седловые точки — градиент = 0, но это не минимум. Momentum помогает проскочить
  • Плато — область, где градиент очень маленький. Обучение замедляется

Итого

  • Градиентный спуск — главный алгоритм оптимизации в ML
  • Формула: w_new = w_old − α·∂L/∂w
  • Learning rate — ключевой гиперпараметр
  • Mini-batch — стандарт на практике
  • Adam — дефолтный оптимизатор для нейросетей
  • Знать проблемы: vanishing/exploding gradients, локальные минимумы, седловые точки