Регуляризация в CNN: Dropout, BatchNorm

Сверточные нейронные сети (CNN) обладают высокой выразительной способностью, что делает их уязвимыми к переобучению, особенно при ограниченном объёме данных. Регуляризация — ключевой инструмент для повышения обобщающей способности моделей. Наиболее распространёнными методами являются Dropout и Batch Normalization (BatchNorm).


Dropout

Dropout — техника, заключающаяся во временном “выключении” случайного подмножества нейронов во время обучения. Это предотвращает сильную зависимость нейронов друг от друга (co-adaptation), что способствует лучшему обобщению.

Основные моменты:

  • На каждом шаге обучения с вероятностью p нейроны сети исключаются из расчёта активаций и градиентов.
  • На этапе инференса (прогнозирования) все нейроны активны, а их выходы масштабируются на коэффициент 1 - p, чтобы компенсировать отсутствие Dropout во время обучения.
  • Dropout применяется как к полносвязным слоям, так и к сверточным, однако для сверточных слоев обычно используют меньшие значения p (например, 0.1–0.3), так как сверточные фильтры обладают меньшей склонностью к переобучению.

Применение в TensorFlow.js:

import * as tf from '@tensorflow/tfjs';

const model = tf.sequential();

model.add(tf.layers.conv2d({
  inputShape: [28, 28, 1],
  filters: 32,
  kernelSize: 3,
  activation: 'relu'
}));

model.add(tf.layers.maxPooling2d({poolSize: [2, 2]}));

model.add(tf.layers.flatten());

model.add(tf.layers.dense({units: 128, activation: 'relu'}));

// Dropout с вероятностью 0.5
model.add(tf.layers.dropout({rate: 0.5}));

model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
  • rate — вероятность исключения нейронов.
  • Dropout уменьшает переобучение за счёт случайного “шумного” обучения сети, заставляя модель искать более устойчивые представления данных.

Batch Normalization

Batch Normalization (BatchNorm) нормализует входные данные каждого слоя для каждой мини-партии (batch), приводя их к среднему 0 и дисперсии 1. Это ускоряет обучение, стабилизирует градиенты и оказывает регуляризующее влияние.

Ключевые особенности:

  • Преобразует вход слоя x следующим образом:

[ = ]

где ({}) и ({}^2) — среднее и дисперсия по мини-партии, () — малое число для численной стабильности.

  • После нормализации вводятся параметры масштаба gamma и смещения beta, которые позволяют слою адаптироваться к любой нужной распределённости данных.
  • BatchNorm снижает необходимость использования высоких коэффициентов регуляризации, таких как Dropout, и помогает работать с более высокими скоростями обучения.

Использование в TensorFlow.js:

import * as tf from '@tensorflow/tfjs';

const model = tf.sequential();

model.add(tf.layers.conv2d({
  inputShape: [32, 32, 3],
  filters: 64,
  kernelSize: 3,
  activation: 'relu'
}));

// Batch Normalization после свёртки и перед активацией
model.add(tf.layers.batchNormalization());

model.add(tf.layers.maxPooling2d({poolSize: [2, 2]}));

model.add(tf.layers.flatten());

model.add(tf.layers.dense({units: 256, activation: 'relu'}));

model.add(tf.layers.batchNormalization());

model.add(tf.layers.dropout({rate: 0.4}));

model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
  • BatchNorm обычно ставится после свёртки или dense-слоя, но перед функцией активации, хотя допустимы вариации.
  • Сочетание BatchNorm с Dropout требует аккуратной настройки: BatchNorm стабилизирует активации, а Dropout добавляет шум. Оптимальное размещение и параметры зависят от задачи.

Сравнение и сочетание Dropout и BatchNorm

Характеристика Dropout BatchNorm
Цель Регуляризация, предотвращение переобучения Стабилизация обучения, ускорение сходимости, частичная регуляризация
Механизм Исключение случайных нейронов Нормализация по мини-партии и масштабирование
Использование Особенно в полносвязных слоях В свёрточных и dense-слоях
Влияние на обучение Увеличивает шум, может замедлять сходимость Позволяет использовать более высокий learning rate

Сочетание методов позволяет комбинировать преимущества: BatchNorm стабилизирует обучение и уменьшает эффект внутреннего ковариационного сдвига, а Dropout дополнительно препятствует переобучению.


Практические рекомендации

  1. Для небольших сетей и ограниченного объёма данных Dropout может быть основным средством регуляризации.
  2. В глубоких сверточных сетях BatchNorm помогает стабилизировать градиенты и ускоряет сходимость, часто снижая необходимость агрессивного Dropout.
  3. При использовании Dropout после BatchNorm следует учитывать, что BatchNorm адаптирует масштабы и смещения нейронов, а Dropout добавляет шум, поэтому rate выбирается умеренным (0.2–0.5 для dense-слоев).
  4. Для CNN в TensorFlow.js комбинация Conv2D → BatchNorm → ReLU → MaxPooling → Dropout является стандартной практикой.

Эффективная регуляризация CNN в TensorFlow.js строится на понимании взаимодействия Dropout и BatchNorm и правильной настройке их параметров под конкретную архитектуру и данные.