Дифференциальное и матричное исчисление

Гессиан и кривизна

Вторая производная в многомерии — матрица, и её собственные значения решают, что за критическая точка

Шаг 28 из 117 · ~28 мин

Матрица вторых производных

Hij=2fxixjH_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}

Для f:RnRf : \R^n \to \R это матрица n×nn \times n. Она симметрична, если вторые производные непрерывны (теорема Шварца), — и это не мелочь: симметричность означает, что к гессиану применима спектральная теорема из блока 1. Все выводы ниже опираются именно на неё.

Разложение Тейлора второго порядка выглядит так:

f(x+h)f(x)+f,h+12hHhf(\mathbf{x} + \mathbf{h}) \approx f(\mathbf{x}) + \htmlData{k=lin}{\langle \nabla f, \mathbf{h}\rangle} + \htmlData{k=quad}{\tfrac{1}{2}\mathbf{h}^\top H \mathbf{h}}

Сравните с одномерным случаем: fhf'h стало , а fh2f''h^2 hHh\mathbf{h}^\top H \mathbf{h}. Проверка форм: (1×n)(n×n)(n×1)=1×1(1 \times n)(n \times n)(n \times 1) = 1 \times 1, то есть число, как и должно быть.

Классификация критических точек

Пусть f(x)=0\nabla f(\mathbf{x}^*) = \mathbf{0}. Тогда поведение около точки решает знак квадратичной формы, а его, по спектральной теореме, решают собственные значения HH:

собственные значения HHчто это
все >0> 0 (положительно определён)локальный минимум
все <0< 0 (отрицательно определён)локальный максимум
есть и положительные, и отрицательныеседло
есть нулевые, остальные одного знакавырожденный случай, второй порядок не решает

Для 2×22 \times 2 проверять собственные значения по отдельности не нужно — достаточно следа и определителя, как в блоке 1: detH<0\det H < 0 означает разные знаки, то есть седло; при detH>0\det H > 0 знак определяется следом.

Поставьте точку в начало координат на каждой из функций и сравните:

f(x, y)
0.01
градиент
0.1, 0.1
крутизна ‖∇f‖
0.14

Гессиан diag(2, 2): оба собственных значения положительны, линии уровня — замкнутые окружности вокруг точки.

Кривизна и обусловленность

Собственные значения гессиана — это кривизна вдоль главных направлений. Их отношение

κ=λmaxλmin\kappa = \frac{\lambda_{\max}}{\lambda_{\min}}

и есть число обусловленности задачи. То же самое κ\kappa, что в уроке про SVD, — и роль у него та же: он говорит, во сколько раз задача «вытянута».

Геометрически: линии уровня положительно определённой квадратичной формы — эллипсы, а κ\sqrt{\kappa} — отношение их осей. При κ=1\kappa = 1 это окружности и градиент смотрит точно в минимум. При большом κ\kappa градиент смотрит почти поперёк вытянутой оси, и спуск идёт зигзагом. Переключитесь на «плохо обусловленный» и подвигайте точку — стрелка почти нигде не указывает на центр.

Отсюда и практика: нормализация входов, batch/layer norm, предобусловливание в Adam — всё это попытки уменьшить κ\kappa. Не «ускорить обучение» абстрактно, а сделать линии уровня круглее.

Почему в глубоком обучении гессиан не считают

Гессиан имеет n2n^2 элементов. При n=109n = 10^9 это 101810^{18} чисел — не существует носителя, куда это записать. Метод Ньютона требует ещё и решить систему с ним.

Что делают вместо:

  • работают с методами первого порядка, а информацию о кривизне накапливают косвенно — так устроены momentum и Adam;
  • считают произведение гессиана на вектор (HvHv), не собирая сам гессиан: это делается двумя обратными проходами и стоит как несколько градиентов;
  • аппроксимируют его диагональю или блоками (K-FAC, Shampoo).

Знать структуру гессиана нужно не чтобы его вычислить, а чтобы понимать, что именно приближают оптимизаторы. Об этом весь блок 5.

Источники

Проверки

0 из 2
  1. Что решает гессиан

    В точке x\mathbf{x}^* выполнено f(x)=0\nabla f(\mathbf{x}^*) = \mathbf{0}. Отметьте все верные утверждения.

  2. Классификация критической точки

    Реализуйте classify(hessian) — по гессиану 2×22 \times 2 в критической точке определите её тип. Верните одну из строк:

    • "min" — оба собственных значения положительны;
    • "max" — оба отрицательны;
    • "saddle" — разных знаков;
    • "degenerate" — хотя бы одно равно нулю.

    Считать собственные значения не обязательно: для 2×22 \times 2 достаточно следа и определителя, потому что det=λ1λ2\det = \lambda_1\lambda_2 и tr=λ1+λ2\operatorname{tr} = \lambda_1 + \lambda_2.

    • det<0\det < 0 — значения разных знаков;
    • det>0\det > 0 — одного знака, и какого именно, говорит след;
    • det=0\det = 0 — одно из них нулевое.

    Сравнивайте с нулём через abs(x) < 1e-12, а не через == 0.

    функция classify

    Загрузка редактора…

    Ctrl/⌘ + Enter