Переобучение — что это и как этого избежать, критерии останова обучения
Мы продолжаем знакомиться с теоретическими вопросами обучения НС, без которых невозможно их качественное построение. И это занятие начнем с очень важной темы – переобучения. Что это такое и чем это чревато? Давайте представим, что у нас есть два класса линейно-разделимых образов:
И из предыдущих занятий мы уже знаем, что для их различения достаточно одного нейрона. Но, что будет, если мы выберем сеть с большим числом нейронов, для решения этой же задачи?
В процессе обучения она способна формировать уже более сложную разделяющую линию, например, провести ее вот так:
Если мы продолжим увеличивать число нейронов скрытого слоя, то будем получать все более сложную закономерность разделения двух классов:
К чему это в итоге приведет? Да, на обучающем множестве все будет отлично, но в процессе эксплуатации такой сети будем получать массу ошибок:
Этот эффект и называется переобучением, когда разделяющая плоскость слишком точно описывает классы из обучающей выборки, и в результате теряется обобщающая способность НС.
Это можно сравнить с ленивым, но способным студентом (с прекрасной памятью), сдающим экзамен, допустим, по вышке, где предполагается решение экзаменационных задач. Ему проще выучить ход их решения не особо погружаясь в детали. Тогда, выбрав одну из них, он сможет быстренько вспомнить решение и записать его. А другой, не обладая хорошей памятью, но достаточно усидчивый, чтобы понять ход решения и запомнить их принцип, будет способен решать не только экзаменационные задачи, но и любые другие, сходные с ними. То есть, у него будет лучшая обобщающая способность.
Такой вывод может показаться несколько неожиданным. Казалось бы, чем больше нейронов в НС, тем качественнее она должна работать. Но на практике имеем обратный эффект: избыток нейронов ухудшает обобщающие способности. В идеале, число нейронов должно быть ровно столько, сколько необходимо для решения поставленной задачи. Но как определить, сколько их нужно? Здесь, опять же, нет универсального алгоритма. Это определяется опытным путем, подбирая минимальное число нейронов, при котором получается приемлемое качество решения задачи.
Рекомендация обучения №6:
Использовать минимальное необходимое число нейронов в нейронной сети.
Однако, мы все же можем контролировать этот эффект в процессе обучения. Для этого обучающая выборка разбивается на два множества: обучающее и валидации (проверочное):
На вход НС подаются наблюдения из обучающей выборки по схеме, которую мы рассматривали на предыдущем занятии. А, затем, после каждой эпохи, вычисляется критерий качества работы сети для обоих множеств: обучающего и проверочного. Получаем два графика:
Если с какой-то итерации графики начинают расходиться, то делается вывод, что НС переобучается и процесс обучения следует прервать. В этом случае, лучшие весовые коэффициенты соответствуют границе переобучения.
Здесь у вас может возникнуть вопрос: зачем мы разбиваем обучающую выборку, а не используем в качестве проверочного множества тестовое? Тестовое – это то, на котором как раз и проверяется качество работы сети:
Дело в том, что как только какая-либо выборка прямо или косвенно участвует в обучении, то она влияет на состояние весов НС. В результате выборка валидации тоже, отчасти, становится обучающей и нейросеть подстраивается и под нее. Поэтому для объективной проверки качества необходима третья выборка – тестовая. Отсюда получаем:
Рекомендация обучения №7:
Разбивать все множество наблюдений на три выборки: обучающую, валидации и тестовую.
Вот такие основные подходы существуют для предотвращения переобучения НС.
Критерии останова процесса обучения
В заключение этого занятия рассмотрим критерии останова процесса обучения. Один из них мы с вами только что определили:
- Расхождение показателя качества для обучающей выборки и валидации.
Но это лишь один из критериев остановки. Кроме него часто пользуются еще несколькими показателями:
От итерации к итерации (по всей эпохе) показатель качества Q практически не меняется:
Часто, этот тренд довольно долго продолжается, поэтому процесс лучше прервать и либо переопределить параметры градиентного алгоритма, либо начать заново с другими начальными весами НС.
Конечно, критерии останова могут быть и другими. Я здесь привел лишь распространенные варианты, которые чаще всего используются на практике. Но, в каждой конкретной ситуации могут быть сформулированы свои критерии останова обучения сети.
Видео по теме
Нейронные сети: краткая история триумфа
Структура и принцип работы полносвязных нейронных сетей | #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 и других приемов можно сказать, что сегодня с проблемой переобучения научились справляться.
Источник