Отсева и правила

Глубокие нейронные сети (DNN) произвели революцию в области машинного обучения, позволив выполнять сложные задачи, такие как распознавание изображений, обработка естественного языка и распознавание речи. Однако DNN склонны к переобучению, что означает, что они могут хорошо работать с обучающими данными, но плохо с новыми, невидимыми данными. Для решения этой проблемы были введены методы регуляризации, такие как выпадающие слои.

Dropout — это метод, используемый для предотвращения переобучения в нейронных сетях. Он работает путем случайного выпадения (или «выключения») части нейронов в сети во время обучения. Это вынуждает оставшиеся нейроны брать на себя большую ответственность за выходные данные, делая их более надежными и с меньшей вероятностью переобучения.

Слой отсева обычно вставляется после каждого полносвязного слоя в сети. Во время обучения слой отсева случайным образом выбирает часть (например, 0,5) нейронов, которые нужно исключить. Каждый обучающий пример подвергается разным наборам нейронов, заставляя сеть изучать более надежные функции.

Было показано, что метод отсева эффективен для предотвращения переобучения и повышения эффективности обобщения нейронных сетей. Он широко используется во многих современных архитектурах, включая сверточные нейронные сети (CNN) и рекуррентные нейронные сети (RNN).

Помимо отсева, существуют и другие методы регуляризации, которые можно использовать для предотвращения переобучения в нейронных сетях. К ним относятся регуляризация L1 и L2, ранняя остановка и увеличение данных.

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

Пример кода:

Вот пример того, как использовать отсев в глубокой нейронной сети с использованием TensorFlow:

import tensorflow as tf

# Define the neural network architecture
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train the model
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

В этом примере мы определяем простую нейронную сеть с одним скрытым слоем и выпадающим слоем. Слой отсева выпадает 50% нейронов во время обучения. Мы также компилируем модель с оптимизатором Адама и разреженной категориальной функцией кросс-энтропийных потерь. Наконец, мы обучаем модель на наборе данных MNIST для 10 эпох.

Математика отсева:

Техника отсева основана на идее ансамблевого обучения. При ансамблевом обучении несколько моделей обучаются независимо, и их прогнозы объединяются для получения окончательного прогноза. Было показано, что этот метод эффективен для уменьшения переобучения и улучшения производительности обобщения.

В отсеве идея состоит в том, чтобы обучить несколько «утонченных» версий полной нейронной сети. Каждая утонченная версия создается путем случайного исключения (или «выключения») части нейронов в сети. Во время обучения для каждого обучающего примера используется другая утонченная версия. Это заставляет сеть изучать более надежные функции, которые используются в нескольких утонченных версиях.

Слой отсева может быть математически представлен следующим образом:

mask = np.random.binomial(1, 1 - p, size=x.shape) / (1 - p)
out = x * mask