Условие
Что такое dropout? Как он работает на train и inference? Почему помогает против переобучения?
Решение
Подход
Идея. На каждом шаге обучения случайно «выключаем» долю p нейронов (зануляем их выходы) в слое. Сеть учится не полагаться на конкретные нейроны и в каждом мини-батче имеет другую субмодель.
Train. Для каждого нейрона с вероятностью p выход обнуляется, оставшиеся выходы делятся на (1-p) — это inverted dropout, который держит ожидаемое значение активаций тем же.
Inference. Dropout выключается, активации идут «как есть». В классической формулировке требовалось домножать на (1-p) на inference; в inverted dropout это сделано на train, и inference остаётся чистым.
Почему работает (несколько интерпретаций).
- Ансамбль. На каждом батче — другая «тонкая» сеть; финальная модель эффективно усредняет 2^n субсетей.
- Регуляризация. Аналогична добавлению шума, эквивалентна L2-штрафу при некоторых упрощениях.
- Co-adaptation. Нейроны не могут «уговориться» компенсировать друг друга — каждый учится быть полезным сам по себе.
import torch.nn as nn
net = nn.Sequential(
nn.Linear(512, 256),
nn.ReLU(),
nn.Dropout(p=0.5), # 50% выключаем на train
nn.Linear(256, 10),
)
net.train() # dropout активен
# ...
net.eval() # dropout выключаетсяПодводные камни
- Забыть
model.eval()на inference — типичная ошибка студентов. Получите шумные предсказания и разные ответы на одинаковом входе. - Dropout перед BatchNorm конфликтует: BN считает статистики по батчу, dropout их искажает. Стандартное правило — Dropout после BN/ReLU.
- Слишком высокий p на маленьких сетях — недообучение. Обычно 0.2-0.5; на свёртках чаще 0.1-0.3.
- Transformer-блоки используют dropout в нескольких местах (attention, FFN, residual). Случайно отключить — модель переобучится; «удвоить» — недоучится.
- MC Dropout для uncertainty. Если оставить dropout включённым на inference и сделать N прогонов — получите оценку неопределённости (Monte Carlo Dropout).
Эталонный ответ
На train случайно зануляем долю p нейронов и делим оставшиеся на (1-p); на inference dropout выключается. Это форма стохастической регуляризации: эффективно обучаем ансамбль субсетей и мешаем нейронам co-adapt-иться. Обычные значения p — 0.2-0.5.