Оптимизация

Обусловленность

Единственное число, которое объясняет большинство неудач обучения

Шаг 65 из 117 · ~30 мин

Одно число

κ=λmaxλmin=Lμ\htmlData{k=kappa}{\kappa = \frac{\lambda_{\max}}{\lambda_{\min}} = \frac{L}{\mu}}

— отношение крайних собственных значений гессиана, то есть мера того, насколько ландшафт вытянут. Это то же число, что появлялось в блоке 1 (урок 080) как отношение сингулярных значений: у квадратичной задачи f=12Axb2f = \frac12\|Ax - b\|^2 гессиан равен AAA^\top A, поэтому κ(2f)=κ(A)2\kappa(\nabla^2 f) = \kappa(A)^2.

Последнее равенство стоит запомнить: обусловленность задачи наименьших квадратов — квадрат обусловленности матрицы. Матрица с κ(A)=103\kappa(A) = 10^3, которая выглядит вполне рабочей, даёт задачу оптимизации с κ=106\kappa = 10^6.

Почему κ определяет всё

Из урока 030: число итераций градиентного спуска порядка κ2ln1ε\frac{\kappa}{2}\ln\frac1\varepsilon. В числах для сокращения ошибки в миллион раз:

κ\kappaшагов
1111
10106969
100100691691
10410^47104\approx 7 \cdot 10^4
10610^67106\approx 7 \cdot 10^6

Зависимость линейная, и никакая настройка шага её не меняет — шаг в этих оценках уже оптимален. Отсюда главный вывод блока: если обучение идёт неприлично медленно, вопрос не «какой оптимизатор взять», а «почему задача так вытянута».

Сравните три ландшафта. Обусловленность растёт от 11 до 100100, шаг у всех можно подобрать наилучший — и разница в числе итераций получается на два порядка.

лосс, логарифмическая шкала

шаг α 0.019
итераций 120
f в конце
3.62e-2
обусловленность κ
1
порог 2/L
2
 
сходится

Линии уровня — окружности, градиент указывает точно на минимум из любой точки. Шаг 1 попадает туда за одну итерацию. Это единственный случай, когда «наискорейший спуск» действительно наискорейший.

Откуда берётся плохая обусловленность

Пять источников, и каждый лечится по-своему:

источникпримерлечение
разный масштаб признаковвозраст в годах и доход в рубляхстандартизация входов
коррелированные признакирост в см и в дюймахдекоррелирование, L2
разная глубина слоёвградиенты первых слоёв меньшенормализация, residual
разная кривизна по параметрамэмбеддинги против bias’овадаптивные методы
плохо поставленная задачапочти вырожденная матрицарегуляризация

Первая строка — самый дешёвый и самый пропускаемый шаг. Признаки с масштабами 11 и 10410^4 дают гессиан с κ108\kappa \approx 10^8 до всякого обучения. Стандартизация уменьшает κ\kappa на порядки одной строкой кода, и по соотношению эффекта к усилию ничто в этом блоке с ней не сравнится.

Предобусловливание

Общая идея всех средств: заменить шаг α\alpha на матрицу.

xk+1=xkαP1f(xk)x_{k+1} = x_k - \alpha P^{-1}\nabla f(x_k)

Здесь PP — предобусловливатель, и цель одна: чтобы P12fP^{-1}\nabla^2 f имела обусловленность лучше, чем 2f\nabla^2 f. Крайние случаи известны:

PPчто получается
IIобычный градиентный спуск
2f\nabla^2 fметод Ньютона, κ\kappa становится 11
diag(2f)\text{diag}(\nabla^2 f)якобиево предобусловливание
diag(E[g2])\text{diag}(\sqrt{\mathbb{E}[g^2]})Adam

Последняя строка — то, чем Adam на самом деле является: диагональным предобусловливателем, оценённым по вторым моментам градиента вместо гессиана. Отсюда и его сильная сторона (устойчивость к разномасштабным параметрам), и слабая (диагональ не видит корреляций между параметрами, так что повёрнутый ландшафт ему не выпрямить).

Проверьте это на виджете: переключите на Adam на ландшафте κ=100\kappa = 100 — он идёт почти прямо, потому что ландшафт выровнен по осям и диагонали достаточно. На банане Розенброка из прошлого урока преимущество куда скромнее: там кривизна не диагональна.

Что делать практически

Порядок действий, от самого дешёвого:

  1. стандартизовать входы. Всегда. До всего остального;
  2. добавить нормализацию между слоями — урок 100 объясняет, почему это тоже предобусловливание;
  3. взять адаптивный метод — урок 080;
  4. добавить момент — урок 070. Он не уменьшает κ\kappa, но делает зависимость κ\sqrt{\kappa} вместо κ\kappa;
  5. регуляризовать, если задача почти вырождена (урок 030 показал, во сколько раз это ускоряет);
  6. менять архитектуру — residual-связи существуют в значительной мере ради этого.

Настройка learning rate в этом списке отсутствует намеренно. Она нужна, но она не устраняет причину: на задаче с κ=106\kappa = 10^6 идеально подобранный шаг всё равно даёт миллионы итераций.

Источники

  • Trefethen, Bau — Numerical Linear Algebra, лекция 12 — Число обусловленности
  • Nesterov — Introductory Lectures on Convex Optimization, гл. 2 — Зависимость скорости от κ

Проверки

0 из 2
  1. Откуда берётся плохая обусловленность

    Отметьте все верные утверждения об обусловленности.

  2. Сколько итераций стоит обусловленность

    Дан список scales — собственные значения диагонального гессиана.

    Реализуйте conditioning(scales) — верните [kappa, gd_steps, momentum_steps, preconditioned_kappa]:

    • kappa = λmax/λmin\lambda_{\max} / \lambda_{\min};

    • gd_steps — сколько шагов градиентного спуска нужно, чтобы сократить ошибку в миллион раз, при множителе ρ=κ1κ+1\rho = \frac{\kappa-1}{\kappa+1}:

      шагов=ln106lnρ\text{шагов} = \left\lceil \frac{\ln 10^{-6}}{\ln \rho} \right\rceil

    • momentum_steps — то же с множителем ρmom=κ1κ+1\rho_{\text{mom}} = \frac{\sqrt{\kappa}-1}{\sqrt{\kappa}+1};

    • preconditioned_kappa — обусловленность после идеального диагонального предобусловливания, то есть после деления каждой оси на её собственную кривизну. Верните 1.0.

    При κ=1\kappa = 1 множитель равен нулю и логарифм не определён — верните в этом случае 1.0 шаг для обоих методов.

    Ответ на последний пункт стоит обосновать себе самому, а не подставить: гессиан диагонален, значит масштабирование по осям может выровнять все кривизны.

    функция conditioning

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

    Ctrl/⌘ + Enter