Dropout
Тема дорожной карты · Глубокое обучение
Дропаут — это техника регуляризации, которая позволяет избежать переобучения в глубоких нейронных сетях. Во время обучения случайное подмножество нейронов зануляется (с вероятностью p, обычно 0.1–0.5), а остальные нейроны масштабируются на 1/(1-p), что позволяет сети не опираться на конкретные нейроны. Эта техника является дешёвой и эффективной для регуляризации fully connected слоёв и блоков transformer; для сверточных слоев лучше использовать SpatialDropout / Dropout2d. Важно отметить, что дропаут автоматически выключается в режиме eval(), поэтому забытый вызов model.eval() на inference является классическим багом.
Как это работает
Дропаут применяется в полностью соединённых сетях (FFN, MLP), которые представляют собой простейшие глубокие сети. В этих сетях скрытые слои учатся промежуточным представлениям данных, а глубина и ширина сети являются гиперпараметрами. Для стабильности сети используются различные инструменты, такие как инициализация весов (He/Xavier), нормализация (BatchNorm/LayerNorm), дропаут и резидуальные соединения (введённые для CNN/Transformer, но применимые и здесь). Функциональные полносвязные сети (FFN) являются основным блоком внутри архитектур типа Transformer и CNN, где они используются для нелинейной трансформации данных.
Когда применять
Функциональные полносвязные сети (FFN) являются базовой архитектурой перед использованием более сложных моделей, таких как CNN, RNN и Transformer. Для работы с табличными данными MLP, подкреплённый хорошими признаками, часто показывает лучшую производительность по сравнению с более сложными архитектурами. Внутри больших сетей MLP-головы преобразуют промежуточные представления в выходные данные (для классификации или регрессии). При использовании MLP рекомендуется начинать с узкой архитектуры (2-3 скрытых слоя, 64-256 единиц) и постепенно масштабировать её по мере необходимости. При работе с маленькими пакетами данных важно учитывать, что BatchNorm может быть неэффективным, и в таких случаях лучше использовать LayerNorm или GroupNorm.
Типичные ошибки
Типичные ошибки при использовании дропаута включают использование глубокой и широкой MLP-архитектуры, когда достаточно двух слоёв (что может привести к переобучению и замедлению обучения); нулевая инициализация весов, что приводит к идентичным градиентам и препятствует обучению модели; отсутствие нормализации в глубоких стеках, что может привести к взрыву или исчезновению градиентов; использование дропаута на этапе inference, что является классическим багом (необходимо переключить model.eval() в PyTorch).