Оптимизация

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

Самый простой метод и его единственный параметр — с жёсткой границей, за которой он не работает

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

Правило

xk+1=xkαf(xk)x_{k+1} = x_k - \htmlData{k=step}{\alpha} \, \htmlData{k=dir}{\nabla f(x_k)}

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

— единственный параметр, и на нём держится всё.

Что происходит при разных шагах

Возьмите первый ландшафт — круглую чашу — и подвигайте шаг. Кривизна там равна 22, то есть L=2L = 2 и порог устойчивости 2/L=12/L = 1.

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

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

Обусловленность равна 1 — идеальный случай. При шаге 0.5 = 1/L метод попадает в минимум за одну итерацию: множитель |1 − αL| обращается в нуль. Выше 0.5 начинаются колебания, при 1.0 они становятся вечными, выше — расходимость.

Четыре режима, которые стоит пройти на круглой чаше:

шагчто видно
0.050.05плавно, но медленно: много итераций
0.5=1/L0.5 = 1/Lпопадание в минимум за одну итерацию
0.80.8сходится, но траектория перескакивает через минимум
1.0=2/L1.0 = 2/Lвечные колебания, лосс не падает
1.11.1расходимость, лосс уходит в бесконечность

Строка 2/L2/L — та, которую полезно увидеть своими глазами: метод не «сходится плохо», он не сходится вообще, и при этом не расходится. Ровно на границе.

Как выбирают шаг на практике

Теоретический оптимум α=2/(L+μ)\alpha = 2/(L+\mu) требует знать спектр гессиана, которого нет. Поэтому:

подходкак работаетгде применяют
подбор по сеткепробуют 101,102,10^{-1}, 10^{-2}, \dotsглубокое обучение
поиск максимального устойчивогоувеличивают, пока лосс не взорвётся, берут вдвое меньшепрактическое правило
линейный поиск (Armijo)уменьшают шаг, пока лосс не упадёт достаточноклассическая оптимизация
адаптивные методышаг свой у каждой координатыAdam, урок 080

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

Условие Armijo, кратко

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

f(xαf)  f(x)cαf2,c(0,1)f(x - \alpha \nabla f) \ \le \ f(x) - c\,\alpha \|\nabla f\|^2, \qquad c \in (0, 1)

Правая часть — «столько, сколько обещала касательная, умноженное на cc». Обычно c=104c = 10^{-4}, то есть требование очень слабое: получить хотя бы малую долю обещанного. Шаг уменьшают вдвое, пока условие не выполнится, — это и есть backtracking.

Чего градиентный спуск не умеет

Три ограничения, и все проявятся в следующих уроках:

  • скорость определяется обусловленностью, а не шагом. Даже при идеально подобранном шаге число итераций пропорционально κ\kappa (урок 030). На вытянутой чаше метод зигзагует, и никакой α\alpha этого не исправит;
  • направление наискорейшего спуска не ведёт к минимуму. На втором ландшафте видно: градиент почти перпендикулярен нужному направлению почти всюду. «Наискорейший» — локальное свойство;
  • на невыпуклой задаче гарантируется только f0\|\nabla f\| \to 0. Куда именно сойдётся, зависит от старта.

Первое лечится моментом (урок 070) и предобусловливанием (уроки 080, 100), второе — теми же средствами, третье не лечится и принимается как факт.

Полный градиент против стохастического

И последнее, что делает всё сказанное почти неприменимым напрямую. Всё выше предполагает, что f\nabla f вычисляется точно, то есть по всей выборке. В обучении это невозможно: один шаг по миллиону примеров стоит столько же, сколько тысяча шагов по тысяче примеров, а полезной информации в нём немногим больше.

Поэтому реальный метод — стохастический, и его свойства другие: он не монотонен, не останавливается в точке, и шум в нём играет двоякую роль. Об этом следующий урок.

Источники

  • Nocedal, Wright — Numerical Optimization, гл. 3 — Методы линейного поиска, условия Вольфе
  • Nesterov — Introductory Lectures on Convex Optimization, гл. 2 — Оценки сходимости градиентного метода

Проверки

0 из 2
  1. Выбор шага

    Отметьте все верные утверждения о градиентном спуске и его шаге.

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

    Функция f(x,y)=12(ax2+by2)f(x,y) = \tfrac12\big(a x^2 + b y^2\big), так что f=(ax, by)\nabla f = (a x,\ b y) и спектр гессиана равен {a,b}\{a, b\}.

    Реализуйте gd_quadratic(a, b, x0, y0, alpha, steps) — сделайте steps шагов градиентного спуска из (x0,y0)(x_0, y_0) и верните [x, y, f, verdict]:

    • x, y — координаты после всех шагов;
    • f — значение функции там же;
    • verdict — код режима, определяемый множителем m=1αLm = |1 - \alpha L|, где L=max(a,b)L = \max(a, b): 2.0 если m<1m < 1 (сходится), 1.0 если m=1m = 1 (вечные колебания), 0.0 если m>1m > 1 (расходимость). Единицу сравнивайте с допуском 101210^{-12}.

    Обратите внимание, что verdict считается по формуле, а не по тому, что получилось: за сорок шагов расходящаяся итерация может ещё не переполниться, но режим её уже определён.

    Проверить себя легко замкнутой формой: по каждой оси xk=x0(1αa)kx_k = x_0 (1 - \alpha a)^k — оси независимы, потому что гессиан диагонален.

    функция gd_quadratic

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

    Ctrl/⌘ + Enter