складність 2/5 Безкоштовно
Dropout
Під час навчання обнуляйте випадкову частку активацій, а решту діліть на частку тих, що вціліли. Модель, яку ви випускаєте, — дешевий замінник ансамблю, якого вона ніколи не будує.
Інтуїція
На нейрон, який можуть прибрати будь-якої миті, не можна покластися. Дропаут під час навчання випадково прибирає нейрони, тож жоден нейрон не може розраховувати, що якийсь конкретний інший буде на місці, і шар мусить розподіляти роботу, а не пускати її кількома незамінними шляхами.
Назва описує лише половину. Друга половина — поділити вцілілих на частку тих, що вціліли, — і робить прийом придатним до вжитку, і саме її пропускають у поясненнях.
Формальне визначення
«Метод називається дропаутом, бо під час навчання ми буквально викидаємо (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.Яка частка, і чи це важливо
Звичайна порада — це число. Вимірювання каже, що число важить набагато менше, ніж те, з чим його зазвичай порівнюють.
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 запитання
Кожну відповідь пояснено: який розділ вона перевіряє і з якого джерела.
Джерела
- Dive into Deep Learning — Dropoutbook · звірено 2026-09-21https://d2l.ai/chapter_multilayer-perceptrons/dropout.html
- Deep Learning — Regularization for Deep Learningbook · звірено 2026-09-21https://www.deeplearningbook.org/contents/regularization.html