Dropout — это техника регуляризации нейронных сетей, направленная на предотвращение переобучения. Её ключевая идея заключается в случайном “отключении” части нейронов во время обучения, что заставляет сеть не полагаться на отдельные нейроны, а учиться более устойчивым и обобщённым признакам.
Во время каждой итерации обучения каждый нейрон скрытого слоя с вероятностью p отключается, то есть его выход считается равным нулю. Вероятность p называется rate и задаёт долю нейронов, которые будут “выключены”. Оставшиеся нейроны масштабируются таким образом, чтобы суммарная активация слоя оставалась на том же уровне, что и без Dropout.
Математически это выражается так: Если вектор активаций слоя обозначен h, а маска Dropout — m, где каждый элемент равен 0 с вероятностью p и 1 с вероятностью 1 − p, то новый вектор активаций h’ вычисляется как:
[ h’ = ]
где () — поэлементное умножение. Масштабирование на () необходимо для сохранения средней активации на уровне обучения.
TensorFlow.js предоставляет готовый слой
tf.layers.dropout, который легко интегрируется в модель.
Основные параметры:
Пример использования Dropout в слое нейронной сети:
const model = tf.sequential();
model.add(tf.layers.dense({
units: 128,
activation: 'relu',
inputShape: [784]
}));
model.add(tf.layers.dropout({
rate: 0.5
}));
model.add(tf.layers.dense({
units: 10,
activation: 'softmax'
}));
model.compile({
optimizer: 'adam',
loss: 'categoricalCrossentropy',
metrics: ['accuracy']
});
В этом примере 50% нейронов скрытого слоя будут случайно отключены на каждом шаге обучения, что предотвращает переобучение при работе с большими изображениями или векторовыми признаками.
model.predict().Для сверточных слоёв применяются вариации Dropout, такие как SpatialDropout2D, когда целые каналы свёртки отключаются одновременно. Это предотвращает избыточную корреляцию между соседними признаками на изображении.
model.add(tf.layers.conv2d({
filters: 32,
kernelSize: 3,
activation: 'relu',
inputShape: [28, 28, 1]
}));
model.add(tf.layers.spatialDropout2d({ rate: 0.25 }));
В этом примере 25% каналов свёртки будут отключены, что помогает улучшить обобщающую способность модели при классификации изображений.
Эффективность Dropout оценивается по разнице между обучением и валидацией:
Применение Dropout — это баланс между регуляризацией и сохранением информации. Правильная настройка помогает создавать устойчивые и производительные модели в TensorFlow.js.