Dropout Д

Dropout - метод регуляризации нейронных сетей, при котором во время обучения случайно отключается часть нейронов, чтобы предотвратить переобучение и улучшить обобщающую способность модели.

English Dropout
Синонимы дропаут, метод прореживания, dropout-регуляризация, случайное отключение нейронов

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 не сокращается, возможно, проблема не в переобучении, а в недостатке данных или неверной архитектуре.

Источники

Srivastava N., Hinton G., Krizhevsky A., Sutskever I., Salakhutdinov R. Dropout: A Simple Way to Prevent Neural Networks from Overfitting // Journal of Machine Learning Research. — 2014. — Vol. 15. — P. 1929–1958. (https://jmlr.org/papers/v15/srivastava14a.html)

PyTorch Documentation — torch.nn.Dropout (https://docs.pytorch.org/docs/stable/generated/torch.nn.Dropout.html)

TensorFlow Core — Dropout layer (https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout)

Гудфеллоу Я., Бенджио И., Курвилль А. Глубокое обучение. — М.: ДМК Пресс, 2018. — ISBN 978-5-97060-554-7.