складність 2/5 Безкоштовно
Early stopping
Припиніть навчання, коли втрати на відкладеній вибірці перестають покращуватися, і поверніть найкращі ваги, а не останні. Це регуляризація шляхом обмеження епох замість ваг.
Інтуїція
Навчайте модель із достатньою місткістю достатньо довго, і її втрати на навчальній вибірці продовжуватимуть знижуватися, проходячи повз точку, де вона перестала вчитися чомусь загальному. Втрати на відкладеній вибірці за нею вниз не йдуть. Вони падають, вирівнюються, а потім знову зростають.
Рання зупинка — це рішення припинити навчання в точці перегину цієї кривої. Ось і все, і це, мабуть, найпоширеніша форма регуляризації в глибокому навчанні [2, §7.8] — не тому, що він хитромудрий, а тому, що інформація, потрібна для його застосування, надходить безкоштовно під час навчання.
Формальне визначення
Замість того, щоб обмежувати ваги, обмежте кількість епох, що витрачаються на їхнє налаштування: це «класичний метод регуляризації глибоких нейронних мереж», де «замість того, щоб безпосередньо обмежувати значення ваг, обмежують кількість епох навчання» [1, §5.5.3].
Звичайна реалізація відстежує похибку на відкладеній вибірці в кожній епосі «і припиняє навчання, коли похибка на відкладеній вибірці не зменшилася більше ніж на деяку невелику величину ε протягом певної кількості епох. Це іноді називають критерієм терпіння» [1, §5.5.3].
Є дві частини, і їх можна розділити: коли зупинитися та які ваги зберегти. Саме другу зазвичай відкидають, і практичний приклад вимірює, скільки вона варта.
Як це працює
Відомо, чому крива на відкладеній вибірці взагалі повертає вгору за наявності шуму в мітках: мережі «схильні спочатку підганяти дані з правильними мітками, а вже потім інтерполювати дані з неправильними мітками» [1, §5.5.3]. Зупинка в точці перегину зберігає ту частину, яка узагальнювала, і пропускає ту, яка запам’ятовувала.
Однак причина, через яку вона зустрічається повсюди, полягає радше в арифметиці, а не в теорії. Якщо розглядати кількість кроків навчання як гіперпараметр, вона відрізняється від усіх інших: один прогін навчання проходить через кожне можливе значення на шляху до кінця [2, §7.8], тому її налаштування коштує одного прогону, а не одного прогону на кожне значення.
Де застосовується
Скрізь, де навчання є ітеративним і існує відкладена вибірка — а це майже скрізь у глибокому навчанні, а також у бустінгу, де кількість раундів відіграє точно таку саму роль, як і кількість епох: градієнтний бустинг у scikit-learn може відкласти частку даних для валідації й зупинитися, «коли оцінка на валідації не покращується» [4, n_iter_no_change].
Вона також слугує засобом контролю бюджету. «Ще однією перевагою ранньої зупинки є економія часу» [1, §5.5.3], яка для великих моделей вимірюється в днях роботи обладнання.
Чому і коли
Використовуйте її за замовчуванням. Наведений нижче практичний приклад показує, що вартість відмови від неї на порядок перевищує вартість невдалого налаштування, тому тут немає чого довго обмірковувати.
Налаштуйте її з терпінням приблизно в десять епох, зберігайте копію найкращих ваг і майте на увазі, чого вона коштує: вона витрачає валідаційну вибірку, а вибірка, за якою обрано точку зупинки, не може бути тією самою вибіркою, яку ви наводите у звіті.
Практичний приклад
Усе в scripts/earlystopping.py. Невелика мережа, 400 навчальних прикладів, у
яких п’ята частина міток перевернута, 300 епох, 24 прогони. Криві кожного
прогону записуються один раз, і потім кожне правило застосовується до тих
самих записаних кривих, тому два правила, що розходяться, розходяться саме
через правило.
24 runs, 300 epochs, 20% of training labels flipped
epoch train validation test
1 0.6446 0.6500 0.6467
10 0.5012 0.5076 0.5010
25 0.3684 0.5083 0.5023
50 0.1246 0.5739 0.5690
100 0.0247 0.6995 0.6866
200 0.0072 0.8055 0.7883
300 0.0040 0.8584 0.8397
validation bottoms out at epoch 17 and rises by
0.3560 by the end. Training loss never stops falling:
0.6446 to 0.0040. Only the held-out curve turns.Яке правило і чого воно коштує
Правило, яке зазвичай описують, — «зупинитися, коли похибка на відкладеній вибірці зростає». Правило, яке варто використовувати, має терпіння.
Python 11 рядків Показати код Сховати код
def apply_rule(curve, patience, min_delta=0.0):
"""Return (stop_epoch, best_epoch) for a patience rule run on one curve."""
best, best_e, waited = np.inf, 0, 0
for e, v in enumerate(curve):
if v < best - min_delta:
best, best_e, waited = v, e, 0
else:
waited += 1
if waited > patience:
return e, best_e
return len(curve) - 1, best_eВивід
every rule applied to the same recorded curves
rule epochs used test loss vs oracle
no stopping, keep last 300 0.8397 +0.3498
stop on any rise (p=0) 11 0.5006 +0.0107
patience 5 21 0.4945 +0.0047
patience 10 29 0.4934 +0.0036
patience 25 44 0.4934 +0.0036
patience 50 69 0.4934 +0.0036
oracle (unattainable) 17 0.4899 +0.0000
The size of the first gap is the point: not stopping costs more than
every choice about how to stop, by an order of magnitude. Patience
then buys a further threefold narrowing, because validation loss
jitters between epochs, and a rule with no patience fires on jitter.
Past patience 10 nothing changes except the electricity bill.Зупинитися — це не те саме, що відновити
Правило терпіння за своєю побудовою зупиняє навчання на кілька епох після найкращої — саме в цьому полягає очікування. Тому ваги в пам’яті на момент спрацьовування не є тими вагами, які вам потрібні.
halting early and restoring the best weights are two different things
patience restore best keep last cost of not restoring
5 0.4945 0.5020 +0.0075
10 0.4934 0.5095 +0.0161
25 0.4934 0.5445 +0.0511
50 0.4934 0.6195 +0.1260
Stopping hands you whichever epoch ran out of patience, which is by
construction worse than the best epoch it already saw. The more
patience you allow, the more that costs: at patience 50, halting
alone still leaves 0.1296 of the gap to the oracle, and keeping
a copy of the best parameters removes 0.1260 of it.Гіперпараметр, який дістається безкоштовно
what it costs to tune the number of epochs, against anything else
candidates tried training runs
number of epochs, one run 300 1
any other hyperparameter 300 300
Tuning the stopping point to the same resolution as a learning rate
costs 300 runs for the learning rate and 1 for the stopping point,
because a run passes through every candidate on its way to the end.
The overhead is one forward pass over 150 held-out rows per epoch,
against a backward pass over 400 training rows.
And it is accurate: the epoch validation picks is +0.0036 worse than
the epoch the test set would have picked. Choosing among 300 epochs
is not choosing among 300 independent models -- neighbouring epochs
are nearly the same model, so there is little to overfit to.
The validation set is still spent, though. It chose the model, so it
cannot also be the number you report.Типові помилки
Зупинка на першому зростанні. Втрати на відкладеній вибірці коливаються між епохами, і правило без терпіння спрацьовує на цих коливаннях — вище воно зупиняється на 11-й епосі, коли мінімум припадає на 17-ту. Терпіння — це не уточнення; це саме правило.
Зупинка без відновлення. Виміряна вартість зростає разом із терпінням, бо терпіння — це саме відстань між тим, де ви зупинилися, і тим, де слід було зупинитися. При терпінні 50 втрачається майже все, що дала зупинка.
Наведення результату, виміряного на відкладеній вибірці. Епоху зупинки обрано на цій вибірці, що робить ранню зупинку «дуже ефективним алгоритмом вибору гіперпараметрів» [2, §7.8] — а гіперпараметр, обраний на вибірці, витрачає її. Наводьте результат на даних, які не мали на це впливу. Див. перехресну перевірку для загальної форми цієї задачі.
Припущення, що крива має одну точку перегину. Наведене вище правило бере перший мінімум, який переживає вікно терпіння. Крива, яка пізніше опускається ще раз, буде пропущена, і це причина будувати графік кривої, а не лише читати число, яке повернуло правило.
Забування про взаємодію з темпом навчання. Розклад, що зменшує темп навчання, при кожному зменшенні спричиняє нове зниження втрат на відкладеній вибірці, тому терпіння, налаштоване на сталий темп, може спрацювати під час плато безпосередньо перед таким зниженням. Кусково-сталий розклад навмисно побудовано саме так: він дає оптимізації дійти до плато, і «тоді (і лише тоді)» знижує темп [3, §12.11.3.2]. Див. темп навчання.
Ще не прочитаноДочитайте сторінку до кінця — і вона вважатиметься прочитаною.
Зберігайте свій прогресЗ доступом назавжди кожна дочитана сторінка позначається, і ви продовжуєте з того місця, де зупинилися, на всіх своїх пристроях.
Відкрити доступПеревірте себе
3 запитання
Кожну відповідь пояснено: який розділ вона перевіряє і з якого джерела.
На шпаргалці: Validation and generalisation →
Джерела
- Dive into Deep Learning — Generalization in Deep Learningbook · звірено 2026-09-20https://d2l.ai/chapter_multilayer-perceptrons/generalization-deep.html
- Deep Learning — Regularization for Deep Learningbook · звірено 2026-09-20https://www.deeplearningbook.org/contents/regularization.html
- Dive into Deep Learning — Learning Rate Schedulingbook · звірено 2026-10-06https://d2l.ai/chapter_optimization/lr-scheduler.html
- sklearn.ensemble.GradientBoostingClassifierdocs · звірено 2026-10-06https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html