Оптимизация

Стохастический градиентный спуск

Градиент как оценка Монте-Карло — со всеми свойствами оценки, включая дисперсию

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

Градиент — это ожидание

Лосс на выборке — среднее по примерам, значит его градиент тоже среднее:

f(x)=1ni=1nfi(x)  1BiBfi(x)\htmlData{k=full}{\nabla f(x) = \frac{1}{n}\sum_{i=1}^{n} \nabla f_i(x)} \ \approx \ \htmlData{k=batch}{\frac{1}{B}\sum_{i \in \mathcal{B}} \nabla f_i(x)}

Это в точности оценка Монте-Карло из блока 3 (урок 150), и всё, что там было сказано, переносится сюда без изменений:

  • оценка несмещена при любом BB, даже при B=1B = 1. Это следует из линейности ожидания и ничего не требует;
  • её дисперсия равна σ2/B\sigma^2 / B, где σ2\sigma^2 — дисперсия градиента по отдельным примерам.

Второй пункт проверяется точно. На выборке из тысячи точек с дисперсией градиентов 9.4529.452:

BBизмеренная дисперсияσ2/B\sigma^2/B
119.5179.5179.4529.452
442.3582.3582.3632.363
16160.5910.5910.5910.591
64640.1470.1470.1480.148
2562560.0370.0370.0370.037

Отсюда сразу видно, почему большие батчи дают убывающую отдачу: чтобы уменьшить шум вдвое, нужно увеличить батч вчетверо — знакомая цена 1/B1/\sqrt{B}.

Почему стохастический метод вообще выигрывает

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

один полный шагтысяча стохастических шагов
стоимостьnn градиентовnn градиентов
точность направленияидеальнаяшумная
пройденное расстояниеодин шагтысяча шагов

Тысяча приблизительно верных шагов уводит дальше, чем один точный. Это и есть весь аргумент, и он тем сильнее, чем больше nn.

Шум не исчезает

Ключевое отличие от полного градиента: SGD с постоянным шагом не сходится в точку. Он приходит в область вокруг минимума и остаётся там, потому что шум не даёт остановиться.

Размер этой области считается точно. Для f=a2x2f = \frac{a}{2}x^2 с шумом градиента σ\sigma стационарная дисперсия равна

Var[x]=ασ2a(2αa)\operatorname{Var}[x_\infty] = \frac{\alpha\sigma^2}{a\,(2 - \alpha a)}

и численный эксперимент это подтверждает:

α\alphaσ\sigmaизмеренная Var\operatorname{Var}теория
0.10.1110.05170.05170.05260.0526
0.050.05110.02500.02500.02560.0256
0.010.01110.00490.00490.00500.0050
0.10.10.50.50.01290.01290.01320.0132

Формула читается так: шумовой шар пропорционален ασ2\alpha\sigma^2. Уменьшить его можно двумя способами — уменьшив шаг или уменьшив шум (то есть увеличив батч), и это взаимозаменяемо.

Подвигайте шум и шаг в виджете. При нулевом шуме траектория идёт гладко, при большом начинает дёргаться и в конце не останавливается.

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

шаг α 0.05
итераций 200
шум градиента σ 0
f в конце
4.45e-9
обусловленность κ
1
порог 2/L
2
 
сходится

Поднимите шум и посмотрите на конец траектории: точка не останавливается, а блуждает вокруг минимума. Радиус блуждания растёт как корень из шага — уменьшите α вдвое, и шар сожмётся примерно в √2 раз по радиусу.

Как всё-таки сходиться

Раз шумовой шар пропорционален α\alpha, для сходимости в точку шаг обязан убывать. Классические условия Роббинса–Монро:

kαk=иkαk2<\sum_k \alpha_k = \infty \qquad \text{и} \qquad \sum_k \alpha_k^2 < \infty

Первое — «суммарного пути хватает, чтобы дойти куда угодно», второе — «накопленный шум конечен». Расписание αk=c/k\alpha_k = c/k удовлетворяет обоим, αk=c/k\alpha_k = c/\sqrt{k} — только первому.

На практике условия Роббинса–Монро почти не соблюдают буквально: используют кусочно-постоянные или косинусные расписания (урок 090), которые формально не удовлетворяют первому условию, потому что обучение конечно. Это нормально — цель не предельная сходимость, а хорошая модель за отведённое время.

Batch size и learning rate связаны

Из формулы шумового шара следует практическое правило. Величина ασ2=ασ12/B\alpha \sigma^2 = \alpha \sigma_1^2 / B определяет уровень шума, значит:

αBconst\frac{\alpha}{B} \approx \text{const}

сохраняет режим обучения. Отсюда два известных приёма:

  • линейное правило масштабирования: увеличили батч в kk раз — увеличьте шаг в kk раз. Работает до некоторого предела, после которого мешает уже граница устойчивости 2/L2/L;
  • увеличивать батч вместо уменьшения шага: даёт тот же эффект на шум, но лучше параллелизуется.

Предел важен и объясняет «критический размер батча». Шаг нельзя растить бесконечно — над 2/L2/L метод расходится независимо от шума. Поэтому за некоторым BB увеличение батча перестаёт ускорять обучение: шум уже не является узким местом, а шаг поднять нельзя.

Шум как регуляризатор

Последнее, и самое неожиданное: шум SGD бывает полезен, и не только около седел.

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

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

Источники

Проверки

0 из 2
  1. Шум стохастического градиента

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

  2. Шумовой шар SGD

    Задача f(x)=a2x2f(x) = \tfrac{a}{2}x^2, градиент по одному примеру имеет дисперсию σ12\sigma_1^2, батч — размера BB.

    Реализуйте sgd_noise(a, alpha, sigma1, B) — верните [batch_variance, noise_ball, stable, critical_alpha]:

    • batch_variance = σ12/B\sigma_1^2 / B — дисперсия градиента по батчу;
    • critical_alpha = 2/a2/a — порог устойчивости;
    • stable = 1.0, если α<\alpha < critical_alpha, иначе 0.0;
    • noise_ball = αbatch_variancea(2αa)\dfrac{\alpha \cdot \texttt{batch\_variance}}{a\,(2 - \alpha a)} — стационарная дисперсия итерата. Если метод неустойчив, верните -1.0: стационарного распределения нет.

    Сентинель однозначен, потому что дисперсия неотрицательна.

    функция sgd_noise

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

    Ctrl/⌘ + Enter