Как понять что модель переобучена
Переобучение (Overfitting)
Переобучение – это случай, когда значение Функции потери (Loss Function) действительно малó, но Модель (Model) Машинного обучения (ML) ненадежна. Это связано с тем, что модель «слишком много учится» на обучающем наборе данных.
Когда мы входим в сферу ML, появляются двусмысленные термины: Переобучение, Недообучение (Underfitting) и Дилемма смещения-дисперсии (Bias-Variance Trade-off). Эти концепции лежат в основе Машинного обучения в целом. Почему нам вообще должно быть до этого дело?
Возможно, модели машинного обучения преследуют одну единственную цель: хорошо обобщать.
Обобщение (генерализация) – это способность модели давать разумные предсказания на основе входных данных, которых она никогда раньше не видела.
Обычные программы не могут этого сделать, так как они могут выдавать выходные данные только алгоритмически, то есть на основании вручную определенных опций (например, если зарплата человека меньше определенного порога, банковский алгоритм не предлагает кредит в приложении). Производительность модели, а также ее полезность в целом во многом зависит от ее обобщающей способности. Если модель хорошо обобщает, она служит своей цели. Существует множество методов оценки такой производительности.
Основываясь на этой идее, пере- и недообучение относятся к недостаткам, от которых может пострадать предсказательная способность модели. «Насколько плохи» ее прогнозы – это степень близости ее к пере- или недообучению.
Модель, которая хорошо обобщает, не является ни переобученной, ни недообученной.
Возможно, это пока не имеет большого смысла, но мне нужно, чтобы Вы запомнили это предложение на протяжении всей статьи, так как это общая картина темы.
Пример
Допустим, мы пытаемся построить модель машинного обучения для следующего набора данных:
Ось X – это Предикторы (Predictor Variable) – например, площадь дома, а ось Y – Целевая переменная (Target Variable) – стоимость дома. Если у Вас есть опыт обучения модели, Вы, вероятно, знаете, что есть несколько Алгоритмов (Algorithm), однако для простоты в нашем примере выберем одномерную Линейную регрессию (Linear Regression).
Этап обучения
Обучение модели линейной регрессии в нашем примере сводится к минимизации общего расстояния (т.е. стоимости) между линией, которую мы пытаемся проложить, и фактическими точками Наблюдений (Observation). Проходит несколько итераций, пока мы не найдем оптимальную конфигурацию нашей линии. Это именно то место, где происходит пере- и недообучение. Мы хотим, чтобы наша модель следовала примерно такой линии:
Несмотря на то, что общие потери не являются минимальными (т.е. существует лучшая конфигурация, в которой линия может давать меньшее расстояние до точек данных), линия выше очень хорошо вписывается в тенденцию, что делает модель надежной. Допустим, мы хотим знать значение Y при неизвестном доселе модели значении X (т. е. обобщить). Линия, изображенная на графике выше, может дать очень точный прогноз для нового X, поскольку с точки зрения машинного обучения ожидается, что результаты будут следовать тенденции, наблюдаемой в обучающем наборе.
Переобучение
Когда мы запускаем обучение нашего алгоритма на Датасете (Dataset), мы стремимся уменьшить потери (т.е. расстояния от каждой точки до линии) с увеличением количества итераций. Длительное выполнение этого обучающего алгоритма приводит к минимальным общим затратам. Однако это означает, что линия будет вписываться во все точки, включая Шум (Noise), улавливая вторичные закономерности, которые не требуются модели.
Возвращаясь к нашему примеру, если мы оставим алгоритм обучения запущенным на долгое время, он, в конце концов, подгонит строку следующим образом:
Выглядит хорошо, правда? Да, но насколько это надежно? Не совсем.
Суть такого алгоритма, как линейная регрессия, состоит в том, чтобы захватить доминирующий тренд и подогнать нашу линию к нему. На рисунке выше алгоритм уловил все тенденции, но не доминирующую. Если мы хотим протестировать модель на входных данных, которые выходят за пределы имеющихся у нас строк (т.е. обобщить), как бы эта линия выглядела? На самом деле нет возможности сказать. Следовательно, результаты ненадежны. Если модель не улавливает доминирующую тенденцию, которую мы все видим (в нашем случае с положительным увеличением), она не может предсказать вероятный результат для входных данных, которых никогда раньше не видела, что противоречит цели машинного обучения с самого начала!
Переобучение – это случай, когда общие потери-затраты действительно невелики, но обобщение модели ненадежно. Это связано с тем, что модель «слишком много учится» на обучающем наборе. Это может показаться абсурдным, но переобучение, или высокая Дисперсия (Variance), приводит к бóльшему количеству плохих, чем хороших результатов. Какая польза от модели, которая очень хорошо усвоила данные обучения, но все еще не может делать надежные прогнозы для новых входных данных?
Недообучение
Мы хотим, чтобы модель совершенствовалась на обучающих данных, но не хотим, чтобы она училась слишком многому (то есть слишком много паттернов). Одним из решений может быть досрочное прекращение тренировки. Однако это может привести к тому, что модель не сможет найти достаточно шаблонов в обучающих данных и, возможно, даже не сможет уловить доминирующую тенденцию. Этот случай называется недообучением:
Это случай, когда модель «недостаточно усвоила» обучающие данные, что приводит к низкому уровню обобщения и ненадежным прогнозам.
Как вы, вероятно, и ожидали, такое большое Смещение (Bias) так же плохо для модели, как и переобучение. При большом смещении модель может не обладать достаточной гибкостью с точки зрения подгонки линии, что приводит к чрезмерной упрощенности.
Дилемма смещения-дисперсии
Итак, какова правильная мера? Этот компромисс является наиболее важным аспектом обучения модели машинного обучения. Как мы уже говорили, модели выполняют свою задачу, если хорошо обобщают, а это связано с двумя нежелательными исходами – большим смещением и высокой дисперсией. Это и есть Дилемма смещения-дисперсии. Ответственность за определение того, страдает ли модель от одного из них, полностью лежит на разработчике модели.
Переобучение графически
Давайте посмотрим, как выглядит переобучение в сравнении с остальными сценариями развития. Для начала импортируем необходимые библиотеки:
Сгенерируем датасет – набор точек, «укладывающихся» в параболу:
Добавим Выбросы (Outlier), чтобы сделать данные шумнее и реалистичнее, а демонстрацию концепции нагляднее:
Усложним алгоритму задачу еще и сгруппируем записи в две группы:
Теперь разница между сценариями наглядна:
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Жизненный цикл ML-модели
Всем привет! Меня зовут Максим, и в Ситимобил я занимаюсь машинным обучением. Сегодня я расскажу вам, как мы разрабатываем устойчивые ML-модели в суровых условиях изменчивого мира.
Зачем моделям нужен жизненный цикл
Будем называть ML-моделью объект, возвращающий прогноз для входящего набора признаков. Пусть для простоты это будет модель бинарной классификации.
Представим, что модель уже разработана, метрика на out of time выборке (отложенной во времени) нас устраивает, и мы выкатываем модель в production. Получаем положительный результат в первый месяц работы, но потом качество сильно падает. Сколько нужно ждать, прежде чем предпринимать какие-либо действия в отношении модели? Стоит ли сразу же пытаться актуализировать её или же подождать, так как через день-два метрики снова станут стабильными? В идеальном мире ответ должен быть до развёртывания в production. И жизненный цикл поможет нам ответить на этот и другие вопросы по работе модели.
Когда вы начнёте искать информацию по планированию жизненного цикла модели, в большинстве случаев найдёте статьи по поддержке существующего алгоритма переобучения средствами DevOps и MLOps. Но как сделать алгоритм, который нужно поддерживать, переобучать и валидировать?
Принципы разработки жизненного цикла модели
Чтобы модель стабильно работала в будущем, нужно на этапе разработки эмулировать её работу на достаточно большом наборе данных. На каждой итерации можно менять один или несколько параметров. Этот процесс напоминает классический подбор гиперпараметров, поэтому нам нужно точно оценивать результат каждой отдельной симуляции по целевой метрике. Только в нашем случае гиперпараметры не типизированы и мы сами решаем, что именно менять в каждой конфигурации.
Какие параметры нужно учитывать, чтобы оценить жизненный цикл:
периодичность переобучения модели;
необходимый объём обучающей выборки;
поведение целевой метрики во времени в стабильных и экстремальных условиях;
как учитывать различные смещения целевой переменной и модельных признаков;
прочие вопросы, характерные для отрасли применения модели.
Рассмотрим отдельно каждый из этих пунктов.
Периодичность переобучения модели
Так как мир не стоит на месте и всё постоянно меняется, модель может устаревать и терять качество (в единицах целевой метрики). Поэтому нужно проверить, через сколько часов, дней, месяцев качество начинает ухудшаться. Для этого мы проводим симуляцию, в которой движемся скользящим окном по всем доступным датам и оцениваем модель на несколько интервалов вперед.
Так мы сможем оценить потенциальное ухудшение качества модели во времени и принять решение о частоте её переобучения.
Оценка объема обучающей выборки
По аналогии с изменением объёма тестовых данных мы можем менять объём обучающей выборки. Мотивация может быть разная:
на небольшом промежутке времени на обучающей выборке модель может переобучиться;
в распределении целевой переменной есть сезонность;
модель вносит смещение в распределение целевой переменной;
объёма данных может быть недостаточно для выявления ключевых зависимостей.
Чтобы понять, сколько данных нам достаточно для стабильной работы модели, нужно также пройтись скользящим окном по доступным датам, но уже в обратную сторону, постепенно увеличивая обучающий набор данных.
Итогом этой симуляции будет n оценок модели на одном и том же наборе тестовых данных, что позволит точно понять, какая конфигурация оказалась лучшей.
Изменение распределения целевой переменной
Часто бывает так, что поведение целевой переменной нестабильно во времени. Ещё больше нестабильности вносит тот факт, что модель прямо влияет на её распределение (в нашем примере).
Здесь видно, как зона распределения условной целевой переменной постепенно увеличивается с течением времени. Это означает, что применение ML-модели в новой области, которой не было в обучающей выборке, может быть непредсказуемо.
Частично эту проблему должно решать правило частоты переобучения модели. Но ещё на этапе моделирования мы можем оценить влияние нестабильного поведения предсказываемой переменной на целевую метрику. Для этого нужно провести симуляцию, в которой мы искусственно будем уменьшать или увеличивать на n% баланс положительного класса. Таким образом мы сможем сделать выводы о стабильности нашего жизненного цикла при нетипичном изменении (таком, которого не было в обучающей выборке) целевой переменной.
Прочие отраслевые вопросы
Самый простой пример: а что будет, если бизнес нашей компании вырастет на 20 % за n дней? Останется ли наш алгоритм стабильным, если завтра все входные признаки для модели увеличатся или уменьшатся на 20 %?
Алгоритм проверки аналогичен тому, что описан выше. Проводим симуляцию и проверяем, как увеличение или уменьшение того или иного признака влияет на стабильность целевой метрики. Если она ухудшается, то, возможно, стоит ещё раз пересмотреть частоту переобучения модели.
Все названные параметры могут как зависеть друг о друга, так и быть независимыми. Поэтому следует учитывать это при симуляции жизненного цикла. Идеальным решением подбора конфигурации будет оптимизация всех параметров сразу по сетке (как это происходит при подборе классических гиперпараметров).
Мы разработали правила жизненного цикла, что дальше?
Вот мы и получили набор правил работы ML-модели. Половина дела сделана, осталось запустить жизненный цикл в production и мониторить его работу.
Поскольку ещё на этапе моделирования мы предусмотрели большинство но не все потенциальных проблем, то можно ожидать стабильной работы модели некоторе время без внешнего вмешательства.
Недообучение и переобучение в машинном интеллекте
Недообучение
Переобучение
Такие сети обучаются на больших данных, поэтому иногда объема данных может не хватить, чтобы одновременно хорошо настроить все параметры. В момент переобучения наблюдается ситуация, когда мы пытаемся определить оптимальные параметры модели, которые хорошо описывают наши данные, но потом на новых данных эта модель начинает часто ошибаться. Проблема переобучения часто встречается, и связана она с тем, что мы пытаемся сделать выбор по неполной информации. Наша выборка всегда не полностью описывает искомую зависимость, которую мы мечтаем построить, затем мы пытаемся зависимость по неполной информации, но это невозможно.
Как решить проблему переобучения
Распространить подход регуляризации с линейных моделей на общие классы моделей непросто, поэтому для этого используют байесовский подход, который связан с вводом априорного распределения вероятностей в пространстве параметров модели. Байесовский подход сложно воплотить, потому что априорное распределение надо откуда-то взять, а значит, необходимо примерно понимать тип зависимости, которую мы хотим восстановить.
Бустинг
Метод оказался настолько простым, что все ученые начали с ним экспериментировать и обнаружили, что в процессе строительства сотен и тысяч базовых алгоритмов качество решения задачи продолжает улучшаться не только на обучающей выборке, но и на тестовой. Это свойство шло вразрез с существовавшими на тот момент теориями, которые говорили, что сложные алгоритмические конструкции более склонны к переобучению, но с бустингом такого не происходило. Все начали искать объяснение этому свойству, и довольно быстро выяснилось, что когда мы не просто оптимизируем модель в пространстве параметров, а усредняем много моделей, то мы не переобучаемся, а только сглаживаем результат этих моделей.
Другое объяснение, которое удалось найти, утверждало, что каждую модель нужно рассматривать как новый признак. Когда мы строим базовые модели одну за другой, то мы конструируем новое признаковое пространство. Но в процессе обучения каждый из признаков становится полноценным алгоритмом, который пытается решать задачу. В итоге, строя новое пространство признаков, мы попадаем в такое пространство, где задача решается легко, и решается она линейным классификатором.
Эти объяснения дали свободу экспериментировать с очень сложными моделями, в которых огромное количество параметров, потому что появилась уверенность, что мы можем аккуратно настраивать это множество параметров и не переобучаться.
Еще одно объяснение простоты бустинга дает комбинаторная теория переобучения. Существует два свойства моделей, которые мы используем: расслоение и сходство. Есть модели, которые близко соответствуют сути задачи, но в параметрическом семействе их относительно немного. Мы никогда не пользуемся всем объемом того семейства функций, которое берем использовать для решения задачи. Работает только маленький кусочек всего объема, и в этом кусочке огромное количество функций, похожих друг на друга. Оказалось, что если в нашем огромном и многопараметрическом семействе есть удачные модели, они способны решить нашу задачу и среди них есть огромное количество похожих друг на друга, то эффект переобучения небольшой. Когда эффектов расслоения и сходства нет и мы пытаемся сделать выбор среди моделей, которые имеют одинаковый уровень ошибок, но при этом сильно отличаются друг от друга, то возникает ситуация переобучения экспериментатора.
Переобучение нейронных сетей
В конце важно сказать о переобучении нейронных сетей. Прежде всего, для этого процесса активно используют регуляризацию: из всего семейства моделей вычленяют маленький кусочек, который приспособлен для решения нашей задачи.
Многие современные методы регрессии и классификации способны описать очень сложные нелинейные связи между предикторами и переменной-откликом. Однако без должного контроля со стороны исследователя модели, хорошо описывающие обучающую выборку, рискуют исказить истинный характер моделируемой связи, что приведет к невозможности воспроизвести столь же точные предсказания на новых независимых данных. Эта проблема известна как «переобучение модели» (англ. «model overfitting«) и занимает одно из центральных мест в теории и практическом применении предсказательных моделей.
Используем рассмотренный ранее пример об электрическом сопротивлении мякоти плодов киви в зависимости от процентного содержания сока в них:
Казалось бы, лучше всего для описания экспериментальных данных подходит полиномом 20-й степени, т.к. эта модель наиболее полно отражает характер расположения точек. Это можно также увидеть, рассчитав для каждой модели квадратный корень из среднеквадратичной ошибки (RMSE):
Однако здесь следует вспомнить о том, что практически все методы регрессии и классификации в силу своего устройства пытаются найти такие модели, которые максимально хорошо описывают данные из обучающей выборки (англ. «train set«), т.е. минимизируют ошибку обучения («train error«). Более того, при усложнении модели, т.е. при добавлении в нее новых предикторов, всегда можно подобрать такую модель, которая будет идеально описывать обучающее множество (например, в нашем случае такой моделью была бы ломаная, последовательно соединяющая все точки). К сожалению, тот факт, что некоторая модель хорошо описывает обучающее множество, совершенно не гарантирует столь же высокой верности предсказаний на новом независимом наборе данных, которые не были использованы при подгонке модели («проверочная выборка«, «экзаменационная выборка«, «проверочная совокупность«, «проверочное множество«; англ. «test set» или «validation set«). В нашем примере часть исходных данных перед построением моделей была случайным образом удалена и сохранена в таблице testSet для последующего использования в качестве проверочного множества. Рассчитав ошибку RMSE для этого проверочного множества, получим:
Как видно из приведенных значений, по мере усложнения модели от линейной регрессии с одним предиктором до полинома 20-й степени ошибка предсказаний на проверочном множестве («test error«) сначала снижалась, а затем начала возрастать. На рисунке ниже значения RMSE для обучающих и проверочных данных показаны в зависимости от количества предикторов в модели.
Из приведенного уравнения следует, что для минимизации ожидаемой ошибки прогноза на проверочном множестве мы должны подобрать такой метод обучения модели, который одновременно достигает низкого смещения и низкой дисперсии. Обратите внимание, что дисперсия по определению является положительной величиной. Следовательно, ошибка на проверочном множестве никогда не может быть ниже некоторого уровня неустранимой ошибки \(Var(\epsilon)\) («irreducible error«; см. также эту статью).
Говоря о дисперсии статистической модели имеют в виду величину, на которую \(\hat
Переобучение
Материал из MachineLearning.
Содержание
Обобщающая способность (generalization ability, generalization performance). Говорят, что алгоритм обучения обладает способностью к обобщению, если вероятность ошибки на тестовой выборке достаточно мала или хотя бы предсказуема, то есть не сильно отличается от ошибки на обучающей выборке. Обобщающая способность тесно связана с понятиями переобучения и недообучения.
Переобучение, переподгонка (overtraining, overfitting) — нежелательное явление, возникающее при решении задач обучения по прецедентам, когда вероятность ошибки обученного алгоритма на объектах тестовой выборки оказывается существенно выше, чем средняя ошибка на обучающей выборке. Переобучение возникает при использовании избыточно сложных моделей.
Недообучение — нежелательное явление, возникающее при решении задач обучения по прецедентам, когда алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.
Пример. На рисунке справа показан эффект переобучения в одной задаче медицинского прогнозирования. Точки на графике соотвествуют различным методам обучения. Каждая точка получена путём усреднения по большому числу разбиений исходной выборки из 72 прецедентов на обучающую подвыборку и контрольную. Горизонтальная ось — частота ошибок на обучении; вертикальная — на контроле. Хорошо видно, что точки имеют систематическое смещение вверх относительно диагонали графика.
О природе переобучения
Эмпирическим риском называется средняя ошибка алгоритма на обучающей выборке. Метод минимизации эмпирического риска (empirical risk minimization, ERM) наиболее часто применяется для построения алгоритмов обучения. Он состоит в том, чтобы в рамках заданной модели выбрать алгоритм, имеющий минимальное значение средней ошибки на заданной обучающей выборке.
С переобучением метода ERM связано два утверждения, которые на первый взгляд могут показаться парадоксальными.
Утверждение 1. Минимизация эмпирического риска не гарантирует, что вероятность ошибки на тестовых данных будет мала. Легко строится контрпример — абсурдный алгоритм обучения, который минимизирует эмпирический риск до нуля, но при этом абсолютно не способен обучаться. Алгоритм состоит в следующем. Получив обучающую выборку, он запоминает её и строит функцию, которая сравнивает предъявляемый объект с запомненными обучающими объектами. Если предъявляемый объект в точности совпадает с одним из обучающих, то эта функция выдаёт для него запомненный правильный ответ. Иначе выдаётся произвольный ответ (например, случайный или всегда один и тот же). Эмпирический риск алгоритма равен нулю, однако он не восстанавливает зависимость и не обладает никакой способностью к обобщению.
Вывод: для успешного обучения необходимо не только запоминать, но и обобщать.
Утверждение 2. Переобучение появляется именно вследствие минимизации эмпирического риска. Пусть задано конечное множество из D алгоритмов, которые допускают ошибки независимо и с одинаковой вероятностью. Число ошибок любого из этих алгоритмов на заданной обучающей выборке подчиняется одному и тому же биномиальному распределению. Минимум эмпирического риска — это случайная величина, равная минимуму из D независимых одинаково распределённых биномиальных случайных величин. Её ожидаемое значение уменьшается с ростом D. Соотвественно, с ростом D увеличивается переобученность — разность вероятности ошибки и частоты ошибок на обучении.
В данном модельном примере легко построить доверительный интервал переобученности, так как функция распределения минимума известна. Однако в реальной ситуации алгоритмы имеют различные вероятности ошибок, не являются независимыми, а множество алгоритмов, из которого выбирается лучший, может быть бесконечным. По этим причинам вывод количественных оценок переобученности является сложной задачей, которой занимается теория вычислительного обучения. До сих пор остаётся открытой проблема сильной завышенности верхних оценок вероятности переобучения.
Утверждение 3. Переобучение связано с избыточной сложностью используемой модели. Всегда существует оптимальное значение сложности модели, при котором переобучение минимально.
В качестве модели рассмотрим полиномы заданной степени :
В качестве метода обучения возьмём метод наименьших квадратов:
Ниже показаны графики самой выборки и аппроксимирующей функции:
Определения
Средней потерей алгоритма на выборке называется величина
Пусть — вероятностное пространство. Ожидаемой потерей алгоритма называется величина
Не столь важно, что скрывается за термином «алгоритм». Это могут быть в частности, решающие правила в задачах классификации и распознавания образов, функции регрессии в задачах восстановления регрессии илипрогнозирования, и т. п.
Вероятность переобучения (частотное определение)
Определение. Переобученностью алгоритма относительно контрольной выборки называется разность
Определение. Вероятностью переобучения называется вероятность того, что величина переобученности превысит заданный порог :
Вероятность переобучения может быть измерена эмпирически методом Монте-Карло, см. также скользящий контроль:
Вероятность переобучения (вероятностное определение)
Определение. Переобученностью алгоритма называется разность
Определение. Вероятностью переобучения называется вероятность того, что величина переобученности превысит заданный порог :
Недостатки вероятностного определения:
Теоретические верхние оценки переобученности
Сложность
Оценки, основанные на самоограничении (self-bounding)
Оценки, основанные на последовательности выборов (microchoice bounds)
Оценки, основанные на расслоении семейства алгоритмов (shell bounds)
Разделимость
Оценки, основанные на отступах (margin-based bounds)
Устойчивость
Устойчивость алгоритма обучения (algorithmic stability)
Эмпирическое измерение переобучения
См. также
Ссылки
Overfitting — статья о переобучении в англоязычной Википедии.