Урок по треку Математика для ML 6 мин

Производные, градиент и гессиан за 6 минут

Производная, частные производные, градиент, якобиан, гессиан и численная проверка градиента.

Обучение модели это поиск параметров, при которых функция потерь минимальна. Чтобы знать, куда двигать параметры, нужна производная. На собесе спрашивают определения, просят посчитать градиент простой функции и проверить его численно.

Производная

Производная f'(x) это скорость изменения f в точке, наклон касательной. Основные правила:

  • (xⁿ)' = n·xⁿ⁻¹, (eˣ)' = eˣ, (ln x)' = 1/x;
  • (f + g)' = f' + g', (f·g)' = f'g + fg';
  • цепное правило: (f(g(x)))' = f'(g(x))·g'(x).

Важная производная для ML: сигмоида σ(x) = 1 / (1 + e⁻ˣ) имеет σ'(x) = σ(x)(1 - σ(x)). Максимум 0.25 в нуле. Отсюда затухание градиентов в глубоких сетях на сигмоидах.

Частные производные и градиент

Если функция зависит от нескольких переменных, частная производная по одной из них считается, когда остальные зафиксированы. Пример: f(x, y) = x² + 3xy.

∂f/∂x = 2x + 3y
∂f/∂y = 3x

Градиент это вектор всех частных производных: ∇f = (∂f/∂x, ∂f/∂y). Он указывает направление наискорейшего роста, длина равна скорости роста. Поэтому градиентный спуск делает шаг против градиента.

Градиент MSE линейной регрессии ŷ = Xw:

L = (1/n)·Σ(ŷᵢ - yᵢ)²
∇L = (2/n)·Xᵀ(Xw - y)

Якобиан и гессиан

  • Якобиан векторной функции f: Rⁿ → Rᵐ это матрица m×n первых производных, J[i][j] = ∂fᵢ/∂xⱼ. Это линейное приближение функции около точки. Цепное правило для векторных функций это произведение якобианов.
  • Гессиан скалярной функции это матрица n×n вторых производных. Он описывает кривизну.

В точке с нулевым градиентом (стационарной):

  • все собственные значения гессиана положительные: локальный минимум;
  • все отрицательные: максимум;
  • разных знаков: седло. Пример f = x² - y² в нуле.

Нулевой градиент ещё не означает минимум.

Негладкие функции

ReLU и |x| не дифференцируемы в нуле. Используют субградиент: любое значение между левой и правой производной. PyTorch для ReLU в нуле берёт 0. На обучение это практически не влияет: точное попадание в ноль редкость.

Численная проверка градиента

Если вы пишете backward руками, сравните его с численной производной:

def numeric(f, x, h=1e-5):
    return (f(x + h) - f(x - h)) / (2 * h)
  • Центральная разность точнее прямой: ошибка O(h²) против O(h).
  • Слишком маленький h (1e-12) ломается на округлении: вычитаются почти равные числа.
  • Считайте в float64, сравнивайте относительную ошибку |a - n| / max(|a|, |n|). Около 1e-7 хорошо, около 1e-2 ошибка в коде.
  • В PyTorch есть готовый torch.autograd.gradcheck.

Частые ошибки

  • Забыть производную внутренней функции в цепном правиле.
  • Путать направление: градиент ведёт вверх, спуск идёт против.
  • Считать, что нулевой градиент гарантирует минимум.
  • Потерять множитель 2 или 1/n в градиенте MSE.

Что спросят на собесе

  • Что такое градиент и почему спускаются по антиградиенту.
  • Посчитать частные производные простой функции в точке.
  • Производная сигмоиды и почему она мешает глубоким сетям.
  • Что такое гессиан и как по нему отличить минимум от седла.
  • Как проверить ручной backward численно.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.