Регуляризация — это любой метод, который мы вводим для уменьшения ошибки обобщения. Жизнь — это компромисс, как и модели, в которых компромисс заключается между предвзятостью и дисперсией. Регуляризация - это метод оценки, который компенсирует более высокое смещение для уменьшения дисперсии. Цель каждой модели - воспроизвести и аппроксимировать процесс генерации данных. В этой статье мы сосредоточимся в основном на Dropout.

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

Существует несколько методов регуляризации.

  1. L2 или хребет
  2. L1 или лассо
  3. Общий доступ к параметрам
  4. Ранняя остановка
  5. Упаковка
  6. Выпадение

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

Когда выбирать исключение?

  1. Количество обучающих данных меньше
  2. Веса нейронной сети выше, что означает переоснащение.
  3. Ошибка проверки не показывает снижение, в то время как ошибка обучения уменьшается
  4. В целом рекомендуется применять отсев

Что происходит в Dropout?

В Dropout большая нейронная сеть разбита на несколько подсетей. Подсети формируются путем удаления единиц из входных и скрытых слоев. Выходной слой остается нетронутым.

Обучается ансамбль, состоящий из всех подсетей. Dropout может быть реализован для каждого слоя в нейронной сети, за исключением выходного слоя. Вводится новый гиперпараметр, определяющий вероятность исключения выходных данных слоя или, наоборот, вероятность сохранения выходных данных слоя. Распространенным значением является вероятность 0,5 для сохранения выходных данных каждого узла в скрытом слое и значение, близкое к 1,0, например 0,8, для сохранения входных данных из видимого слоя.

В приведенном ниже коде представлены два слоя Dropouts со значениями 0,5.

model = keras.models.Sequential([
    keras.layers.Dense(16, activation=tf.nn.relu, input_shape=(NUM_WORDS,)),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(16, activation=tf.nn.relu),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(1, activation=tf.nn.sigmoid)
])