Learning Rate

learning rate — масштаб шага обновления параметров

Раздел
Обучение
Сокращ.
LR
Обновлено
11.08.26

Learning rate задаёт масштаб обновлений, которые делает оптимизатор. Слишком маленький шаг может не успеть за бюджет обучения, слишком большой — перескакивать полезную область или делать процесс нестабильным. Универсального значения нет.

Коротко

Learning rate, или LR, задаёт масштаб шага оптимизатора. Он не выбирает направление сам и не показывает «процент выученного». Направление формируется градиентом и правилами оптимизатора, а LR делает итоговое обновление крупнее или мельче.

На рельефной карте из инфографики маленькие шаги не успевают дойти до низины. Чрезмерные перескакивают её и колеблются между склонами. Подходящий для этого маршрута масштаб постепенно приводит к цели. В реальной нейросети ландшафт гораздо сложнее и меняется от batch к batch, но метафора передаёт главную роль LR.

Простая формула и её пределы

Для обычного градиентного спуска обновление записывают так:

θ_(t+1) = θ_t - η · ∇L(θ_t)

Здесь:

  • θпараметры модели;
  • L — функция ошибки;
  • ∇L — градиент, указывающий направление роста ошибки;
  • η — learning rate.

Знак минус отправляет параметры в сторону уменьшения loss. Если η увеличить в два раза, шаг простого SGD при том же градиенте тоже станет вдвое больше.

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

θ_(t+1) = θ_t - LR · update_t

update_t вычисляет оптимизатор. В оригинальной работе Adam обновление строится из адаптивных оценок моментов. Заданный LR остаётся важным глобальным масштабом, но фактическое изменение каждого параметра уже не равно LR × raw gradient.

Почему слишком маленький LR тоже может быть проблемой

Небольшой шаг обычно выглядит безопасным, но у обучения есть конечный бюджет. Если обновления слишком малы:

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

Такой запуск не обязательно «стабилен, просто требует времени». Изменение LR влияет на траекторию, взаимодействие с batch и состояние оптимизатора. Продлить обучение во много раз — не всегда то же самое, что выбрать больший шаг с начала.

Что происходит при чрезмерном LR

Слишком крупные обновления способны:

  • заставить loss колебаться или расти;
  • давать всплески нормы градиента и параметров;
  • быстро разрушить полезные признаки базовой модели;
  • сделать результаты соседних checkpoints резко разными;
  • привести к численной нестабильности.

При этом ровный loss ещё не гарантирует подходящий LR. Адаптивный оптимизатор и gradient clipping могут скрыть часть симптомов, а качество на validation начнёт ухудшаться раньше очевидного взрыва.

Большой LR также не является синонимом overfitting. Переобучение — разрыв между train и новыми данными. Чрезмерный LR чаще создаёт проблему оптимизации, хотя оба эффекта могут появиться в одном запуске.

LR зависит от оптимизатора

Одинаковое число нельзя напрямую переносить между SGD, Adam, AdamW и другими алгоритмами. Они по-разному обрабатывают масштаб и историю градиентов. Дополнительно влияют:

  • momentum и коэффициенты моментов;
  • epsilon в знаменателе адаптивной нормировки;
  • weight decay и способ его применения;
  • gradient clipping;
  • precision и loss scaling;
  • разбиение параметров на группы.

Документация PyTorch подчёркивает, что оптимизатор хранит состояние и обновляет переданные ему параметры. LR — одна из настроек этого процесса, а не самостоятельный алгоритм обучения.

Некоторые оптимизаторы адаптируют относительный шаг для каждого параметра или группы. Это не означает, что внешний LR больше не важен. Скорее его смысл нужно читать вместе с формулой конкретного метода.

У одной тренировки может быть несколько LR

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

  • адаптерные матрицы denoiser;
  • текстовый энкодер;
  • embedding нового токена;
  • разные блоки одной сети.

Одна строка learning_rate в интерфейсе может быть лишь значением по умолчанию, поверх которого действуют групповые множители. Поэтому журнал с одним числом не всегда полностью описывает запуск.

Если текстовый энкодер и denoiser получают разные LR, их полезно логировать раздельно. Иначе сложно понять, какая часть менялась слишком быстро.

Learning-rate scheduler

LR не обязан оставаться постоянным. Scheduler меняет его по мере обучения. Общая схема:

LR_t = base_LR × multiplier(t)

Встречаются постоянные, линейно убывающие, cosine, ступенчатые и другие функции. Warmup в начале постепенно поднимает LR от малого значения; это уменьшает резкость первых обновлений, когда состояние оптимизатора ещё только формируется. Scheduler также может реагировать на plateau validation-метрики.

Форма расписания не имеет универсального победителя. Для короткого запуска длинный warmup способен занять большую часть обучения, а агрессивный decay — слишком рано почти остановить обновления. В длинной тренировке те же параметры ведут себя иначе.

Важно не путать LR scheduler с noise schedule. Первый управляет масштабом обновления весов при обучении. Второй связывает время диффузионного процесса с уровнем шума.

Batch size и правило линейного масштабирования

Больший batch обычно даёт менее шумную оценку градиента. Отсюда возникли эвристики, связывающие batch size и LR. Известное linear scaling rule использовалось в работе Accurate, Large Minibatch SGD: при масштабировании large-batch SGD для конкретной задачи LR увеличивали пропорционально batch и добавляли warmup.

Это полезный результат, но не закон для любого fine-tuning. Он не гарантирует ту же траекторию для:

  • другого оптимизатора;
  • очень малого датасета;
  • адаптерного обучения;
  • другого числа обновлений;
  • накопления градиента;
  • иной нормировки loss.

При gradient accumulation несколько microbatches предшествуют одному optimizer step. Effective batch растёт, а число обновлений при том же числе примеров уменьшается. Если одновременно скопировать LR и scheduler от другого запуска, меняется сразу несколько условий.

Как оценивать LR без магического числа

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

  • кривая train loss;
  • validation loss или целевая метрика;
  • текущий LR каждой группы;
  • нормы градиента и обновления, если они доступны;
  • несколько одинаковых проверочных генераций;
  • фактическое число optimizer steps.

Логарифмическая сетка удобнее линейной: различие между 1e-6 и 1e-5 по масштабу такое же, как между 1e-5 и 1e-4. Это не рекомендация конкретных значений, а способ сравнивать порядки величины.

Тест лучше повторять с несколькими seed обучения или хотя бы не делать вывод по одному случайному запуску. На малом датасете шум batch способен заметно изменить картину.

Научная запись маленьких чисел

Запись 1e-4 означает:

1 × 10⁻⁴ = 0.0001

А 5e-5 — это 0.00005. Чем более отрицательна степень, тем меньше число. Такая запись не несёт дополнительного смысла и нужна только для компактности.

Ноль — отдельный случай: при LR = 0 оптимизатор может обновлять внутреннее состояние, но параметры через LR-шаг не сдвинутся. Во время warmup нулевое начальное значение допустимо как точка расписания, а не как самостоятельный режим обучения.

С чем часто путают

  • LR и loss. Loss измеряет ошибку, LR задаёт масштаб реакции оптимизатора.
  • LR и epoch. Epoch считает проходы по данным, LR влияет на каждое обновление внутри них.
  • LR и batch size. Batch определяет примеры для оценки градиента; универсальной формулы пересчёта LR нет.
  • LR и weight decay. Weight decay меняет регуляризацию или отдельную часть обновления, в зависимости от оптимизатора.
  • LR scheduler и noise schedule. Это расписания разных процессов.
  • Base LR и фактический шаг. Оптимизатор, scheduler и параметрическая группа преобразуют базовое значение.

Частые вопросы

Какой LR выбрать для LoRA?

Одно значение для всех LoRA невозможно назвать честно. Оно зависит от архитектуры, оптимизатора, trainable-модулей, rank, batch, числа обновлений, scheduler и данных. Надёжнее взять воспроизводимую конфигурацию для той же связки и проверить небольшой диапазон на своём validation.

Cosine всегда лучше constant?

Нет. Это разные траектории LR. Результат зависит от длины запуска и того, когда модели нужны крупные или мелкие обновления. Сравнивать их стоит при одинаковом пиковом LR и бюджете вычислений.

Если loss почти не падает, нужно увеличить LR?

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

Если loss скачет, LR слишком большой?

Это одна из частых причин. Также возможны выбросы в batch, численная нестабильность, неверное масштабирование loss и проблемы с данными. Нормы градиента и повторяемость всплесков помогают различить случаи.

Можно ли изменить LR при возобновлении обучения?

Да, если тренировочный код это поддерживает. Но новый LR продолжит работу с текущими весами и состоянием оптимизатора, поэтому это уже другая траектория. При точном resume сохраняются и scheduler, и счётчик шагов.

Главное

Learning rate — масштаб обновления, а не универсальная скорость «усвоения знаний». В SGD он напрямую умножает градиент, в адаптивных оптимизаторах — масштабирует более сложное обновление.

Подходящее значение существует только внутри конкретной связки модели, оптимизатора, групп параметров, batch и scheduler. Небольшие воспроизводимые пробы и честный validation говорят о нём больше, чем таблица значений для чужих запусков.

Источники