Технический
Понимание и реализация Dropout в TensorFlow и Keras
Отсев - это распространенный метод регуляризации, который используется в современных решениях задач компьютерного зрения, таких как оценка позы, обнаружение объектов или семантическая сегментация.
Вступление
В этой статье рассматривается концепция метода отсева, метода, который используется в глубоких нейронных сетях, таких как рекуррентные нейронные сети и сверточные нейронные сети.
Техника выпадения предполагает пропуск нейронов, которые действуют как детекторы признаков нейронной сети на каждом этапе обучения. Исключение каждого нейрона определяется случайным образом.
Дж. Э. Хинтон предложил эту простую технику в 2012 году в опубликованной статье: « Улучшение нейронных сетей путем предотвращения совместной адаптации детекторов признаков ».
В этой статье мы подробно раскроем концепцию отсева и рассмотрим, как этот метод может быть реализован в нейронных сетях с использованием TensorFlow и Keras.
Понимание техники отсева
Нейронные сети имеют скрытые слои между их входным и выходным слоями, в эти скрытые слои встроены нейроны, и именно веса внутри нейронов вместе с взаимосвязью между нейронами - это то, что позволяет системе нейронной сети моделировать процесс, напоминающий обучение. .
Общая идея состоит в том, что чем больше нейронов и слоев в архитектуре нейронной сети, тем большую репрезентативную силу она имеет. Это увеличение репрезентативной мощности означает, что нейронная сеть может соответствовать более сложным функциям и хорошо обобщаться для обучающих данных.
Проще говоря, существует больше конфигураций для взаимосвязей между нейронами на уровнях нейронной сети.
Недостатком использования более глубоких нейронных сетей является то, что они очень склонны к переобучению.
Переоснащение - распространенная проблема, которая определяется как неспособность обученной модели машинного обучения хорошо обобщаться для невидимых данных, но та же модель хорошо работает с данными, на которых она была обучена.
Основная цель отсева - минимизировать эффект переобучения в обученной сети.
Техника выпадения работает путем случайного уменьшения количества взаимосвязанных нейронов в нейронной сети. На каждом этапе обучения каждый нейрон имеет шанс быть исключенным, или, скорее, выпадать из сопоставленного вклада связанных нейронов.
Этот метод сводит к минимуму переоснащение, потому что каждый нейрон становится независимым, в том смысле, что нейроны внутри слоев узнают значения веса, которые не основаны на взаимодействии соседних нейронов.
Следовательно, мы уменьшаем зависимость от большого количества взаимосвязанных нейронов, чтобы генерировать приличную репрезентативную мощность от обученной нейронной сети.
Предположительно, вы обучили 7000 различных архитектур нейронных сетей, чтобы выбрать лучшую из них, вы просто берете среднее значение для всех 7000 обученных нейронных сетей.
Что ж, техника отсева фактически имитирует этот сценарий.
Если вероятность выпадения нейрона на шаге обучения установлена равной 0,5; на самом деле мы обучаем множество различных сетей на каждом этапе обучения, поскольку крайне невозможно исключить одни и те же нейроны на любых двух этапах обучения. Следовательно, нейронная сеть, обученная с использованием техники отсева, представляет собой среднее значение всех различных комбинаций соединений нейронов, которые произошли на каждом этапе обучения.
Практические сценарии
В практических сценариях или при тестировании производительности обученной нейронной сети, которая использовала отсев на невидимых данных, учитываются определенные элементы.
Во-первых, метод отсева фактически не реализован на каждом слое нейронной сети; он обычно используется нейронами на последних нескольких уровнях сети.
В экспериментах, проведенных в опубликованной статье, сообщалось, что при тестировании на наборе данных CIFAR-10 была ошибка 15,6%, когда выпадение использовалось в последнем скрытом слое. Это было улучшением по сравнению с частотой ошибок в 16,6%, о которой сообщалось, когда тот же набор данных был протестирован на той же сверточной нейронной сети, но без техники отсева, включенной ни в один из слоев.
Второй момент заключается в том, что в практических сценариях отсев не используется при оценке обученной нейронной сети. В результате того, что отсев, не использованный на этапе оценки или тестирования, реализуется весь потенциал нейронной сети. Это означает, что все нейроны в сети активны, и каждый нейрон имеет больше входных соединений, чем он был обучен.
Поэтому ожидается, что веса нейронов разделятся на единицу минус значение гиперпараметра выпадения (процент отсева, который используется во время обучения). Таким образом, если во время обучения коэффициент отсева составлял 0,5, то во время тестирования результаты весов для каждого нейрона уменьшаются вдвое.
Применение техники отсева
Используя TensorFlow и Keras, мы вооружены инструментами для реализации нейронной сети, которая использует технику выпадения путем включения слоев выпадения в архитектуру нейронной сети.
Нам нужно только добавить одну строку, чтобы включить слой исключения в более обширную архитектуру нейронной сети. Класс Dropout принимает несколько аргументов, но пока нас интересует только аргумент «скорость». Коэффициент отсева - это гиперпараметр, который представляет вероятность того, что активация нейрона была установлена на ноль во время шага обучения. Аргумент скорости может принимать значения от 0 до 1.
keras.layers.Dropout(rate=0.2)
С этого момента мы рассмотрим небольшие шаги, предпринятые для реализации, обучения и оценки нейронной сети.
- Загрузите используемые инструменты и библиотеки, Keras и TensorFlow.
import tensorflow as tf from tensorflow import keras
2. Загрузите набор данных FashionMNIST, нормализуйте изображения и разделите набор данных на тестовые, обучающие и проверочные данные.
(train_images, train_labels),(test_images, test_labels) = keras.datasets.fashion_mnist.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 validation_images = train_images[:5000] validation_labels = train_labels[:5000]
3. Создайте пользовательскую модель, которая включает в себя слой исключения, с помощью API класса модели Keras.
class CustomModel(keras.Model): def __init__(self, **kwargs): super().__init__(**kwargs) self.input_layer = keras.layers.Flatten(input_shape=(28,28)) self.hidden1 = keras.layers.Dense(200, activation='relu') self.hidden2 = keras.layers.Dense(100, activation='relu') self.hidden3 = keras.layers.Dense(60, activation='relu') self.output_layer = keras.layers.Dense(10, activation='softmax') self.dropout_layer = keras.layers.Dropout(rate=0.2) def call(self, input, training=None): input_layer = self.input_layer(input) input_layer = self.dropout_layer(input_layer) hidden1 = self.hidden1(input_layer) hidden1 = self.dropout_layer(hidden1, training=training) hidden2 = self.hidden2(hidden1) hidden2 = self.dropout_layer(hidden2, training=training) hidden3 = self.hidden3(hidden2) hidden3 = self.dropout_layer(hidden3, training=training) output_layer = self.output_layer(hidden3) return output_layer
4. Загрузите реализованную модель и инициализируйте оптимизаторы и гиперпараметры.
model = CustomModel() sgd = keras.optimizers.SGD(lr=0.01) model.compile(loss="sparse_categorical_crossentropy", optimizer=sgd, metrics=["accuracy"])
5. Обучите модель в общей сложности 60 эпох.
model.fit(train_images, train_labels, epochs=60, validation_data=(validation_images, validation_labels))
6. Оцените модель на тестовом наборе данных.
model.evaluate(test_images, test_labels)
Результат оценки будет похож на результат оценки примера ниже:
10000/10000 [==============================] - 0s 34us/sample - loss: 0.3230 - accuracy: 0.8812 [0.32301584649085996, 0.8812]
Точность, показанная в примере результата оценки, соответствует точности нашей модели 88%.
С некоторой тонкой настройкой и обучением с более значительными номерами эпох точность может быть увеличена на несколько процентов.
Вот репозиторий GitHub для кода, представленного в этой статье.
Отсев - это распространенный метод регуляризации, который используется в современных решениях задач компьютерного зрения, таких как оценка позы, обнаружение объектов или семантическая сегментация. Концепция проста для понимания и ее легче реализовать благодаря ее включению во многие стандартные библиотеки машинного / глубокого обучения, такие как PyTorch, TensorFlow и Keras.
Если вас интересуют другие методы регуляризации и способы их реализации, ознакомьтесь со статьями ниже.
Спасибо за прочтение.