Сверточные нейронные сети (CNN) обладают высокой выразительной способностью, что делает их уязвимыми к переобучению, особенно при ограниченном объёме данных. Регуляризация — ключевой инструмент для повышения обобщающей способности моделей. Наиболее распространёнными методами являются Dropout и Batch Normalization (BatchNorm).
Dropout — техника, заключающаяся во временном “выключении” случайного подмножества нейронов во время обучения. Это предотвращает сильную зависимость нейронов друг от друга (co-adaptation), что способствует лучшему обобщению.
Основные моменты:
p нейроны сети
исключаются из расчёта активаций и градиентов.1 - p, чтобы
компенсировать отсутствие 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 — вероятность исключения нейронов.Batch Normalization (BatchNorm) нормализует входные данные каждого слоя для каждой мини-партии (batch), приводя их к среднему 0 и дисперсии 1. Это ускоряет обучение, стабилизирует градиенты и оказывает регуляризующее влияние.
Ключевые особенности:
x следующим образом:[ = ]
где ({}) и ({}^2) — среднее и дисперсия по мини-партии, () — малое число для численной стабильности.
gamma и
смещения beta, которые позволяют слою адаптироваться к
любой нужной распределённости данных.Использование в 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'}));
| Характеристика | Dropout | BatchNorm |
|---|---|---|
| Цель | Регуляризация, предотвращение переобучения | Стабилизация обучения, ускорение сходимости, частичная регуляризация |
| Механизм | Исключение случайных нейронов | Нормализация по мини-партии и масштабирование |
| Использование | Особенно в полносвязных слоях | В свёрточных и dense-слоях |
| Влияние на обучение | Увеличивает шум, может замедлять сходимость | Позволяет использовать более высокий learning rate |
Сочетание методов позволяет комбинировать преимущества: BatchNorm стабилизирует обучение и уменьшает эффект внутреннего ковариационного сдвига, а Dropout дополнительно препятствует переобучению.
rate выбирается умеренным (0.2–0.5 для
dense-слоев).Эффективная регуляризация CNN в TensorFlow.js строится на понимании взаимодействия Dropout и BatchNorm и правильной настройке их параметров под конкретную архитектуру и данные.