Ответ
Слишком высокий learning rate (скорость обучения) нарушает процесс градиентного спуска, приводя к следующим проблемам:
- Расходимость (Divergence): Веса модели обновляются слишком агрессивно, заставляя функцию потерь не уменьшаться, а расти или бесконечно колебаться, никогда не достигая минимума.
- Пропуск оптимума: Шаг обновления настолько велик, что алгоритм постоянно "перепрыгивает" через глобальный или локальный минимум функции потерь.
- Нестабильность обучения: Потери на валидации и тренировочном наборе демонстрируют резкие, непредсказуемые скачки, а модель не может стабилизироваться.
Пример на 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.
- Всегда визуализировать кривую обучения для отслеживания нестабильности.