Art of DS

Вигляд

Палітра
Тема
Доступ $20 одноразово
Увійти або створити акаунт

Вхід до Art of DSСтворіть акаунт Art of DS

Ми надішлемо на пошту посилання й шестизначний код. Увійти можна будь-яким із них; пароля немає.Введіть свою пошту. Ми надішлемо посилання й шестизначний код, щоб її підтвердити, — пароль не потрібен. Акаунт безкоштовний.

  • Ви повернетеся на цю сторінку, туди, де зупинилися.
  • Уже маєте акаунт? З тією самою адресою ви просто ввійдете.

Продовжуючи, ви приймаєте Умови та Політику конфіденційності.

Ваш акаунт

Безкоштовний акаунтДоступ назавжди

складність 2/5 Безкоштовно

Early stopping

Визначення

Припиніть навчання, коли втрати на відкладеній вибірці перестають покращуватися, і поверніть найкращі ваги, а не останні. Це регуляризація шляхом обмеження епох замість ваг.

Спершу прочитайте Overfitting Увесь шлях — на мапі

Інтуїція

Навчайте модель із достатньою місткістю достатньо довго, і її втрати на навчальній вибірці продовжуватимуть знижуватися, проходячи повз точку, де вона перестала вчитися чомусь загальному. Втрати на відкладеній вибірці за нею вниз не йдуть. Вони падають, вирівнюються, а потім знову зростають.

Рання зупинка — це рішення припинити навчання в точці перегину цієї кривої. Ось і все, і це, мабуть, найпоширеніша форма регуляризації в глибокому навчанні [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.
втрати на навчальній вибірці падають завжди — відкладена крива повертає на 17-й епосі1310301003000.00.30.60.9trainingheld outусе праворуч звідси лише краще підганяє навчальну вибіркуp = 0bestp = 10
Середнє за 24 прогонами зі scripts/earlystopping.py: невелика мережа на 400 прикладах, у яких п’яту частину навчальних міток перевернуто. Штрихова крива — втрати на навчальній вибірці, які падають з 0.6446 до 0.0040 і ніколи не повертають. Суцільна крива — втрати на відкладеній вибірці, які досягають мінімуму на 17-й епосі, а потім зростають на 0.3560 — саме ця U-подібна форма і робить зупинку взагалі можливою. Вісь x логарифмічна, бо все рішення ухвалюється в перших тридцяти епохах із трьохсот. Три позначені точки — це виміряні епохи зупинки, а не ілюстрації: правило без терпіння спрацьовує в середньому на 11-й епосі, ще до мінімуму; терпіння 10 спрацьовує на 29-й, уже після нього, і саме тому воно ще має повернути найкращі ваги, а не поточні.

Яке правило і чого воно коштує

Правило, яке зазвичай описують, — «зупинитися, коли похибка на відкладеній вибірці зростає». Правило, яке варто використовувати, має терпіння.

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 →

Джерела

  1. Zhang, Lipton, Li, Smola. Dive into Deep Learning — Generalization in Deep Learningbook · звірено 2026-09-20https://d2l.ai/chapter_multilayer-perceptrons/generalization-deep.html
  2. Goodfellow, Bengio, Courville. Deep Learning — Regularization for Deep Learningbook · звірено 2026-09-20https://www.deeplearningbook.org/contents/regularization.html
  3. Zhang, Lipton, Li, Smola. Dive into Deep Learning — Learning Rate Schedulingbook · звірено 2026-10-06https://d2l.ai/chapter_optimization/lr-scheduler.html
  4. sklearn.ensemble.GradientBoostingClassifierdocs · звірено 2026-10-06https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html

Маєте промокод?

Код зі знижкою 100% одразу відкриває все. Менша знижка віднімається від ціни у вікні оплати: введіть там той самий код.

Написати в підтримку

Питання, проблема з доступом, повернення коштів? Напишіть нам, і ми відповімо листом.

Про що це?

Адресу використаємо лише для відповіді вам.

Повідомлення надіслано

Дякуємо. Відповімо листом на адресу, яку ви вказали.

Або напишіть нам напряму

support@artofds.com

Повідомлення надіслано Дякуємо. Відповімо листом на адресу, яку ви вказали.

Перевірте адресу пошти: вона потрібна, щоб відповісти.

Це наша адреса. Вкажіть свою, щоб відповідь дійшла до вас.

На цю адресу не можна надіслати лист. Перевірте, чи немає помилки.

Напишіть трохи більше: щонайменше 10 символів.

Забагато повідомлень за короткий час. Спробуйте за кілька хвилин.

Не вдалося надіслати повідомлення. Напишіть нам напряму: support@artofds.com