Оптимизация обучения

Adam

Adam

актуальноТекущий рабочий стандарт

Направления: Глубокое обучение · Оптимизация

Адаптивный метод: хранит средние и его квадрата, подбирая шаг для каждого параметра.

Что означает каждый компонент
  • адаптивный шаг: направление от инерции, масштаб — от типичной величины градиента
  • скользящее среднее градиента (инерция), скорректированное на смещение первых шагов
  • скользящее среднее квадрата градиента: большие градиенты уменьшают шаг, малые — увеличивают

Ключевые тезисы

  • Работает «из коробки» при lr ≈ 1e-3 почти на любой задаче.
  • Быстро сходится, но иногда обобщает хуже с .
  • Bias correction компенсирует смещение оценок на первых шагах.

Какую задачу решает

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

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

Зачем нужен warmup

На первом шаге оценивается по одному и может оказаться очень маленькой; деление на даёт огромный шаг, который выбрасывает веса далеко от разумной области. Коррекция смещения частично помогает, но при оценка второго становится надёжной только через сотни шагов. Отсюда стандартный рецепт: линейный разогрев от нуля за 500–4000 шагов. На пропуск разогрева — самая частая причина того, что обучение расходится в первые минуты.

Подробный разбор

2 подтемы — объяснения, формулы, примеры и интерактивные графики.

Обозначения
  • скорость обучения — длина шага оптимизатора
  • коэффициент инерции (momentum): доля прошлого направления
  • малая величина: шум, допуск или защита от деления на ноль
  • скользящие средние градиента и его квадрата в адаптивных оптимизаторах
  • веса модели — то, что подбирается при обучении
  • — инерция (первый ), — масштаб (второй ).
  • Деление на делает шаг большим там, где малы, и наоборот — это лечит эффект оврага.
  • Bias correction нужен потому, что и инициализированы нулями и первые шаги были бы недооценены.
  • Дефолты: , , , .
методSGD
шагов сделано30
f(x, y)0.2153
‖(x, y)‖0.656
Оптимизатор
Adam выравнивает масштаб по осям — траектория идёт почти прямо к минимуму

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

На практике

Память: хранит два состояния на каждый параметр. Для модели на 7 млрд параметров это ~56 ГБ в fp32 только под — отсюда 8-битные оптимизаторы и ZeRO-шардинг.

Где применяется

  • Значение по умолчаниюНовая задача, непонятная поверхность потерь, ограниченное время на настройку.
  • и NLPПрактически безальтернативен (в варианте ).
  • Разреженные Редко встречающиеся получают крупные шаги — важно для .
  • и другие нестандартные схемыАдаптивность помогает там, где масштаб непредсказуем.

Плюсы, минусы и альтернативы

Плюсы

  • Быстрая сходимость почти без настройки.
  • Устойчив к плохо подобранной .
  • Хорошо работает при разномасштабных параметрах и разреженных .
  • Значения по умолчанию (, ) подходят подавляющему большинству задач.

Минусы

  • Хранит два состояния на параметр — памяти втрое больше, чем на веса.
  • Иногда обобщает хуже с .
  • в классическом работает неправильно — для этого есть .
  • Без разогрева способен сделать разрушительно большой шаг на старте.
  • Больше , чем у , хотя трогать их обычно не нужно.

Брать, если

  • Начинаете новую задачу и нужен разумный результат быстро.
  • Обучаете или модель с .
  • Времени на подбор мало.

Не брать, если

  • Классическая свёрточная задача с большим бюджетом эпох — сравните с + .
  • Память на пределе: два состояния на параметр могут не поместиться.
  • Нужен — берите , а не с .

Чем заменяют

Тема также относится к главам:Глубокое обучениеОбучение

Видеолекции

Тайм-кода именно на эту тему в записях нет. Но глава «Оптимизация обучения» разобрана в курсе целиком — с той оговоркой, что место в записи придётся искать самому.

Связанные темы

Оптимизаторы

Optimization85%

Оптимизация · Основы

Поиск параметров, минимизирующих функцию потерь. Свойства задачи — выпуклость, гладкость, обусловленность — определяют, насколько это просто.

Optimizers85%

Оптимизаторы · Глубокое обучение

Правила обновления весов по градиенту: от чистого SGD до адаптивных методов.

Gradient Descent85%

Градиентный спуск · Оптимизация обучения

Итеративный шаг против градиента функции потерь — базовый алгоритм обучения.

SGD85%

Стохастический градиентный спуск · Оптимизация обучения

Градиент оценивается по мини-батчу: быстрее, шумнее и, как оказалось, полезнее для обобщения.

Momentum85%

Момент · Оптимизация обучения

Накопление экспоненциального среднего градиентов — движение по инерции сквозь колебания.

AdamW85%

AdamW · Оптимизация обучения

Adam с корректно отделённым weight decay — регуляризация применяется к весам, а не к градиенту.

RMSProp85%

RMSProp · Оптимизация обучения

Нормирует шаг на скользящее среднее квадратов градиента, выравнивая масштаб обновлений.

Learning Rate Scheduling85%

Расписание скорости обучения · Оптимизация обучения

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

Batch size85%

Размер батча · Оптимизация обучения

Число объектов на одно обновление весов: влияет на скорость, память и качество обобщения.

Кому эта тема нужна

Профильная компетенция для ролей: ML Engineer, CV-инженер, Исследователь, Инженер речи.

Усиливает профиль: NLP-инженер.

Проверить себя

Тема встречается в тесте по направлениям — ошибки приведут обратно на эту страницу.

Следующий шагПроверить себя: Глубокое обучениеТема встречается в этом тесте 1 раз. Ошибка приведёт обратно на эту страницу — с объяснением, что именно не сошлось.Перейти →

Глава «Оптимизация обучения» последний раз правилась . Нашли ошибку — напишите.