Art of DS

Вигляд

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

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

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

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

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

Ваш акаунт

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

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

Dropout

Визначення

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

Спершу прочитайте Regularization Увесь шлях — на мапі
Формула
h′={0з імовірністю ph1−pінакшеh' = \begin{cases} 0 & \text{з імовірністю } p \\ \dfrac{h}{1-p} & \text{інакше} \end{cases}

Інтуїція

На нейрон, який можуть прибрати будь-якої миті, не можна покластися. Дропаут під час навчання випадково прибирає нейрони, тож жоден нейрон не може розраховувати, що якийсь конкретний інший буде на місці, і шар мусить розподіляти роботу, а не пускати її кількома незамінними шляхами.

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

Формальне визначення

«Метод називається дропаутом, бо під час навчання ми буквально викидаємо (drop out) деякі нейрони. Упродовж навчання, на кожній ітерації, стандартний дропаут полягає в обнуленні певної частки вузлів у кожному шарі перед обчисленням наступного шару» [1, §5.6].

Саме лише обнулення зменшило б кожен шар, якого воно торкається. Виправлення — вносити шум «незміщено, так щоб математичне очікування кожного шару — за фіксованих інших — дорівнювало значенню, яке він мав би без шуму» [1, §5.6], а це і є ділення у формулі вище.

Наслідок — ось що варто запам’ятати: «дропаут використовується лише під час навчання: він замінює активацію h випадковою величиною з математичним очікуванням h» [1, §5.6.4]. Під час тестування «ми не відкидаємо жодних вузлів і тому не мусимо нормалізувати» [1, §5.6.1].

Як це працює

Навчання з дропаутом навчає не одну мережу. Кожна маска задає іншу підмережу, і дропаут найкраще розуміти як «недороге наближення до навчання й оцінювання беггінг-ансамблю з експоненційно великої кількості нейронних мереж» [2, §7.12].

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

Де застосовується

Здебільшого повнозв’язні шари, а найбільше — широкі шари наприкінці мережі, де зосереджені параметри. До згорткових шарів його застосовують набагато рідше: їх уже обмежує спільне використання ваг.

Він має друге життя під час тестування, коли його навмисно лишають увімкненим: «деякі дослідники використовують дропаут під час тестування як евристику для оцінювання невизначеності прогнозів нейронної мережі: якщо прогнози узгоджуються між багатьма різними виходами з дропаутом, можна сказати, що мережа впевненіша» [1, §5.6.1]. Рисунок нижче — це і є намальований розкид.

Чому і коли

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

Ось чесний підсумок: дропаут — лише один член родини [2, §7.12], і члени цієї родини радше заміняють одне одного, ніж складаються.

Практичний приклад

Усе в scripts/dropout.py.

Навіщо ділення

Python 6 рядків Показати код Сховати код
def dropout(x, p, invert, gen):
    """Standard dropout. invert=False is the version without the rescaling."""
    if p == 0.0:
        return x
    keep = (gen.uniform(size=x.shape) >= p).astype(float)
    return x * keep / (1 - p) if invert else x * keep

Вивід

  a layer of activations, mean 3.00 by construction
       p    no dropout   masked only    masked / (1-p)   std / mean
    0.00        3.0012        3.0012            3.0012       0.7077
    0.10        3.0012        2.7017            3.0024       0.8169
    0.25        3.0012        2.2504            3.0024       0.9998
    0.50        3.0012        1.4989            3.0024       1.4149
    0.75        3.0012        0.7498            3.0030       2.2394

    The middle column is the layer the next layer would receive if the
    rescaling were skipped: smaller by exactly (1 - p), so every
    downstream weight is now calibrated to a signal that vanishes at
    test time. The right column is unbiased at every rate -- and the
    last column is the price, which is variance, rising with p.

Середній стовпець — це помилка, яку ви отримуєте задарма, реалізувавши лише назву. Кожну наступну вагу підганяли б під сигнал, помножений на (1 − p), а під час тестування сигнал приходить на повну силу.

Модель, яку випускають, — не та, що навчалася

  deterministic output vs the mean over 20,000 sampled masks
            dropout is followed by     p  deterministic   mask mean      gap  in s.e.
                  a linear readout   0.2         1.5093      1.5099   0.0006      0.2
                  a linear readout   0.5         1.5093      1.5131   0.0038      0.6
          three more linear layers   0.2        -0.5224     -0.5252   0.0027      0.3
          three more linear layers   0.5        -0.5224     -0.5216   0.0008      0.0
      a linear readout, after tanh   0.2        -0.0634     -0.0640   0.0006      0.3
      a linear readout, after tanh   0.5        -0.0634     -0.0659   0.0026      0.6
            three more tanh layers   0.2         0.2082      0.1590   0.0492     17.3
            three more tanh layers   0.5         0.2082      0.0860   0.1222     20.7

    The last column is what makes the table readable: a gap of a couple
    of standard errors is the sampling. The last two rows are not sampling.
    Wherever dropout is followed by a linear map the rule is exact, and
    the arithmetic says why -- the mask has mean 1 and is independent of
    what it multiplies, so the average passes straight through. Put a
    nonlinearity BETWEEN two dropped layers and it stops passing through.
    The model you ship is then a cheap approximation of an ensemble you
    never build: usually a good one, never the thing you trained.
20,000 dropout masks, one input, one set of weights-2-1012average of the masks 0.0860deterministic pass 0.2082the shipped model is one number; what it approximates is the whole spread
From scripts/dropout.py: a four-hidden-layer tanh network at p = 0.5, one fixed input, evaluated 20,000 times with independently sampled dropout masks. The histogram is what training with dropout actually optimises — an ensemble of subnetworks whose outputs here range from about −2.4 to 2.5. The deterministic forward pass, the one that ships, produces the single value 0.2082. The average over all 20,000 masks is 0.0860. Those two are not the same number, and the difference is 20.7 standard errors, so it is not sampling: with a nonlinearity between two dropped layers, the weight-scaling rule stops being exact. It is still a good trade, because the gap of 0.12 is small beside a spread of nearly 5 — but the model that ships is an approximation of an ensemble, not the thing that was trained.

Яка частка, і чи це важливо

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

  test loss by dropout rate, 24 seeds, the same data per seed
      p    fixed 120 epochs    stopped on validation    vs p=0   in s.e.
    0.0              0.8640                   0.4855                    
    0.1              0.9378                   0.4955   +0.0100       1.7
    0.2              0.9888                   0.4926   +0.0071       1.5
    0.3              0.9555                   0.4872   +0.0017       0.4
    0.5              0.7845                   0.4893   +0.0038       0.6
    0.7              0.6278                   0.4847   -0.0008      -0.1
    0.9              0.9932                   0.6125   +0.1270       9.9

    The two columns disagree about almost everything, and the left one
    is wrong. Dropout slows convergence, so a fixed epoch budget charges
    that to the rate: it makes 0.1 look harmful and 0.7 look like a
    discovery, and neither survives letting each rate stop where its own
    validation loss is lowest.

    What survives is narrow. Nothing from 0.1 to 0.7 is distinguishable
    from no dropout at all here, and 0.9 is clearly worse. This model is
    already regularized -- it stops early, on the same validation split.
    A second regularizer doing the same job has nothing left to do.

Типові помилки

Реалізація назви, а не формули. Обнулення без ділення зсуває масштаб кожного шару на множник (1 − p) між навчанням і висновуванням. Фреймворки роблять ділення під час навчання за вас; помиляються в саморобному дропауті.

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

Порівняння часток за фіксованого бюджету епох. Дропаут сповільнює збіжність, тож фіксований бюджет списує це на частку. Вище через це 0.1 виглядає шкідливою, а 0.7 — відкриттям, і жодне не витримує, коли кожній частці дають зупинитися там, де її власна валідаційна втрата найнижча, — див. ранню зупинку.

Накладання дропауту на вже регуляризовану модель. Дропаут перетинається з batch normalization, яка вносить власний шум і чия стаття повідомляє, що в деяких випадках вона може усунути потребу в дропауті. Додати обидва — не означає додати вдвічі, і таблиця вище — маленька версія того самого результату.

Очікування, що детермінований прохід дорівнює ансамблю. Не дорівнює, щойно між двома шарами з дропаутом є щось нелінійне, — вище розбіжність становить 20.7 стандартної похибки. Наближення добре, і все ж це лише наближення.

Ще не прочитаноДочитайте сторінку до кінця — і вона вважатиметься прочитаною.

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

Відкрити доступ

Перевірте себе

3 запитання

Кожну відповідь пояснено: який розділ вона перевіряє і з якого джерела.

Джерела

  1. Zhang, Lipton, Li, Smola. Dive into Deep Learning — Dropoutbook · звірено 2026-09-21https://d2l.ai/chapter_multilayer-perceptrons/dropout.html
  2. Goodfellow, Bengio, Courville. Deep Learning — Regularization for Deep Learningbook · звірено 2026-09-21https://www.deeplearningbook.org/contents/regularization.html

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

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

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

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

Про що це?

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

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

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

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

support@artofds.com

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

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

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

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

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

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

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