Собесов

khangich: что такое dropout и зачем

ML / Data ScienceНейросетиСредняяMiddle

Условие

Что такое dropout? Как он работает на train и inference? Почему помогает против переобучения?

Решение

Подход

Идея. На каждом шаге обучения случайно «выключаем» долю p нейронов (зануляем их выходы) в слое. Сеть учится не полагаться на конкретные нейроны и в каждом мини-батче имеет другую субмодель.

Train. Для каждого нейрона с вероятностью p выход обнуляется, оставшиеся выходы делятся на (1-p) — это inverted dropout, который держит ожидаемое значение активаций тем же.

Inference. Dropout выключается, активации идут «как есть». В классической формулировке требовалось домножать на (1-p) на inference; в inverted dropout это сделано на train, и inference остаётся чистым.

Почему работает (несколько интерпретаций).

  1. Ансамбль. На каждом батче — другая «тонкая» сеть; финальная модель эффективно усредняет 2^n субсетей.
  2. Регуляризация. Аналогична добавлению шума, эквивалентна L2-штрафу при некоторых упрощениях.
  3. 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 выключается

Подводные камни

  1. Забыть model.eval() на inference — типичная ошибка студентов. Получите шумные предсказания и разные ответы на одинаковом входе.
  2. Dropout перед BatchNorm конфликтует: BN считает статистики по батчу, dropout их искажает. Стандартное правило — Dropout после BN/ReLU.
  3. Слишком высокий p на маленьких сетях — недообучение. Обычно 0.2-0.5; на свёртках чаще 0.1-0.3.
  4. Transformer-блоки используют dropout в нескольких местах (attention, FFN, residual). Случайно отключить — модель переобучится; «удвоить» — недоучится.
  5. MC Dropout для uncertainty. Если оставить dropout включённым на inference и сделать N прогонов — получите оценку неопределённости (Monte Carlo Dropout).

Эталонный ответ

На train случайно зануляем долю p нейронов и делим оставшиеся на (1-p); на inference dropout выключается. Это форма стохастической регуляризации: эффективно обучаем ансамбль субсетей и мешаем нейронам co-adapt-иться. Обычные значения p — 0.2-0.5.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти