Модель, выучившая обучающие примеры наизусть, покажет на них блестящую точность — и провалится на новых. Заучить не значит понять. Честная проверка отделяет одно от другого, и держится она на простом, но железном правиле: судить модель можно только по тем данным, которых она не видела.
Заучить не значит понять
В прошлом уроке мы измеряли точность на отложенном тесте. Почему нельзя было измерить её прямо на обучающих данных? Потому что там модель схитрит: достаточно сложная модель просто запомнит все примеры вместе с ответами и получит стопроцентную точность, ничего не поняв. Это как готовиться к экзамену, зазубрив ответы к конкретным билетам: на них пятёрка, на новом вопросе — провал.
Настоящая цель обучения — не повторить виденное, а обобщить на невиданное. И проверить обобщение можно лишь на данных, которые при обучении не использовались. Отсюда вся методология честной проверки.
Кривая переобучения
Увидим разрыв между заучиванием и обобщением своими глазами. Обучим дерево решений на реальных рукописных цифрах, постепенно увеличивая его глубину — то есть сложность, — и будем следить за точностью на обучающих данных и на отложенном тесте.

Синяя кривая (на обучении) неудержимо ползёт к : дерево заучивает всё больше примеров. Красная (на тесте) поднимается лишь до и застывает. Разрыв между ними — на глубоком дереве — и есть переобучение: модель помнит обучающие цифры, но не переносит это на новые.
Лучшая сложность — не самая большая, а та, при которой точность на новых данных максимальна. Левее неё — недообучение (модель слишком проста для задачи), правее — переобучение. Искать этот баланс приходится в каждой задаче. И бороться с переобучением можно не только упрощая модель, но и штрафуя большие веса: регуляризация не даёт даже сложной модели заучить данные буквально, мягко возвращая её к простоте.
Три роли данных
Чтобы честно и настроить, и оценить модель, данные делят на три части, у каждой своя роль. Обучающая (train) меняет веса. Проверочная (validation) выбирает настройки — глубину дерева, скорость обучения, — сравнивая варианты. Тестовая (test) отвечает на главный вопрос один раз, в самом конце.

Три роли: учить, настраивать, судить. Красная перечёркнутая стрелка — запрет: подсматривать в тест и под него подстраиваться нельзя. Иначе тест перестаёт быть честной проверкой невиданного и превращается в ещё одну обучающую выборку.
Почему тест трогают лишь однажды? Стоит выбрать модель по результату на тесте — и вы уже под него подстроились, а значит, оценка завышена. Тест одноразов, как запечатанный конверт: вскрыли — испортили.
Больше данных, а не хитрее модель
Что сильнее улучшает обобщение — усложнить модель или добавить данных? Построим кривую обучения: как растёт точность на тесте с ростом обучающей выборки.

Точность на тесте растёт с размером выборки: на шестидесяти примерах, на тысяче с лишним. Кривая круто идёт вверх, а потом выходит на плато. Часто добавить данных полезнее, чем изобретать хитрую модель, — но и данные однажды перестают помогать.
Утечка: незаметный обман
Самая коварная ошибка — утечка: когда в обучение просачивается информация о тесте, и оценка тайно завышается. Формы утечки бывают неочевидны. Скажем, в медицинских данных у одного пациента несколько строк-снимков. Если раскидать их между обучением и тестом случайно, модель на тесте узнает уже виденного пациента — и покажет ложно высокую точность. Делить надо целыми пациентами.
Другая ловушка — время. Если данные приходят во времени, тест должен лежать в будущем относительно обучения. Перемешать их — значит позволить модели учиться на завтрашнем дне, чтобы предсказывать вчерашний.
Кросс-валидация
Когда данных мало, жалко отдавать большой кусок под validation. Выход — кросс-валидация: данные делят на частей, по очереди каждую делают проверочной, а на остальных обучают, и усредняют результатов. Так каждая строка побывает и в обучении, и в проверке, но никогда одновременно. Оценка становится устойчивее, а весь набор — использованным сполна.
Двойной спуск
Классическая картина — растущий разрыв и оптимальная сложность посередине — верна не всегда. У очень больших моделей обнаружили странность: если наращивать сложность дальше порога, где модель точно запоминает обучение, ошибка на тесте, поднявшись до пика, вновь начинает падать.
Русская линия: теория обобщения
Почему вообще обучение на конечной выборке позволяет что-то сказать о новых данных? Строгий ответ дали советские математики Владимир Вапник и Алексей Червоненкис. В конце -х они создали теорию, связавшую способность модели обобщать с её сложностью и объёмом данных: чем богаче класс моделей (его меру назвали VC-размерностью ), тем больше примеров нужно, чтобы малая ошибка на обучении гарантировала малую ошибку на новых данных. Схематично их результат выглядит так:
где — число примеров. Разрыв между обучением и новыми данными растёт с богатством модели и убывает с объёмом данных — ровно то, что мы видели на кривой переобучения и кривой обучения.
Из этой теории выросли и метод опорных векторов, и всё современное понимание переобучения. Практическое правило «сложность должна соответствовать объёму данных» — прямое следствие работ Вапника и Червоненкиса. А глубже всех выразил суть ещё Колмогоров: лучшее объяснение данных — самое простое из согласующихся с ними.
Лаборатория переобучения
Порядок опытов. Двигайте сложность модели — глубину дерева — и следите за двумя кривыми. Синяя, точность на обучении, упрямо ползёт к . Зелёная, точность на отложенной проверке, сперва растёт вместе с ней, но у лучшей сложности застывает, а дальше только расходится с синей. Красная чёрточка между ними — переобучение в чистом виде. Найдите точку, где зелёная кривая максимальна: именно там модель стоит остановить, а не там, где синяя достигла потолка.
Сборка: судить по невиданному
Честная проверка держится на одном правиле: качество модели меряют только на данных, которых она не видела. Достаточно сложная модель заучит обучающую выборку наизусть и покажет там стопроцентную точность, ничего не обобщив, — мы видели растущий разрыв train и test на реальных цифрах. Оттого данные делят на три роли: train учит, validation настраивает, test судит один раз, а подсматривать в тест — утечка, как и раскидывать строки одного пациента или мешать прошлое с будущим. Кросс-валидация выжимает максимум из скудных данных, а двойной спуск напоминает, что простая U-картина — лишь начало. За всем этим — теория обобщения Вапника и Червоненкиса и принцип простоты Колмогорова. Теперь мы умеем и обучать, и честно оценивать. Дальше — как выжать больше из тех же данных, не собирая новых: об аугментации и переносе обучения.