Какой порог ошибки использовать для остановки обучения
Что проверяют
Понимаете ли вы, что универсального числа нет, и отличаете ли остановку по валидационной метрике от остановки по абсолютной цели. Следом спрашивают, на какой выборке смотреть ошибку и почему не на тестовой.
Как отвечать
Сразу скажите главное: абсолютный порог вроде «остановиться при loss ниже 0.05» почти не используют. Масштаб лосса зависит от задачи, функции потерь и данных, и такой порог либо не достигается, либо достигается ценой переобучения. Рабочий подход это ранняя остановка по валидации:
- что мониторить:
val_lossили целевую метрику на отложенной выборке, не на обучающей. Ошибка на обучении падает почти всегда; - patience: сколько эпох или раундов ждать без улучшения. Для шумной валидации ставят больше, для бустинга часто десятки раундов;
- min_delta: минимальное изменение, которое считается улучшением. Его подбирают под шум метрики, иначе колебания в четвёртом знаке тянут обучение дальше;
- лучшие веса: в Keras
EarlyStopping(monitor="val_loss", patience=5, min_delta=1e-3, restore_best_weights=True). По умолчаниюrestore_best_weightsвыключен, и модель остаётся с весами последней эпохи.
Аналоги: early_stopping_rounds в XGBoost, колбэк lightgbm.early_stopping в LightGBM, параметры early_stopping, n_iter_no_change и tol у части моделей scikit-learn. Абсолютный порог уместен, когда он пришёл из требований: в PyTorch Lightning у EarlyStopping есть stopping_threshold, а divergence_threshold прерывает заведомо разошедшееся обучение.
Если данных мало, подберите число эпох на кросс-валидации, а финальную модель обучите на всех данных с этим числом.
Где спотыкаются
Используют тестовую выборку для остановки. Тест превращается во вторую валидацию, и итоговая оценка получается завышенной.
Путают с порогом классификации. ROC-кривая и выбор отсечки по вероятности относятся к решению по готовой модели, а не к моменту остановки обучения.
Ставят маленький patience на шумной метрике. Обучение обрывается на случайном всплеске, хотя модель ещё улучшалась бы.