Оптимизатор не меняет, где расположены минимумы функции потерь, но меняет траекторию, скорость и часто то, к какому из многих решений придёт обучение. История градиентов может задавать инерцию или отдельный масштаб каждой координаты.
Шарик в узком овраге
Рассмотрим
По поверхность в сто раз круче. Обычный gradient descent с единым шагом либо скачет между стенками оврага, либо при малом медленно ползёт по . Плохая обусловленность — отношение кривизн 100 — делает один масштаб неудобным для двух направлений.
Momentum накапливает скорость:
Поперечные градиенты меняют знак и частично сокращаются, продольные сохраняют знак и накапливаются. Траектория меньше зигзагообразна.
Красная траектория SGD многократно пересекает ось долины. Синяя momentum сохраняет продольную скорость и уменьшает поперечные колебания. Точки поставлены через равное число градиентных вычислений.
Соглашения Momentum
В библиотеках встречается запись
где постоянный градиент даёт , а не . Поэтому одинаковые в двух соглашениях не означают одинаковую траекторию.
Nesterov momentum вычисляет градиент в точке, сдвинутой по текущей скорости, как будто смотрит вперёд. Для выпуклых задач это даёт ускоренные оценки сходимости, но в нейросетях преимущество зависит от режима.
AdaGrad: редкая координата получает шанс
AdaGrad накапливает квадраты градиентов:
Координата с частыми большими градиентами получает уменьшающийся шаг, редкая — сохраняет крупный. Это полезно для разреженных текстов: вес редкого слова обновляется нечасто и не должен сразу иметь тот же накопленный тормоз, что частое слово.
Недостаток: только растёт, поэтому шаг может затухнуть слишком сильно и обучение практически остановится.
RMSProp и экспоненциальная память
RMSProp заменяет вечную сумму скользящим средним:
Квадраты берутся покоординатно. Старая история забывается экспоненциально; характерное окно порядка . При память охватывает примерно тысячу шагов.
В момент возникает большой градиент. AdaGrad сохраняет его вклад навсегда, RMSProp постепенно забывает. Нижняя панель показывает эффективный шаг : у AdaGrad он не восстанавливается, у RMSProp возвращается.
Adam соединяет два момента
Adam хранит экспоненциальные средние градиента и его квадрата:
При нулевой инициализации ранние значения смещены к нулю, поэтому применяют коррекцию:
Числитель задаёт сглаженное направление, знаменатель — масштаб координаты. предотвращает деление на ноль и влияет на поведение при очень малых градиентах.
При постоянном необработанный начинает с и медленно растёт к единице. Деление на сразу восстанавливает правильный масштаб. Аналогичная коррекция действует для .
Лаборатория оптимизаторов
Сравните траектории при одинаковом числе вычислений градиента. Затем масштабируйте одну координату в сто раз: adaptive методы должны быстрее перестроить шаги. После этого поменяйте масштаб в середине обучения и сравните AdaGrad с RMSProp/Adam.
AdamW и weight decay
При SGD -штраф и weight decay эквивалентны:
В Adam добавление к градиенту проходит через покоординатное деление на и перестаёт быть простым одинаковым сжатием весов. AdamW отделяет decay:
Различие существенно для интерпретации регуляризации. Параметр decay нужно рассматривать вместе с learning-rate schedule.
Быстрый train не гарантирует лучший test
Adam часто быстро уменьшает training loss в начале, особенно при разреженных или неодинаково масштабированных градиентах. SGD с momentum иногда даёт лучшее обобщение после тщательно настроенного schedule. Причины связаны с неявным выбором решений, шумом и геометрией, а не с одним рейтингом.
Сравнивать нужно при равном бюджете и отдельной настройке разумных learning rates. Один и тот же несправедлив: масштабы обновлений различны. Нужны несколько seeds, train/validation кривые и финальная оценка риска.
Разреженные тексты
В мешке слов большинство координат нулевые. AdaGrad или Adam дают редкому признаку относительно крупный шаг, когда он появляется. Но embedding-таблица может получать градиенты лишь для нескольких строк; sparse implementation экономит память и вычисления.
Редкость не означает надёжность. Одно необычное слово может получить большой вес по нескольким примерам. Регуляризация, минимальная частота и проверка на новых авторах остаются необходимыми.
Gradient clipping
В рекуррентных сетях и нестабильных режимах норма градиента может взрываться. Clipping по норме заменяет
Направление сохраняется, длина ограничивается . Это аварийный ограничитель, но слишком частый clipping означает, что learning rate, данные или модель нуждаются в диагностике. В журнале полезно считать долю обрезанных шагов. Clipping отдельных координат устроен иначе: он способен повернуть вектор, поэтому порог и вариант метода входят в спецификацию эксперимента.
Численная точность тоже участвует в траектории. При mixed precision малые
градиенты могут округляться в ноль; loss scaling временно увеличивает их до
представимого диапазона, а затем возвращает масштаб. Взрыв NaN не
доказывает плохую функцию потерь, пока не проверены переполнение,
и порядок операций.
Параметр особенно заметен, когда сопоставим с ним:
тогда адаптивное деление превращается почти в обычный постоянный масштаб.
Как выбирать оптимизатор
Начните с проверенного baseline: AdamW для многих трансформеров, SGD с momentum для ряда vision-задач, AdaGrad для разреженных выпуклых моделей. Настройте learning rate и schedule, затем weight decay и batch. Изменяйте один слой решения за раз.
Оптимизатор тесно связан с шумом SGD из урока 61 и может выбирать разные интерполяторы из урока 59. Поэтому «достиг одинакового train loss» не означает «построил ту же функцию».
Два масштаба одной квадратичной чаши
Рассмотрим
Gradient descent обновляет координаты как и . Для устойчивости первой координаты требуется . При она обнуляется за один шаг, а вторая умножается на и затухает медленно. Увеличить общий шаг нельзя: траектория начнёт колебаться или расходиться вдоль крутого направления.
Если заменить координату , функция станет круглой: . AdaGrad и Adam пытаются приблизить такое масштабирование по истории градиентов, а momentum ускоряет устойчивое движение вдоль длинного направления. Ни один метод не знает истинную матрицу кривизны заранее.
Численный опыт должен сравнивать число вычисленных градиентов до одинакового loss, а затем validation-качество найденных решений. Победа на этой выпуклой чаше проверяет геометрию шага, но ничего не говорит о сдвиге популяции, калибровке или стоимости ошибки.