Что такое скорость обучения нейросети? Объясняем простыми словами с примерами

От NP_Article

ИИ-технолог

Обучение управлению ИИ с 0 до мастерского уровня

250+ уроков Начато наполнение Без инфоцыган и воды

Скорость обучения (learning rate) – это главный параметр при тренировке любой нейросети. Он определяет, насколько сильно модель обновляет свои внутренние настройки (веса) после каждой попытки решить задачу. Практический смысл этого параметра прост: он задает размер шага, с которым нейросеть движется к правильному ответу. Если шаг слишком большой, модель проскочит верное решение. Если слишком маленький – обучение займет недели или остановится на полпути.

Какой вопрос закроем Что это даст на практике
Как выбрать стартовое значение скорости обучения Сможете запускать тренировку модели без долгого перебора параметров
Как по графику ошибок понять, что шаг выбран неверно Научитесь диагностировать проблемы обучения и не тратить часы на зависшую сеть
Как и зачем менять скорость в процессе тренировки Сможете “дожать” точность модели на последних эпохах

Главное правило выбора скорости обучения

В машинном обучении поиск правильного ответа часто сравнивают со спуском с горы в тумане. Ваша задача – найти самую нижнюю точку (минимум ошибки). Скорость обучения – это длина вашего шага.

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

  • Для оптимизатора Adam: Стандартное и самое надежное стартовое значение – 0.001 (в коде часто пишется как 1e-3). В 80% стандартных задач (табличные данные, базовая классификация картинок) это значение позволит модели начать уверенно обучаться.
  • Для оптимизатора SGD (Stochastic Gradient Descent): Стандартное значение – 0.1 или 0.01. SGD требует более крупных шагов на старте, чем Adam.
  • При дообучении готовой сети (Transfer Learning): Если вы взяли готовую модель и обучаете ее на своих данных, стандартные значения использовать нельзя – они разрушат уже имеющиеся знания сети. Используйте значения от 0.0001 до 0.00001 (от 1e-4 до 1e-5).

Как распознать ошибку по графику функции потерь (Loss)

Главный инструмент контроля – это график функции потерь (Loss). Он показывает, как меняется ошибка модели со временем. По его форме можно точно определить, что не так со скоростью обучения.

Сценарий 1: Значение Loss резко уходит вверх или выдает NaN

Причина: Скорость обучения слишком высока. Шаг настолько большой, что модель перепрыгивает яму с правильным решением и улетает вверх по склону “горы”. Происходит взрыв градиентов.
Что делать: Остановите обучение. Уменьшите скорость обучения ровно в 10 раз (например, с 0.01 до 0.001) и запустите заново.

Сценарий 2: Loss снижается, но график выглядит как широкая “пила”

Причина: Скорость обучения высоковата. Модель добралась до области правильных решений, но шаг слишком велик, чтобы попасть в самую глубокую точку. Модель “скачет” вокруг минимума от стенки к стенке.
Что делать: Если график сильно скачет в начале – уменьшите стартовый шаг в 2-5 раз. Если скачки начались ближе к концу обучения – вам нужно настроить расписание снижения скорости (об этом ниже).

Сценарий 3: Loss падает, но очень медленно, почти по прямой линии

Причина: Скорость обучения слишком низкая. Модель движется в правильном направлении, но микроскопическими шагами. Обучение займет неоправданно много времени, либо модель застрянет в локальном минимуме (небольшой ямке), приняв его за финальную цель.
Что делать: Увеличьте скорость обучения в 5-10 раз. Убедитесь, что график стал более крутым на первых эпохах.

Развилки: как управлять скоростью в процессе обучения

Держать скорость обучения одинаковой от начала до конца тренировки – плохая практика. Чтобы модель сначала быстро нашла нужную область, а потом аккуратно “прицелилась” в самый минимум ошибки, скорость нужно снижать. Это называется расписанием (Learning Rate Scheduler). Выбор зависит от вашей задачи.

Вариант 1: Снижение при выходе на плато (ReduceLROnPlateau)

Самый практичный и безопасный метод. Вы указываете модели следить за метрикой (например, точностью на проверочной выборке). Если метрика не улучшается в течение нескольких эпох (это называется “терпением” или patience), скорость обучения автоматически снижается в заданное число раз.
Когда применять: В любых нестандартных или новых задачах. Это защита от ситуации, когда вы не знаете, на какой эпохе модель замедлит обучение.

Вариант 2: Ступенчатое снижение (StepLR)

Вы жестко задаете правило: уменьшать скорость обучения, например, в 10 раз каждые 30 эпох.
Когда применять: Когда вы работаете со стандартными датасетами и известными архитектурами, где поведение модели предсказуемо. Часто используется при обучении сетей для распознавания изображений (ResNet, YOLO).

Вариант 3: Прогревом (Warmup) + косинусное затухание

Скорость обучения сначала плавно возрастает от нуля до максимума за первые несколько эпох, а затем медленно снижается по кривой косинуса.
Когда применять: Обязательно при обучении трансформеров (например, BERT, GPT) или очень глубоких нейросетей с нуля. Без “прогрева” такие архитектуры в начале обучения накапливают огромные ошибки и ломаются.

Ограничения и неочевидные случаи

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

Связь с размером батча (Batch Size)
Скорость обучения напрямую зависит от размера батча (количества примеров, которые сеть обрабатывает за один раз). Принято использовать линейное правило масштабирования: если вы увеличили размер батча в 2 раза, вам нужно увеличить скорость обучения также в 2 раза (или использовать корень из двух, в зависимости от оптимизатора). Если вы увеличили батч, но оставили старую скорость обучения, модель будет учиться слишком медленно.

Оптимизатор Adam не прощает слишком высоких значений
В отличие от SGD, оптимизатор Adam сам адаптирует скорость обучения для каждого отдельного веса внутри сети. Из-за этого базовая скорость для него является лишь верхним пределом. Если вы поставите Adam стартовую скорость 0.1, модель с вероятностью 99% не сойдется. Не переносите настройки скорости от алгоритма к алгоритму.

Скорость обучения не исправит плохие данные
Если график Loss не падает, не спешите бесконечно менять скорость обучения. Убедитесь, что в данных нет критических ошибок (например, перепутаны метки классов), а архитектура сети соответствует задаче. Если Loss стоит на месте при любых значениях скорости от 1e-1 до 1e-6, проблема гарантированно не в скорости обучения.

Коротко о главном

  • Если сомневаетесь со стартом, ставьте Adam со скоростью 0.001.
  • Для дообучения готовых сетей (файн-тюнинга) снижайте скорость до 0.0001 или ниже.
  • Если Loss улетает в космос или выдает NaN – шаг слишком большой, делите на 10.
  • Если Loss падает по миллиметру в час – шаг слишком мал, умножайте на 10.
  • Никогда не учите сложную модель со статической скоростью до конца. Используйте автоматическое снижение при остановке прогресса (ReduceLROnPlateau).
Бесплатно с ИИ Claude · ChatGPT
Баланс запросов: —