Dropout — это техника регуляризации нейронных сетей, предложенная Джеффри Хинтоном и его коллегами в 2012 году и подробно описанная в статье 2014 года. Суть метода: во время обучения каждый нейрон (или группа нейронов) с определённой вероятностью временно «выключается» — его выход обнуляется, а веса не обновляются на данном шаге. Это не даёт сети полагаться на отдельные нейроны и заставляет её учить более устойчивые, распределённые представления данных.
Как это работает
Во время прямого прохода для каждого нейрона генерируется случайная величина, распределённая по Бернулли: с вероятностью p нейрон остаётся активным, с вероятностью 1 − p — отключается. Для скрытых слоёв стандартное значение p = 0.5, для входного слоя — меньше (например, 0.2). Отключение нейрона означает, что все его входящие и исходящие связи не участвуют в вычислениях на этом шаге.
Так как отключение происходит случайно на каждой итерации, сеть фактически обучает огромное множество «подсетей», разделяющих общие веса. На этапе инференса (тестирования) dropout отключается: используются все нейроны, но их выходы масштабируются на коэффициент p (или веса умножаются на p при обучении — в зависимости от реализации), чтобы сохранить математическое ожидание активаций.
Зачем это нужно
Основная проблема глубоких нейронных сетей — переобучение: модель запоминает обучающие примеры, включая шум, и теряет способность обобщать на новых данных. Dropout борется с этим двумя способами. Во-первых, он предотвращает ко-адаптацию нейронов: сеть не может полагаться на то, что конкретный нейрон всегда исправит ошибку другого. Во-вторых, он действует как ансамбль: усреднение предсказаний множества подсетей даёт более стабильный и точный результат.
Метод особенно эффективен в полносвязных слоях больших сетей, но также применяется в свёрточных и рекуррентных архитектурах (в модифицированных формах, например Spatial Dropout или Variational Dropout).
Примеры
- Классификация изображений. В свёрточной сети для распознавания рукописных цифр (MNIST) после каждого полносвязного слоя добавляют Dropout с p = 0.5. Без dropout сеть может показать точность 99% на обучающей выборке и 97% на тестовой; с dropout разрыв сокращается до 0.5–1%.
- Обработка текста. В рекуррентных сетях для языкового моделирования (например, на Penn Treebank) Variational Dropout применяется к скрытому состоянию и эмбеддингам, что снижает perplexity на 5–10 пунктов.
- PyTorch.
nn.Dropout(p=0.3)в модели после активации ReLU перед следующим линейным слоем — стандартный приём при обучении на небольших датасетах. - TensorFlow/Keras.
layers.Dropout(0.2)после свёрточного слоя в сети классификации изображений цветов сокращает переобучение и повышает точность на валидации на 2–4%.
Формула или метрика
Вероятность сохранения нейрона q = 1 − p, где p — вероятность отключения. При инференсе выход масштабируется на q, чтобы ожидаемое значение активации оставалось неизменным. Для линейной регрессии с dropout показано, что регуляризационный член эквивалентен L2-штрафу с коэффициентом λ = p / (1 − p).
Типичные ошибки
- Слишком высокий p. При p > 0.7 сеть теряет слишком много информации и недообучается; при p < 0.1 эффект регуляризации почти не заметен.
- Применение dropout на этапе инференса. Забыли переключить модель в режим eval — предсказания становятся случайными и нестабильными.
- Dropout после активации вместо до неё. В некоторых архитектурах порядок «линейный слой → dropout → активация» даёт лучший результат, чем «линейный слой → активация → dropout».
- Использование dropout без нормализации. Без batch normalization или правильной инициализации dropout может замедлить сходимость.
Как улучшить
- Подбирайте p экспериментально: для скрытых слоёв начните с 0.2–0.5, для входного — 0.1–0.2.
- Комбинируйте dropout с L2-регуляризацией и ранней остановкой — эти методы дополняют друг друга.
- Используйте Spatial Dropout для свёрточных слоёв и Variational Dropout для рекуррентных — они учитывают структуру данных.
- Применяйте dropout только к слоям с большим числом параметров; в маленьких сетях он может навредить.
- Проверяйте влияние dropout на валидационной выборке: если разрыв между train и val не сокращается, возможно, проблема не в переобучении, а в недостатке данных или неверной архитектуре.