Что происходит при слишком большом learning rate?

«Что происходит при слишком большом learning rate?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Слишком высокий learning rate (скорость обучения) нарушает процесс градиентного спуска, приводя к следующим проблемам:

  1. Расходимость (Divergence): Веса модели обновляются слишком агрессивно, заставляя функцию потерь не уменьшаться, а расти или бесконечно колебаться, никогда не достигая минимума.
  2. Пропуск оптимума: Шаг обновления настолько велик, что алгоритм постоянно "перепрыгивает" через глобальный или локальный минимум функции потерь.
  3. Нестабильность обучения: Потери на валидации и тренировочном наборе демонстрируют резкие, непредсказуемые скачки, а модель не может стабилизироваться.

Пример на PyTorch, иллюстрирующий проблему:

import torch
import torch.nn as nn

# Модель и данные
model = nn.Linear(10, 1)
optimizer_too_high = torch.optim.SGD(model.parameters(), lr=1.0) # Слишком высокий LR
optimizer_reasonable = torch.optim.SGD(model.parameters(), lr=0.01) # Разумный LR

# При lr=1.0 обновления весов будут чрезмерными, что, скорее всего, приведёт к расходимости.

Как с этим бороться:

  • Начинать с малых значений (например, 1e-3, 1e-4) и использовать поиск по сетке.
  • Внедрять планировщики скорости обучения (torch.optim.lr_scheduler), которые уменьшают LR по мере обучения.
  • Использовать адаптивные оптимизаторы (Adam, RMSProp), которые автоматически настраивают шаг для каждого параметра, но они также чувствительны к чрезмерно высокому начальному LR.
  • Всегда визуализировать кривую обучения для отслеживания нестабильности.