Способы борьбы с переобучением или

Переобучение — что это и как этого избежать, критерии останова обучения

Мы продолжаем знакомиться с теоретическими вопросами обучения НС, без которых невозможно их качественное построение. И это занятие начнем с очень важной темы – переобучения. Что это такое и чем это чревато? Давайте представим, что у нас есть два класса линейно-разделимых образов:

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

В процессе обучения она способна формировать уже более сложную разделяющую линию, например, провести ее вот так:

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

К чему это в итоге приведет? Да, на обучающем множестве все будет отлично, но в процессе эксплуатации такой сети будем получать массу ошибок:

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

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

Такой вывод может показаться несколько неожиданным. Казалось бы, чем больше нейронов в НС, тем качественнее она должна работать. Но на практике имеем обратный эффект: избыток нейронов ухудшает обобщающие способности. В идеале, число нейронов должно быть ровно столько, сколько необходимо для решения поставленной задачи. Но как определить, сколько их нужно? Здесь, опять же, нет универсального алгоритма. Это определяется опытным путем, подбирая минимальное число нейронов, при котором получается приемлемое качество решения задачи.

Рекомендация обучения №6:

Использовать минимальное необходимое число нейронов в нейронной сети.

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

На вход НС подаются наблюдения из обучающей выборки по схеме, которую мы рассматривали на предыдущем занятии. А, затем, после каждой эпохи, вычисляется критерий качества работы сети для обоих множеств: обучающего и проверочного. Получаем два графика:

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

Здесь у вас может возникнуть вопрос: зачем мы разбиваем обучающую выборку, а не используем в качестве проверочного множества тестовое? Тестовое – это то, на котором как раз и проверяется качество работы сети:

Дело в том, что как только какая-либо выборка прямо или косвенно участвует в обучении, то она влияет на состояние весов НС. В результате выборка валидации тоже, отчасти, становится обучающей и нейросеть подстраивается и под нее. Поэтому для объективной проверки качества необходима третья выборка – тестовая. Отсюда получаем:

Рекомендация обучения №7:

Разбивать все множество наблюдений на три выборки: обучающую, валидации и тестовую.

Вот такие основные подходы существуют для предотвращения переобучения НС.

Критерии останова процесса обучения

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

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

Но это лишь один из критериев остановки. Кроме него часто пользуются еще несколькими показателями:
От итерации к итерации (по всей эпохе) показатель качества Q практически не меняется:

Часто, этот тренд довольно долго продолжается, поэтому процесс лучше прервать и либо переопределить параметры градиентного алгоритма, либо начать заново с другими начальными весами НС.

  • Происходит малое изменение весовых коэффициентов. Это может означать, что мы достигли некоторого локального минимума, либо находимся в области малых градиентов и процесс обучения из-за этого может затянуться. Если этот тренд не прекращается, то лучше прервать обучение и начать заново с другими весами.
  • Достигли максимального числа итераций. Это очевидное условие, в частности, мы им пользовались, когда рассматривали работу алгоритма back propagation.
  • Конечно, критерии останова могут быть и другими. Я здесь привел лишь распространенные варианты, которые чаще всего используются на практике. Но, в каждой конкретной ситуации могут быть сформулированы свои критерии останова обучения сети.

    Видео по теме

    Нейронные сети: краткая история триумфа

    Структура и принцип работы полносвязных нейронных сетей | #1 нейросети на Python

    Персептрон — возможности классификации образов, задача XOR | #2 нейросети на Python

    Back propagation — алгоритм обучения по методу обратного распространения | #3 нейросети на Python

    Ускорение обучения, начальные веса, стандартизация, подготовка выборки | #4 нейросети на Python

    Переобучение — что это и как этого избежать, критерии останова обучения | #5 нейросети на Python

    Функции активации, критерии качества работы НС | #6 нейросети на Python

    Keras — установка и первое знакомство | #7 нейросети на Python

    Keras — обучение сети распознаванию рукописных цифр | #8 нейросети на Python

    Как нейронная сеть распознает цифры | #9 нейросети на Python

    Оптимизаторы в Keras, формирование выборки валидации | #10 нейросети на Python

    Dropout — метод борьбы с переобучением нейронной сети | #11 нейросети на Python

    Batch Normalization (батч-нормализация) что это такое? | #12 нейросети на Python

    Как работают сверточные нейронные сети | #13 нейросети на Python

    Делаем сверточную нейронную сеть в Keras | #14 нейросети на Python

    Примеры архитектур сверточных сетей VGG-16 и VGG-19 | #15 нейросети на Python

    Теория стилизации изображений (Neural Style Transfer) | #16 нейросети на Python

    Делаем перенос стилей изображений с помощью Keras и Tensorflow | #17 нейросети на Python

    Как нейронная сеть раскрашивает изображения | #18 нейросети на Python

    Введение в рекуррентные нейронные сети | #19 нейросети на Python

    Как рекуррентная нейронная сеть прогнозирует символы | #20 нейросети на Python

    Делаем прогноз слов рекуррентной сетью Embedding слой | #21 нейросети на Python

    Как работают RNN. Глубокие рекуррентные нейросети | #22 нейросети на Python

    LSTM — долгая краткосрочная память | #23 нейросети на Python

    Как делать сентимент-анализ рекуррентной LSTM сетью | #24 нейросети на Python

    Рекуррентные блоки GRU. Пример их реализации в задаче сентимент-анализа | #25 нейросети на Python

    Двунаправленные (bidirectional) рекуррентные нейронные сети | #26 нейросети на Python

    Автоэнкодеры. Что это и как работают | #27 нейросети на Python

    Вариационные автоэнкодеры (VAE). Что это такое? | #28 нейросети на Python

    Делаем вариационный автоэнкодер (VAE) в Keras | #29 нейросети на Python

    Расширенный вариационный автоэнкодер (CVAE) | #30 нейросети на Python

    Что такое генеративно-состязательные сети (GAN) | #31 нейросети на Python

    Делаем генеративно-состязательную сеть в Keras и Tensorflow | #32 нейросети на Python

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

    Источник

    Недообучение и переобучение в машинном интеллекте

    В машинном обучении существуют две важные проблемы: недообучение и переобучение. Алгоритмы машинного интеллекта обучаются по прецедентам, когда есть некая модель — параметрическое семейство функций. Предполагается, что в семействе функций есть одна или несколько функций, которые описывают зависимость, наблюдаемую в данных. Роль данных или обучающей выборки здесь играют точки. Точки — пары X и Y, где X — объект, Y — ответ. Следовательно, ответ — показатель, который соответствует данному объекту. Изначально нужно научиться предсказывать эти ответы на объектах. Для этого ученые занимаются моделированием и выбирают из параметрического семейства функций модель, которая лучше описывает данные.

    Читайте также:  Способы координации деятельности предприятия

    Недообучение

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

    Переобучение

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

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

    Как решить проблему переобучения

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

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

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

    Еще один вариант решения проблемы переобучения — регуляризация. Если спросить специалистов по анализу данных (data scientists) о том, какие методы регуляризации им известны, то они сходу скажут: L1-регуляризация и L2-регуляризация. Все data scientists хорошо понимают и знают эти методы. Такие методы регуляризации используют на линейных моделях регрессии и классификации. В теории часто пишут, что при создании линейной модели всегда надо приближать вектор коэффициентов модели к нулевому вектору. Если этого не делать, то может возникнуть эффект переобучения, когда вы смотрите на модель и видите там большие значения коэффициентов, но одни отрицательные, а другие положительные. Кажется, что в сумме они компенсируют друг друга, на обучающей выборке это работает хорошо, а на тестовых данных работает отвратительно. Для устранения этого эффекта вектор коэффициентов приближают к нулю, и делает это регуляризация.

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

    Читайте также:  Способ умножения чтобы легче запомнить

    Бустинг

    В середине 1990-х годов произошел прорыв в борьбе с переобучением. До этого времени считалось, что природа переобучения связана с большой размерностью пространства параметров моделей. У моделей слишком много степеней свободы, и им не хватает обучающей выборки, чтобы всех определить, поэтому они настраиваются на шум в данных. В 1995 году появилась первая публикация о бустинге — алгоритм AdaBoost, изобретенный американскими учеными Фройндом и Шапире. Этот способ построения композиции алгоритмов, основанный на идее: если один отдельный алгоритм работает не очень хорошо, то можно взять много результатов разных алгоритмов и усреднить. Фройнд и Шапире придумали строить каждый следующий алгоритм так, чтобы он компенсировал ошибки предыдущих.

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

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

    Эти объяснения дали свободу экспериментировать с очень сложными моделями, в которых огромное количество параметров, потому что появилась уверенность, что мы можем аккуратно настраивать это множество параметров и не переобучаться.

    Еще одно объяснение простоты бустинга дает комбинаторная теория переобучения. Существует два свойства моделей, которые мы используем: расслоение и сходство. Есть модели, которые близко соответствуют сути задачи, но в параметрическом семействе их относительно немного. Мы никогда не пользуемся всем объемом того семейства функций, которое берем использовать для решения задачи. Работает только маленький кусочек всего объема, и в этом кусочке огромное количество функций, похожих друг на друга. Оказалось, что если в нашем огромном и многопараметрическом семействе есть удачные модели, они способны решить нашу задачу и среди них есть огромное количество похожих друг на друга, то эффект переобучения небольшой. Когда эффектов расслоения и сходства нет и мы пытаемся сделать выбор среди моделей, которые имеют одинаковый уровень ошибок, но при этом сильно отличаются друг от друга, то возникает ситуация переобучения экспериментатора.

    Переобучение нейронных сетей

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

    Другой метод, который изобрели для нейронной сети, — drop out. Когда мы обучаем модель на одном отдельном объекте обучающей выборки, мы случайным образом вырезаем часть параметров модели. Это означает, что каждый раз мы пытаемся сделать, чтобы модель надежно обучалась по обучающей выборке, поэтому постоянно меняем вырезаемую часть. Такая особенность связана с тем, что изначально есть установка, чтобы любая часть нейронной сети после вырезания некоторых параметров надежно решала нашу задачу. Это требование надежности и есть способ регуляризации, который заставляет не только всю сеть решать нашу задачу, но и отдельные кусочки этой сети должны быть способны решать ту же задачу. На примере регуляризации, скользящего контроля, drop out и других приемов можно сказать, что сегодня с проблемой переобучения научились справляться.

    Источник

    Оцените статью
    Разные способы