Оптимизация
Обусловленность
Единственное число, которое объясняет большинство неудач обучения
Одно число
Последнее равенство стоит запомнить: обусловленность задачи наименьших квадратов — квадрат обусловленности матрицы. Матрица с , которая выглядит вполне рабочей, даёт задачу оптимизации с .
Почему κ определяет всё
Из урока 030: число итераций градиентного спуска порядка . В числах для сокращения ошибки в миллион раз:
| шагов | |
|---|---|
Зависимость линейная, и никакая настройка шага её не меняет — шаг в этих оценках уже оптимален. Отсюда главный вывод блока: если обучение идёт неприлично медленно, вопрос не «какой оптимизатор взять», а «почему задача так вытянута».
Сравните три ландшафта. Обусловленность растёт от до , шаг у всех можно подобрать наилучший — и разница в числе итераций получается на два порядка.
лосс, логарифмическая шкала
- f в конце
- 3.62e-2
- обусловленность κ
- 1
- порог 2/L
- 2
- сходится
Линии уровня — окружности, градиент указывает точно на минимум из любой точки. Шаг 1 попадает туда за одну итерацию. Это единственный случай, когда «наискорейший спуск» действительно наискорейший.
Откуда берётся плохая обусловленность
Пять источников, и каждый лечится по-своему:
| источник | пример | лечение |
|---|---|---|
| разный масштаб признаков | возраст в годах и доход в рублях | стандартизация входов |
| коррелированные признаки | рост в см и в дюймах | декоррелирование, L2 |
| разная глубина слоёв | градиенты первых слоёв меньше | нормализация, residual |
| разная кривизна по параметрам | эмбеддинги против bias’ов | адаптивные методы |
| плохо поставленная задача | почти вырожденная матрица | регуляризация |
Первая строка — самый дешёвый и самый пропускаемый шаг. Признаки с масштабами и дают гессиан с до всякого обучения. Стандартизация уменьшает на порядки одной строкой кода, и по соотношению эффекта к усилию ничто в этом блоке с ней не сравнится.
Предобусловливание
Общая идея всех средств: заменить шаг на матрицу.
Здесь — предобусловливатель, и цель одна: чтобы имела обусловленность лучше, чем . Крайние случаи известны:
| что получается | |
|---|---|
| обычный градиентный спуск | |
| метод Ньютона, становится | |
| якобиево предобусловливание | |
| Adam |
Последняя строка — то, чем Adam на самом деле является: диагональным предобусловливателем, оценённым по вторым моментам градиента вместо гессиана. Отсюда и его сильная сторона (устойчивость к разномасштабным параметрам), и слабая (диагональ не видит корреляций между параметрами, так что повёрнутый ландшафт ему не выпрямить).
Проверьте это на виджете: переключите на Adam на ландшафте — он идёт почти прямо, потому что ландшафт выровнен по осям и диагонали достаточно. На банане Розенброка из прошлого урока преимущество куда скромнее: там кривизна не диагональна.
Что делать практически
Порядок действий, от самого дешёвого:
- стандартизовать входы. Всегда. До всего остального;
- добавить нормализацию между слоями — урок 100 объясняет, почему это тоже предобусловливание;
- взять адаптивный метод — урок 080;
- добавить момент — урок 070. Он не уменьшает , но делает зависимость вместо ;
- регуляризовать, если задача почти вырождена (урок 030 показал, во сколько раз это ускоряет);
- менять архитектуру — residual-связи существуют в значительной мере ради этого.
Настройка learning rate в этом списке отсутствует намеренно. Она нужна, но она не устраняет причину: на задаче с идеально подобранный шаг всё равно даёт миллионы итераций.
Источники
- Trefethen, Bau — Numerical Linear Algebra, лекция 12 — Число обусловленности
- Nesterov — Introductory Lectures on Convex Optimization, гл. 2 — Зависимость скорости от κ
Проверки
0 из 2Откуда берётся плохая обусловленность
Отметьте все верные утверждения об обусловленности.
Сколько итераций стоит обусловленность
Дан список
scales— собственные значения диагонального гессиана.Реализуйте
conditioning(scales)— верните[kappa, gd_steps, momentum_steps, preconditioned_kappa]:kappa= ;gd_steps— сколько шагов градиентного спуска нужно, чтобы сократить ошибку в миллион раз, при множителе :momentum_steps— то же с множителем ;preconditioned_kappa— обусловленность после идеального диагонального предобусловливания, то есть после деления каждой оси на её собственную кривизну. Верните1.0.
При множитель равен нулю и логарифм не определён — верните в этом случае
1.0шаг для обоих методов.Ответ на последний пункт стоит обосновать себе самому, а не подставить: гессиан диагонален, значит масштабирование по осям может выровнять все кривизны.
Загрузка редактора…
Ctrl/⌘ + Enter