Learning Rate
learning rate — масштаб шага обновления параметров
Learning rate — настройка масштаба обновлений при обучении. При слишком малом шаге модель учится медленно, при слишком большом процесс может стать нестабильным. Разберём, как подобрать значение и сравнить результаты.
Коротко
Learning rate, или LR, задаёт масштаб шага оптимизатора. Он не выбирает направление сам и не показывает «процент выученного». Направление формируется градиентом и правилами оптимизатора, а LR делает итоговое обновление крупнее или мельче.
На рельефной карте из инфографики маленькие шаги не успевают дойти до низины. Чрезмерные перескакивают её и колеблются между склонами. Подходящий для этого маршрута масштаб постепенно приводит к цели. В реальной нейросети ландшафт гораздо сложнее, а оценка градиента меняется от одного пакета примеров к другому, но метафора передаёт главную роль LR.
Простая формула и её пределы
Для обычного градиентного спуска обновление записывают так:
θ_(t+1) = θ_t - η · ∇L(θ_t)
Здесь:
θ— параметры модели;L— функция ошибки;∇L— градиент, указывающий направление роста ошибки;η— learning rate.
Знак минус задаёт направление локального уменьшения ошибки. Слишком большой шаг всё равно может привести в точку с большей ошибкой. Если η увеличить в два раза, шаг простого SGD при том же градиенте тоже станет вдвое больше.
Современный оптимизатор редко использует только текущий градиент. Momentum накапливает направление прошлых шагов, Adam оценивает первый и второй моменты градиента, другие методы вводят собственную нормировку и состояние. Поэтому общая запись выглядит точнее:
θ_(t+1) = θ_t - LR · update_t
update_t вычисляет оптимизатор. В оригинальной работе Adam обновление строится из адаптивных оценок моментов. Заданный LR остаётся важным глобальным масштабом, но фактическое изменение каждого параметра уже не равно LR × исходный градиент.
Почему слишком маленький LR тоже может быть проблемой
Небольшой шаг обычно выглядит безопасным, но у обучения есть конечный бюджет. Если обновления слишком малы:
- loss улучшается медленно;
- нужный концепт не успевает сформироваться;
- scheduler может уменьшить LR раньше, чем модель дошла до полезной области;
- обновления могут стать слишком малы для выбранной точности вычислений.
Такой запуск не обязательно «стабилен, просто требует времени». Изменение LR влияет на траекторию, взаимодействие с batch и состояние оптимизатора. Продлить обучение во много раз — не всегда то же самое, что выбрать больший шаг с самого начала.
Что происходит при чрезмерном LR
Слишком крупные обновления способны:
- заставить loss колебаться или расти;
- давать всплески нормы градиента и параметров;
- быстро разрушить полезные признаки базовой модели;
- сделать результаты соседних сохранённых состояний модели резко разными;
- привести к численной нестабильности.
При этом ровный loss ещё не гарантирует подходящий LR. Адаптивный оптимизатор и ограничение нормы градиента могут скрыть часть симптомов, а качество на проверочных данных начнёт ухудшаться раньше очевидного взрыва.
Большой LR также не является синонимом overfitting. Переобучение — разрыв между обучающей выборкой и новыми данными. Чрезмерный LR чаще создаёт проблему оптимизации, хотя оба эффекта могут появиться в одном запуске.
LR зависит от оптимизатора
Одинаковое число нельзя напрямую переносить между SGD, Adam, AdamW и другими алгоритмами. Они по-разному обрабатывают масштаб и историю градиентов. Дополнительно влияют:
- momentum и коэффициенты моментов;
- epsilon в знаменателе адаптивной нормировки;
- weight decay и способ его применения;
- ограничение нормы градиента;
- точность чисел и масштабирование ошибки для устойчивых вычислений;
- разбиение параметров на группы.
Документация PyTorch подчёркивает, что оптимизатор хранит состояние и обновляет переданные ему параметры. LR — одна из настроек этого процесса, а не самостоятельный алгоритм обучения.
Некоторые оптимизаторы адаптируют относительный шаг для каждого параметра или группы. Это не означает, что внешний LR больше не важен. Скорее его смысл нужно читать вместе с формулой конкретного метода.
У одной тренировки может быть несколько LR
Параметры можно объединить в группы и назначить каждой собственные настройки. В персонализации изображений отдельно обновляются, например:
- адаптерные матрицы основной генеративной модели;
- текстовый энкодер;
- эмбеддинг нового токена;
- разные блоки одной сети.
Одна строка learning_rate в интерфейсе может быть лишь значением по умолчанию, поверх которого действуют групповые множители. Поэтому журнал с одним числом не всегда полностью описывает запуск.
Если текстовый энкодер и denoiser получают разные LR, их полезно записывать в журнал раздельно. Иначе сложно понять, какая часть менялась слишком быстро.
Learning-rate scheduler
LR не обязан оставаться постоянным. Scheduler меняет его по мере обучения. Общая схема:
LR_t = base_LR × multiplier(t)
Встречаются постоянные, линейно убывающие, косинусные, ступенчатые и другие функции. Warmup в начале постепенно поднимает LR от малого значения; это уменьшает резкость первых обновлений, когда состояние оптимизатора ещё только формируется. Расписание также может реагировать на остановку улучшения проверочной метрики.
Форма расписания не имеет универсального победителя. Для короткого запуска длинный warmup способен занять большую часть обучения, а слишком быстрое снижение LR — слишком рано почти остановить обновления. В длинной тренировке те же параметры ведут себя иначе.
Важно не путать 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.
При накоплении градиента несколько небольших пакетов обрабатываются перед одним обновлением параметров. Эффективный размер пакета растёт, а число обновлений при том же числе примеров уменьшается. Если одновременно скопировать LR и scheduler от другого запуска, меняется сразу несколько условий.
Как сравнивать значения LR
Полезнее не искать одно «правильное» значение, а сравнить небольшой диапазон в одинаковых условиях. Для каждого короткого пробного запуска сохраняются:
- кривая ошибки на обучающих данных;
- ошибка на проверочных данных или целевая метрика;
- текущий LR каждой группы;
- нормы градиента и обновления, если они доступны;
- несколько одинаковых проверочных генераций;
- фактическое число обновлений параметров.
Логарифмическая сетка удобнее линейной: различие между 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 нет. Подходящая скорость обучения зависит от архитектуры, оптимизатора, обучаемых модулей, ранга адаптера, размера пачки, числа обновлений, расписания и данных. Удобнее начать с конфигурации для такой же модели и тренера, затем сравнить несколько близких значений на отложенных примерах.
Cosine всегда лучше constant?
Нет. Это разные траектории LR. Результат зависит от длины запуска и того, когда модели нужны крупные или мелкие обновления. Сравнивать их стоит при одинаковом пиковом LR и бюджете вычислений.
Если loss почти не падает, нужно увеличить LR?
Возможно, но причина бывает и в данных, подписях, замороженных параметрах, ошибке загрузки, неверной целевой величине предсказания или слишком сильной регуляризации. Один симптом не определяет настройку однозначно.
Если loss скачет, LR слишком большой?
Это одна из частых причин. Также возможны выбросы в batch, численная нестабильность, неверное масштабирование loss и проблемы с данными. Нормы градиента и повторяемость всплесков помогают различить случаи.
Можно ли изменить LR при возобновлении обучения?
Да, если тренировочный код это поддерживает. Но новый LR продолжит работу с текущими весами и состоянием оптимизатора, поэтому это уже другая траектория. Для продолжения того же запуска сохраняются и scheduler, и счётчик шагов.
Главное
Learning rate — масштаб обновления, а не универсальная скорость «усвоения знаний». В SGD он напрямую умножает градиент, в адаптивных оптимизаторах — масштабирует более сложное обновление.
Подходящее значение существует только внутри конкретной связки модели, оптимизатора, групп параметров, batch и scheduler. Небольшие воспроизводимые пробы и проверка на отложенных данных говорят о нём больше, чем таблица значений для чужих запусков.