Early Stopping
Ранняя остановка завершает обучение, когда качество на валидации перестаёт улучшаться. Это сокращает бесполезные вычисления и помогает избежать переобучения, сохраняя лучший чекпойнт модели.
Ранняя остановка — это метод обучения, при котором итеративный процесс машинного обучения завершается, когда отслеживаемая метрика качества перестаёт улучшаться. Благодаря этому продолжительность обучения определяется качеством на валидации: сокращаются лишние вычисления и ограничивается переобучение. Проще говоря, обучение останавливается, когда дальнейшая практика уже не улучшает способность модели работать с отложенными примерами. За пределами машинного обучения «остановиться раньше» просто означает завершить занятие до запланированного срока.
Как работает ранняя остановка#
Во время обучения оптимизатор обновляет модель, используя обучающие данные. Через регулярные интервалы модель оценивается на отдельных валидационных данных. Потери на обучении могут продолжать снижаться, в то время как качество на валидации ухудшается. Это признак переобучения: модель всё сильнее подстраивается под особенности обучающих примеров. Ранняя остановка ограничивает этот процесс, выбирая момент завершения обучения на основе результатов на отложенных данных.
Типичная реализация отслеживает лучший результат на валидации, сохраняет соответствующие веса модели и считает подряд идущие проверки, во время которых не достигнуто достаточное улучшение. При улучшении счётчик сбрасывается; когда достигается заданное значение терпения, обучение завершается. Восстановление лучшего чекпойнта позволяет сохранить наилучший результат валидации, который может быть достигнут до последнего шага обучения.
Нельсон Морган и Эрве Бурлард предложили останавливать обучение на основе валидации для нейронных сетей прямого распространения в своей работе 1989 года об обобщающей способности и оценке параметров. В их экспериментах, в том числе по классификации речи, было показано, как выбирать продолжительность обучения, отслеживая независимые данные.
Метрики, терпение и лучшие веса#
Правило остановки зависит от нескольких параметров:
- Отслеживаемая метрика: Потери на валидации измеряют ошибку предсказания и минимизируются; точность на валидации измеряет долю верных предсказаний и максимизируется.
- Терпение и продолжительность обучения: Терпение задаёт количество проверок без улучшения, которое обучение может выдержать. Эпоха — это один полный проход по обучающему набору данных.
- Порог улучшения: В Keras он называется
min_deltaи задаёт минимальное абсолютное изменение, считающееся прогрессом. Параметрrestore_best_weights=Trueвосстанавливает веса, соответствующие лучшему отслеживаемому значению. - Частота проверок на валидации: PyTorch Lightning считает терпение в проверках на валидации. Если проверять модель каждые десять эпох и установить терпение на уровне трёх, допускаются три проверки без улучшения в течение тридцати эпох после лучшей проверки.
Терпение и пороги улучшения — это гиперпараметры, то есть параметры, выбранные вне процесса обновления весов. Меньшее значение терпения позволяет раньше завершать обучение, если прогресс остановился; большее — дольше ждать окончания временного плато. Период разогрева откладывает начало отслеживания, пока не стабилизируется начальное обучение. Эти параметры взаимодействуют с скоростью обучения, которая определяет размер шагов оптимизации.
Применение и пример для запуска#
Ранняя остановка применяется как в нейронных сетях, так и в деревьях градиентного бустинга. При градиентном бустинге с scikit-learn на каждом этапе добавляется дерево, а остановка на основе валидации определяет число этапов. В примере с набором данных California Housing используется validation_fraction для выделения данных и n_iter_no_change для остановки, когда прогресс на валидации прекращается.
В следующем примере используется встроенный набор данных о диабете из scikit-learn и выводится фактическое число обученных этапов бустинга:
from sklearn.datasets import load_diabetes
from sklearn.ensemble import GradientBoostingRegressor
X, y = load_diabetes(return_X_y=True)
# Reserve an internal validation split and monitor progress.
model = GradientBoostingRegressor(
n_estimators=1000,
validation_fraction=0.2,
n_iter_no_change=10,
random_state=42,
)
model.fit(X, y)
print(f"Boosting stages fitted: {model.n_estimators_}/1000")Число обученных этапов показывает, на каком этапе критерий остановки завершил построение деревьев относительно предельного значения в 1 000 этапов.
Ultralytics YOLO применяет раннюю остановку во время обучения модели, в том числе для YOLO26, с помощью аргумента patience, который считает эпохи без улучшения fitness на валидации. Для детекции fitness рассчитывается по mAP50–95, а тренер сохраняет лучший чекпойнт под именем best.pt.
Ранняя остановка и связанные понятия#
Ранняя остановка — это разновидность регуляризации, которая ограничивает продолжительность обучения. При уменьшении весов штрафуются большие веса, а при dropout во время обучения случайным образом отключаются отдельные элементы. Эти механизмы можно использовать одновременно. Если остановить обучение слишком рано, возникнет недообучение и полезные закономерности останутся невыученными.
Сохранение чекпойнтов сохраняет состояния модели; ранняя остановка определяет, когда завершить оптимизацию. При перекрёстной проверке отложенные подмножества данных поочерёдно используются для оценки вариантов модели, а отдельные тестовые данные служат для итоговой оценки. Поскольку решение об остановке выбирает модель на основе результатов валидации, результат валидации выбранного чекпойнта становится частью выбора модели.
В Keras restore_best_weights по умолчанию имеет значение False, поэтому при одной лишь активации ранней остановки в модели остаются веса последнего шага.










