К содержанию
Фонтум Искусственный интеллект Урок 6 / 24 Все уроки

Главная · Курсы · Искусственный интеллект · Программа курса · Модуль II. Как машина учится · урок 6 из 24

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

Переобучение, спрятанный тест и утечка данных как главная причина завышенных результатов

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

Dive into Deep Learning, глава о выборе модели. Stanford CS229, конспекты о переобучении · 22 мин · обновлено 01.10.2026

После урока вы сможете

  • Отличать запомненные примеры от выученной закономерности
  • Понимать, зачем часть данных прячут и почему в неё нельзя подглядывать
  • Узнавать утечку данных в её обычных, совсем не очевидных видах
  • Спрашивать у любого числа о точности модели, на чём его получили

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

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

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

Обобщение и есть единственная цель

Урок 2 уже назвал величину, ради которой всё затевается. Модель нужна не для того, чтобы правильно отвечать на показанные примеры: ответы на них и так известны, для этого хватило бы таблицы. Модель нужна, чтобы отвечать на то, чего она не видела. Способность переносить выученное на новые случаи называется обобщением, и другой цели у обучения нет.

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

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

Почему зубрёжка получается сама собой

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

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

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

Девять точек и многочлен

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

При степени 1 модель прямая, и она слишком проста для этих данных. Изгиб прямая не ловит, и ошибка велика с обеих сторон: около 0,26 на обучении и 0,31 на новых данных. Это недообучение, обратная беда, и распознаётся она сразу. Ручек у модели просто не хватает, чтобы описать происходящее.

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

Теперь поставьте степень 8 и посмотрите на две полосы сразу. Ошибка на обучении становится ровно нулевой, а вторая полоса упирается в край шкалы. Кривая прошла точно через все девять точек, и это не достижение, а арифметика.

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

Дальше работает школьная арифметика: девять неизвестных и девять условий вида «кривая проходит через эту точку». Такая система обычно имеет решение, каковы бы эти точки ни были. Значит, нулевая ошибка здесь получена не обучением, а числом ручек. Поставьте «Другие точки», и кривая пройдёт и через них, а на новых данных промахнётся ещё сильнее.

Здесь стоит задержаться, потому что это главный момент урока. Модель не отличает закономерность от случайного сдвига: для неё и то и другое просто числа. Гибкости хватило, чтобы объяснить всё подряд, и она послушно объяснила всё подряд. Между точками кривая уходит туда, где данных нет вовсе, и промахивается на новых случаях тем сильнее, чем точнее подогналась под старые.

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

Зачем прячут тест

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

Работает приём по одной причине, и её стоит проговорить вслух. Запомнить можно только то, что видел, а закономерность переносится и на невиданное. Значит, разрыв между двумя ошибками и есть измеритель того, сколько модель зазубрила. Пока обе ошибки близки, всё в порядке. Как только вторая пошла вверх, началось переобучение.

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

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

ловушка«Мы посмотрели на тест только один раз»

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

Утечка данных

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

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

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

Через время. Данные делят случайно там, где события идут в определённом порядке, и модель начинает предсказывать вчерашнее по завтрашнему. На тесте выходит блестяще, а в работе бесполезно, потому что будущего в работе никто не подскажет. Такие данные делят по дате, а не наугад.

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

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

на заметкуЧетыре вопроса о разделении данных

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

Что здесь от статистики

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

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

Здесь важнее другое: та же беда вернётся в модуле V под новым именем. Когда бенчмарк опубликован в интернете, а модель обучена на интернете, тестовые задачи оказываются в обучении. Это ровно утечка данных, только в промышленном масштабе и почти по умолчанию. Урок 14 разбирает, что после этого остаётся от заголовка «модель сдала экзамен», и ответ там короче, чем хотелось бы.

Три вопроса к любому числу

Из урока следует небольшой набор вопросов к любому заявлению о точности. Спрашивать надо не «сколько процентов», а «на чём это измерено». Трёх вопросов хватает в большинстве случаев, и задавать их не стыдно даже неспециалисту.

Первый: что именно спрятали и когда. Если тест открывали по ходу дела и подстраивали под него модель, число завышено. Насколько именно, сказать нельзя, зато направление известно заранее и всегда одно.

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

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

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

Что дальше

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

Модуль III отвечает на вопрос, который к этому месту уже назрел. Обратное распространение работало с 1986 года. Почему же революции ждали ещё четверть века? Ответ короткий и обидный: не было данных и не было вычислений, а без них обучать было нечем и не на чем. Урок 7 разбирает его подробно, вместе с числами AlexNet 2012 года, где отрыв от второго места составил больше десяти процентных пунктов.

тренажёр урока 6

Зубрёжка против понимания

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

Открыть тренажёр

Ключевые работы и результаты

A. Zhang, Z. Lipton, M. Li, A. Smola, «Dive into Deep Learning»2023Открытый учебник под лицензией CC BY-SA 4.0. Глава о выборе модели разбирает недообучение и переобучение ровно на многочлене растущей степени, на том же примере, что стоит в тренажёре этого урока.
Stanford CS229 «Machine Learning»2018Открытые конспекты вводят разделение выборок и приёмы ограничения свободы модели. Там же показано, что разрыв между ошибкой на обучении и ошибкой на новых данных остаётся измеряемой величиной, а не общим соображением.

Что подтвердилось, а что нет

мифВысокая точность на обучающих данных доказывает, что модель научилась.

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

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

Утечка данных остаётся самой частой причиной завышенных результатов и в публикациях, и в производстве. Происходит она обычно без всякого умысла: дубликаты в наборах, подготовка данных до разделения, случайное деление там, где события идут во времени, связанные примеры одного пациента в обеих выборках. Общий признак один. Между обучением и тестом протёк незамеченный канал, и обобщение перестало измеряться.

сильно ослабленоДостаточно один раз разделить данные на обучающие и тестовые, и результат честен.

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

Термины

обобщениеgeneralization
Способность модели переносить выученное на случаи, которых она не видела. Единственная цель обучения: результат на показанных примерах сам по себе ничего не стоит.
переобучениеoverfitting
Модель запомнила обучающие примеры вместо закономерности: ошибка на обучении падает, а на новых данных растёт. Заметить это можно только по отложенным данным.
недообучениеunderfitting
Обратная беда: у модели не хватает свободы описать то, что в данных есть. Ошибка велика и на обучающих, и на новых данных сразу.
тестовая выборкаtest set
Часть данных, отложенная до начала обучения и не показанная модели. Единственное место, где можно честно измерить обобщение, и заглядывать в неё до конца работы нельзя.
утечка данныхdata leakage
Попадание в обучение того, чего там быть не должно: дубликатов теста, подготовки по всей таблице, будущих событий, связанных примеров. Самая частая причина завышенных результатов.
функция потерьloss function
Число, измеряющее, насколько ответы модели плохи: чем хуже, тем больше. Её выбор и есть решение о том, что считать ошибкой, а не техническая мелочь.
параметрparameter
Настраиваемое число модели. Обучение сводится к подбору положений всех параметров так, чтобы ответы на известных примерах совпадали с известными ответами.
машинное обучениеmachine learning
Способ получить правило не написанием, а подбором: на вход подают данные и ответы, на выходе получают правило в виде набора чисел.

Практикум · Довести модель до зубрёжки и поймать это

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

  1. Поставьте степень 3 и выпишите обе ошибки. Затем поставьте степень 8 и выпишите их снова: вам нужна пара чисел до и после, а не общее впечатление от картинки.
  2. Оставаясь на степени 8, пять раз нажмите «Другие точки» и каждый раз смотрите на форму кривой между точками. Опишите одним предложением, что общего у всех пяти кривых и что в них меняется от запуска к запуску.
  3. Вернитесь к степени 3 и повторите то же самое пять раз. Сравните устойчивость двух моделей и запишите, какая из них больше зависит от того, какие именно девять точек попались.
  4. Найдите степень, при которой вторая полоса самая короткая, затем нажмите «Другие точки» и найдите её снова. Если лучшая степень изменилась, объясните письменно, почему выбирать её по тестовым данным значит подглядывать.
  5. Возьмите любое публичное заявление о точности модели и задайте ему три вопроса урока: что спрятали и когда, не связаны ли части выборки, на кого похожи новые случаи. Запишите, на какие из трёх вопросов в источнике вообще есть ответ.

Вопросы для самопроверки

Вопрос 1

Что такое переобучение?

  • Модель запомнила обучающие примеры вместо закономерности: ошибка на обучении падает, а на новых данных растёт
  • Модель обучали слишком долго, и от избытка повторов её параметры испортились: ошибка выросла и на обучении
  • Модели показали слишком много данных: чем больше примеров, тем выше риск запомнить их вместо закономерности
  • Модель ошибается одинаково часто и на обучении, и на новых данных
Вопрос 2

В тренажёре при степени 8 ошибка на обучении стала ровно нулевой. Что это доказывает?

  • Что модель нашла закономерность: нулевая ошибка на обучении и есть признак, по которому её отличают от случайности
  • Что обучающих данных было достаточно
  • Ничего: у многочлена восьмой степени девять коэффициентов, а точек девять, и такая кривая пройдёт через любое их расположение
  • Что степень 8 и есть правильный выбор: при большей степени ошибка на новых данных начнёт падать
Вопрос 3

Зачем часть данных прячут до самого конца работы?

  • Чтобы обучение шло быстрее: на меньшем объёме модель выучивает закономерность за меньшее число эпох
  • Чтобы хватило данных на обучение второй модели, которая будет проверять ответы первой
  • Чтобы уменьшить значение функции потерь: чем меньше данных, тем меньше слагаемых и тем ниже итог
  • Иначе выученную закономерность нельзя отличить от запомненных ответов
Вопрос 4

Данные о пациентах разделили случайно, и несколько снимков одного человека попали и в обучение, и в тест. Что произошло?

  • Ничего страшного: снимки разные, а значит и примеры считаются независимыми
  • Утечка данных: результат на тесте завышен, а обобщение не измерено
  • Недообучение: часть данных ушла в тест, обучающих примеров не хватило, и закономерность осталась невыученной
  • Неверно выбрана функция потерь: для снимков она должна учитывать пациента
Вопрос 5

Модель показала на тесте результат заметно лучше ожидаемого. Какова первая разумная мысль?

  • Публиковать, пока другие не сделали того же
  • Увеличить число параметров: раз получается, надо усиливать
  • Проверить, не протёк ли тест в обучение
  • Уменьшить скорость шага и переобучить модель

Ответы и разбор открываются в самопроверке урока: она считает результат и отмечает урок пройденным. Пройти самопроверку.

Что читать

  • Dive into Deep Learning (d2l.ai), глава о выборе модели, недообучении и переобучении: Тот же многочлен, что в тренажёре, но с кодом и графиками. Полезно посмотреть, как выглядит подгонка при степени выше числа точек.
  • Тренажёр «Зубрёжка против понимания» в этом уроке: Пять минут с ползунком степени дают то, чего не даёт описание: видно, что первая полоса падает всегда, а решает всё вторая.
Все курсы и разделы школы
Фонтум

Открытая школа: университетские программы и практикумы на русском. Целиком, бесплатно, без регистрации.

Курс «Искусственный интеллект»

ВАШ СЛЕДУЮЩИЙ ВОПРОС

Что хотите понять?