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

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

Что такое Dropout в нейронных сетях?

Согласно Википедии -
Термин выпадение означает выпадение единиц (как скрытых, так и видимых) в нейронной сети.

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

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

Зачем нам нужен отсев?

Учитывая, что мы немного знаем об отсеве, возникает вопрос - зачем нам вообще отсев? Почему нам нужно буквально отключать части нейронных сетей?

Ответ на эти вопросы - «предотвратить чрезмерную подгонку».

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

Отказ от учебы - еще раз

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

В машинном обучении регуляризация - это способ предотвратить чрезмерную подгонку. Регуляризация снижает чрезмерную подгонку, добавляя штраф к функции потерь. При добавлении этого штрафа модель обучается таким образом, что она не изучает взаимозависимый набор весов функций. Те из вас, кто знаком с логистической регрессией, могут быть знакомы со штрафами L1 (лапласиана) и L2 (гаусса).

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

Фаза обучения:

Фаза обучения: для каждого скрытого слоя, для каждой обучающей выборки, для каждой итерации игнорировать (обнулять) случайную долю узлов p (и соответствующие активации).

Этап тестирования:

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

Некоторые наблюдения:

  1. Dropout заставляет нейронную сеть изучать более надежные функции, которые полезны в сочетании со многими различными случайными подмножествами других нейронов.
  2. Dropout примерно вдвое увеличивает количество итераций, необходимых для сходимости. Однако время обучения для каждой эпохи меньше.
  3. Имея H скрытых юнитов, каждый из которых можно сбросить, у нас есть
    2 ^ H возможных моделей. На этапе тестирования рассматривается вся сеть, и каждая активация сокращается в p раз.

Эксперимент в Керасе

Попробуем эту теорию на практике. Чтобы увидеть, как работает отсев, я построил глубокую сеть в Keras и попытался проверить ее на наборе данных CIFAR-10. Глубокая сеть построена из трех сверточных слоев размером 64, 128 и 256, за которыми следуют два плотно связанных слоя размером 512 и плотный слой выходного слоя размером 10 (количество классов в наборе данных CIFAR-10).

Я взял ReLU в качестве функции активации для скрытых слоев и сигмоида для выходного слоя (это стандарты, особо не экспериментировал с их изменением). Кроме того, я использовал стандартную категориальную кросс-энтропийную потерю.

Наконец, я использовал выпадение во всех слоях и увеличил долю выпадения с 0,0 (полное отсутствие выпадения) до 0,9 с размером шага 0,1 и прогнал каждый из них до 20 эпох. Результаты выглядят так:

Из приведенных выше графиков мы можем сделать вывод, что с увеличением отсева происходит некоторое повышение точности проверки и уменьшение потерь на начальном этапе до того, как тренд начнет снижаться.
Если доля выбывших составляет 0,2, может быть две причины снижения тенденции:

  1. 0,2 - фактический минимум для этого набора данных, сети и установленных параметров.
  2. Для обучения сетей нужно больше эпох.

Код эксперимента с Keras можно найти в записной книжке jupyter, размещенной на github.

Если вы хотите узнать обо мне больше, проверьте мой профиль в LinkedIn.

Эта история была опубликована в блоге Intel: https://www.crowdcast.io/e/intel_virtual_lab/register
и в Data Science US - https://www.datascience.us/neural-net- отсев-дилинг-переоснащение /