Оптимизация обучения

Early Stopping

Ранняя остановка

актуальноТекущий рабочий стандарт

Обучение останавливается, когда валидационная метрика перестала улучшаться.

Ключевые тезисы

  • Patience задаёт, сколько эпох ждать улучшения.
  • Обязательно восстанавливать лучшие веса, а не последние.
  • Бесплатная и очень эффективная регуляризация.

Подробный разбор

2 подтем — раскройте любую, чтобы увидеть объяснение, формулы, примеры и интерактивные графики.

1

Как правильно останавливаться

Patience, восстановление лучших весов и типичные ошибки.

best, wait = None, 0
for epoch in range(max_epochs):
    train_one_epoch()
    score = evaluate(val)
    if best is None or score > best.score:
        best, wait = snapshot(model, score), 0
    else:
        wait += 1
        if wait >= patience:
            break
model.load_state_dict(best.weights)   # обязательный шаг
  • Patience должна учитывать шум валидации: слишком малая остановит обучение на случайном ухудшении.
  • Всегда восстанавливайте лучшие веса, а не оставляйте последние.
  • Валидация для ранней остановки — это уже потраченная выборка: финальную оценку делайте на отдельном тесте.
-3-113-4-2024xy
степень полинома3
ошибка на train0.568
ошибка на test0.395
диагнозбаланс
Ранняя остановка — способ остановиться в точке, где тестовая ошибка минимальна
2

Ранняя остановка в бустинге

Самый частый практический случай.

model = LGBMClassifier(n_estimators=5000, learning_rate=0.03)
model.fit(X_tr, y_tr,
          eval_set=[(X_val, y_val)], eval_metric="auc",
          callbacks=[early_stopping(stopping_rounds=200, verbose=False)])
print(model.best_iteration_)
Ставим заведомо большое число деревьев и позволяем валидации решить, где остановиться
На практике

После подбора числа итераций модель часто переобучают на train + val с найденным best_iteration, слегка увеличив его пропорционально росту выборки.

Связанные темы

Переобучение и регуляризация