Dropout — метод решения проблемы переобучения в нейронных сетях |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2017-06-14 15:07 Переобучение (overfitting) — одна из проблем глубоких нейронных сетей (Deep Neural Networks, DNN), состоящая в следующем: модель хорошо объясняет только примеры из обучающей выборки, адаптируясь к обучающим примерам, вместо того чтобы учиться классифицировать примеры, не участвовавшие в обучении (теряя способность к обобщению). За последние годы было предложено множество решений проблемы переобучения, но одно из них превзошло все остальные, благодаря своей простоте и прекрасным практическим результатам; это решение — Dropout (в русскоязычных источниках — “метод прореживания”, “метод исключения” или просто “дропаут”).
Dropout Графическое представление метода Dropout, взятое из статьи, в которой он впервые был представлен. Слева — нейронная сеть до того, как к ней применили Dropout, справа — та же сеть после Dropout. Сеть, изображенная слева, используется при тестировании, после обучения параметрам. Главная идея Dropout — вместо обучения одной DNN обучить ансамбль нескольких DNN, а затем усреднить полученные результаты. Сети для обучения получаются с помощью исключения из сети (dropping out) нейронов с вероятностью , таким образом, вероятность того, что нейрон останется в сети, составляет . “Исключение” нейрона означает, что при любых входных данных или параметрах он возвращает 0. Исключенные нейроны не вносят свой вклад в процесс обучения ни на одном из этапов алгоритма обратного распространения ошибки (backpropagation); поэтому исключение хотя бы одного из нейронов равносильно обучению новой нейронной сети. Цитируя авторов, В стандартной нейронной сети производная, полученная каждым параметром, сообщает ему, как он должен измениться, чтобы, учитывая деятельность остальных блоков, минимизировать функцию конечных потерь. Поэтому блоки могут меняться, исправляя при этом ошибки других блоков. Это может привести к чрезмерной совместной адаптации (co-adaptation), что, в свою очередь, приводит к переобучению, поскольку эти совместные адаптации невозможно обобщить на данные, не участвовавшие в обучении. Мы выдвигаем гипотезу, что Dropout предотвращает совместную адаптацию для каждого скрытого блока, делая присутствие других скрытых блоков ненадежным. Поэтому скрытый блок не может полагаться на другие блоки в исправлении собственных ошибок. В двух словах, Dropout хорошо работает на практике, потому что предотвращает взаимоадаптацию нейронов на этапе обучения. Получив приблизительное представление о методе Dropout, давайте рассмотрим его подробнее. Как работает Dropout Как уже говорилось, Dropout выключает нейроны с вероятностью и, как следствие, оставляет их включенными с вероятностью . Вероятность выключения каждого нейрона одинакова. Это означает следующее: При условии, что
применение Dropout к данной проекции на этапе обучения можно представить как измененную функцию активации: где – -мерный вектор случайных величин , распределенных по закону Бернулли. имеет следующее распределение вероятностей: где — все возможные выходные значения. Очевидно, что эта случайная величина идеально соответствует Dropout, примененному к одному нейрону. Действительно, нейрон выключают с вероятностью , в противном случае — оставляют включенным. Посмотрим на применение Dropout к i-му нейрону: где . Так как на этапе обучения нейрон остается в сети (не подвергается выключению) с вероятностью q, на этапе тестирования нам необходимо эмулировать поведение ансамбля нейронных сетей, использованного при обучении. Для этого авторы предлагают на этапе тестирования умножить функцию активации на коэффициент q. Таким образом, На этапе обучения:, На этапе тестирования: Обратный (Inverted) Dropout Возможно использовать немного другой подход — обратный Dropout. В данном случае мы умножаем функцию активации на коэффициент не во время тестового этапа, а во время обучения. Коэффициент равен обратной величине вероятности того, что нейрон останется в сети: , таким образом, На этапе обучения: , На этапе тестирования: Во многих фреймворках для глубокого обучения Dropout реализован как раз в этой модификации, так как при этом необходимо лишь однажды описать модель, а потом запускать обучение и тестирование на этой модели, меняя только параметр (коэффициент Dropout). В случае прямого Dropout мы вынуждены изменять нейронную сеть для проведения тестирования, так как без умножения на q нейрон будет возвращать значения выше, чем те, которые ожидают получить последующие нейроны; именно поэтому реализация обратного Dropout встречается чаще. Dropout множества нейронов Легко заметить, что слой из нейронов на отдельном шаге этапа обучения можно рассматривать как ансамбль из экспериментов Бернулли с вероятностью успеха . Таким образом, на выходе слоя мы получаем следующее количество исключенных нейронов: Так как каждый нейрон представлен в виде случайной величины, распределенной по закону Бернулли, и все эти величины независимы, общее число исключенных нейронов — также случайная величина, но имеющая биномиальное распределение: где вероятность успешных событий за попыток характеризуется следующей плотностью распределения: Эту формулу легко объяснить следующим образом:
Теперь мы можем использовать это распределение, чтобы рассчитать вероятность отключения определенного количества нейронов. Используя метод Dropout, мы фиксируем коэффициент Dropout для определенного слоя и ожидаем, что из этого слоя будет исключено пропорциональное количество нейронов. Например, если слой, к которому мы применили Dropout, состоит из нейронов, а , мы ожидаем, что 512 из них будет отключено. Давайте проверим это утверждение: Как видим, вероятность отключения ровно нейронов составляет всего 0.025! Следующий скрипт на Python 3 поможет представить, сколько нейронов будет выключено для разных значений и зафиксированного количества .
Биномиальное распределение достигает максимума в районе Как видим из изображения выше, для любого среднее количество выключенных нейронов пропорционально , то есть Более того, можно заметить, что распределение значений почти симметрично относительно и вероятность выключения нейронов возрастает по мере того, как увеличивается расстояние от . Коэффициент масштабирования введен авторами для компенсации значений активации, так как на этапе обучения используется лишь доля от нейронов, в то время как на этапе тестирования все 100% нейронов остаются включенными, и, следовательно, полученные значения необходимо уменьшить с помощью специального коэффициента. Dropout и другие регуляризаторы Dropout часто используется с L2-нормализацией и другими методами ограничения параметров (например, Max Norm). Методы нормализации помогают поддерживать невысокие значения параметров модели. Вкратце, L2-нормализация представляет собой дополнительный элемент функции потерь, где — гиперпараметр, называемый “сила регуляризации” (regularization strength), — модель, а — функция ошибки между реальным значением и предсказанным : Нетрудно понять, что этот дополнительный элемент сокращает величину, на которую изменяется параметр во время обратного распространения ошибки методом градиентного спуска. Если — коэффициент скорости обучения, то параметр обновляется на следующую величину: Dropout сам по себе не может предотвратить рост значений параметров на этапе обновления. Более того, обратный Dropout ведет к тому, чтобы шаги обновления стали даже больше, как показано ниже. Обратный Dropout и другие регуляризаторы Так как Dropout не предотвращает роста параметров и их переполнения, нам может помочь L2-регуляризация (или любой другой метод регуляризации, ограничивающий значения параметров). Если мы представим коэффициент Dropout в явном виде, уравнение выше превратится в следующее: Нетрудно заметить, что в случае обратного Dropout скорость обучения масштабируется с помощью коэффициента . Так как принадлежит интервалу , отношение между и может принимать значения из следующего интервала: Поэтому отныне мы будем называть ускоряющим множителем (boosting factor), так как он увеличивает скорость обучения. будем называть эффективной скоростью обучения (effective learning rate). Эффективная скорость обучения выше, чем скорость обучения, выбранная нами: таким образом метода нормализации, ограничивающие значения параметров, могут упростить процесс выбора скорости обучения. Итоги
Источник: habrahabr.ru Комментарии: |
|