» » Dropout — метод решения проблемы переобучения в нейронных сетях

 

Dropout — метод решения проблемы переобучения в нейронных сетях

Автор: admin от 14-06-2017, 15:00, посмотрело: 476

Dropout — метод решения проблемы переобучения в нейронных сетях

Переобучение (overfitting) — одна из проблем глубоких нейронных сетей (Deep Neural Networks, DNN), состоящая в следующем: модель хорошо объясняет только примеры из обучающей выборки, адаптируясь к обучающим примерам, вместо того чтобы учиться классифицировать примеры, не участвовавшие в обучении (теряя способность к обобщению). За последние годы было предложено множество решений проблемы переобучения, но одно из них превзошло все остальные, благодаря своей простоте и прекрасным практическим результатам; это решение — Dropout (в русскоязычных источниках — “метод прореживания”, “метод исключения” или просто “дропаут”).

Dropout



Dropout — метод решения проблемы переобучения в нейронных сетях
Графическое представление метода Dropout, взятое из статьи, в которой он впервые был представлен. Слева — нейронная сеть до того, как к ней применили Dropout, справа — та же сеть после Dropout.
Сеть, изображенная слева, используется при тестировании, после обучения параметрам.


Главная идея Dropout — вместо обучения одной DNN обучить ансамбль нескольких DNN, а затем усреднить полученные результаты.

Сети для обучения получаются с помощью исключения из сети (dropping out) нейронов с вероятностью Dropout — метод решения проблемы переобучения в нейронных сетях, таким образом, вероятность того, что нейрон останется в сети, составляет Dropout — метод решения проблемы переобучения в нейронных сетях. “Исключение” нейрона означает, что при любых входных данных или параметрах он возвращает 0.

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

Цитируя авторов,

В стандартной нейронной сети производная, полученная каждым параметром, сообщает ему, как он должен измениться, чтобы, учитывая деятельность остальных блоков, минимизировать функцию конечных потерь. Поэтому блоки могут меняться, исправляя при этом ошибки других блоков. Это может привести к чрезмерной совместной адаптации (co-adaptation), что, в свою очередь, приводит к переобучению, поскольку эти совместные адаптации невозможно обобщить на данные, не участвовавшие в обучении. Мы выдвигаем гипотезу, что Dropout предотвращает совместную адаптацию для каждого скрытого блока, делая присутствие других скрытых блоков ненадежным. Поэтому скрытый блок не может полагаться на другие блоки в исправлении собственных ошибок.

В двух словах, Dropout хорошо работает на практике, потому что предотвращает взаимоадаптацию нейронов на этапе обучения.

Получив приблизительное представление о методе Dropout, давайте рассмотрим его подробнее.

Как работает Dropout


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

Вероятность выключения каждого нейрона одинакова. Это означает следующее:

При условии, что


  • Dropout — метод решения проблемы переобучения в нейронных сетях — линейная проекция входного Dropout — метод решения проблемы переобучения в нейронных сетях-мерного вектора x на Dropout — метод решения проблемы переобучения в нейронных сетях-мерное пространство выходных значений;

  • Dropout — метод решения проблемы переобучения в нейронных сетях – функция активации,



применение Dropout к данной проекции на этапе обучения можно представить как измененную функцию активации:

Dropout — метод решения проблемы переобучения в нейронных сетях


где Dropout — метод решения проблемы переобучения в нейронных сетяхDropout — метод решения проблемы переобучения в нейронных сетях-мерный вектор случайных величин Dropout — метод решения проблемы переобучения в нейронных сетях, распределенных по закону Бернулли.

Dropout — метод решения проблемы переобучения в нейронных сетях имеет следующее распределение вероятностей:

$$display$$f(k;p)=begin{equation*}begin{cases}p, &mathrm{if}& k=11-p,&mathrm{if}& k=0end{cases}end{equation*},$$display$$

где Dropout — метод решения проблемы переобучения в нейронных сетях — все возможные выходные значения.

Очевидно, что эта случайная величина идеально соответствует Dropout, примененному к одному нейрону. Действительно, нейрон выключают с вероятностью Dropout — метод решения проблемы переобучения в нейронных сетях, в противном случае — оставляют включенным.

Посмотрим на применение Dropout к i-му нейрону:

$$display$$O_i=X_ia(sum_{k=1}^{d_i}{w_kx_k+b})=begin{equation*}begin{cases}a(sum_{k=1}^{d_i}{w_kx_k+b}), &mathrm{if}& X_i=1,&mathrm{if}& X_i=0end{cases}end{equation*},$$display$$


где Dropout — метод решения проблемы переобучения в нейронных сетях.

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

На этапе обучения:Dropout — метод решения проблемы переобучения в нейронных сетях,

На этапе тестирования:Dropout — метод решения проблемы переобучения в нейронных сетях

Обратный (Inverted) Dropout


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

Коэффициент равен обратной величине вероятности того, что нейрон останется в сети: Dropout — метод решения проблемы переобучения в нейронных сетях, таким образом,

На этапе обучения: Dropout — метод решения проблемы переобучения в нейронных сетях,
На этапе тестирования: Dropout — метод решения проблемы переобучения в нейронных сетях

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

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

Dropout множества нейронов


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

Таким образом, на выходе слоя Dropout — метод решения проблемы переобучения в нейронных сетях мы получаем следующее количество исключенных нейронов:

Dropout — метод решения проблемы переобучения в нейронных сетях


Так как каждый нейрон представлен в виде случайной величины, распределенной по закону Бернулли, и все эти величины независимы, общее число исключенных нейронов — также случайная величина, но имеющая биномиальное распределение:

Dropout — метод решения проблемы переобучения в нейронных сетях


где вероятность Dropout — метод решения проблемы переобучения в нейронных сетях успешных событий за Dropout — метод решения проблемы переобучения в нейронных сетях попыток характеризуется следующей плотностью распределения:

Dropout — метод решения проблемы переобучения в нейронных сетях


Эту формулу легко объяснить следующим образом:


  • Dropout — метод решения проблемы переобучения в нейронных сетях — вероятность получения последовательности Dropout — метод решения проблемы переобучения в нейронных сетях успешных событий за Dropout — метод решения проблемы переобучения в нейронных сетях попыток, и, следовательно, Dropout — метод решения проблемы переобучения в нейронных сетях неуспешных.

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


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

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

Например, если слой, к которому мы применили Dropout, состоит из Dropout — метод решения проблемы переобучения в нейронных сетях нейронов, а Dropout — метод решения проблемы переобучения в нейронных сетях, мы ожидаем, что 512 из них будет отключено. Давайте проверим это утверждение:

Dropout — метод решения проблемы переобучения в нейронных сетях

Dropout — метод решения проблемы переобучения в нейронных сетях


Как видим, вероятность отключения ровно Dropout — метод решения проблемы переобучения в нейронных сетях нейронов составляет всего 0.025!

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

import matplotlib.pyplot as plt
from scipy.stats import binom
import numpy as np

# number of neurons
n = 1024
# number of tests (input examples)
size = 500
# histogram bin width, for data visualization
binwidth = 5

for p in range(1, 10):
    # per layer probability
    prob = p / 10
    # generate size values from a bi(n, prob)
    rnd_values = binom.rvs(n, prob, size=size)
    # draw histogram of rnd values
    plt.hist(
        rnd_values,
        bins=[x for x in range(0, n, binwidth)],
        # normalize = extract the probabilities
        normed=1,
        # pick a random color
        color=np.random.rand(3, 1),
        # label the histogram with its probability
        label=str(prob))

plt.legend(loc='upper right')
plt.show()

Dropout — метод решения проблемы переобучения в нейронных сетях
Биномиальное распределение достигает максимума в районе Dropout — метод решения проблемы переобучения в нейронных сетях

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

Dropout — метод решения проблемы переобучения в нейронных сетях


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

Коэффициент масштабирования введен авторами для компенсации значений активации, так как на этапе обучения используется лишь доля от Dropout — метод решения проблемы переобучения в нейронных сетях нейронов, в то время как на этапе тестирования все 100% нейронов остаются включенными, и, следовательно, полученные значения необходимо уменьшить с помощью специального коэффициента.

Dropout и другие регуляризаторы


Dropout часто используется с L2-нормализацией и другими методами ограничения параметров (например, Max Norm). Методы нормализации помогают поддерживать невысокие значения параметров модели.

Вкратце, L2-нормализация представляет собой дополнительный элемент функции потерь, где Dropout — метод решения проблемы переобучения в нейронных сетях — гиперпараметр, называемый “сила регуляризации” (regularization strength), Dropout — метод решения проблемы переобучения в нейронных сетях — модель, а Dropout — метод решения проблемы переобучения в нейронных сетях — функция ошибки между реальным значением Dropout — метод решения проблемы переобучения в нейронных сетях и предсказанным Dropout — метод решения проблемы переобучения в нейронных сетях:

Dropout — метод решения проблемы переобучения в нейронных сетях


Нетрудно понять, что этот дополнительный элемент сокращает величину, на которую изменяется параметр во время обратного распространения ошибки методом градиентного спуска. Если Dropout — метод решения проблемы переобучения в нейронных сетях — коэффициент скорости обучения, то параметр Dropout — метод решения проблемы переобучения в нейронных сетях обновляется на следующую величину:

Dropout — метод решения проблемы переобучения в нейронных сетях


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

Обратный Dropout и другие регуляризаторы


Так как Dropout не предотвращает роста параметров и их переполнения, нам может помочь L2-регуляризация (или любой другой метод регуляризации, ограничивающий значения параметров).

Если мы представим коэффициент Dropout в явном виде, уравнение выше превратится в следующее:

Dropout — метод решения проблемы переобучения в нейронных сетях


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

Dropout — метод решения проблемы переобучения в нейронных сетях


Поэтому отныне мы будем называть Dropout — метод решения проблемы переобучения в нейронных сетях ускоряющим множителем (boosting factor), так как он увеличивает скорость обучения. Dropout — метод решения проблемы переобучения в нейронных сетях будем называть эффективной скоростью обучения (effective learning rate).

Эффективная скорость обучения выше, чем скорость обучения, выбранная нами: таким образом метода нормализации, ограничивающие значения параметров, могут упростить процесс выбора скорости обучения.

Итоги



  • Dropout существует в двух модификациях: прямой (используется нечасто) и обратный.

  • Dropout на отдельном нейроне может быть представлен как случайная величина с распределением Бернулли.

  • Dropout на множестве нейронов может быть представлен как случайная величина с биномиальным распределением.

  • Несмотря на то, что вероятность того, что из сети будет выключено ровно np нейронов, np — среднее количество нейронов, отключенных в слое из n нейронов.

  • Обратный Dropout увеличивает скорость обучения.

  • Обратный Dropout следует использовать совместно с другими методами нормализации, ограничивающими значения параметров, чтобы упростить процесс выбора скорости обучения.

  • Dropout помогает предотвратить проблему обучения в глубоких нейронных сетях.





  • Источник: Хабрахабр

    Категория: Программирование

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *