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

Заучить не значит понять

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

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

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

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

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Две кривые точности по глубине дерева: синяя на обучении растёт до 100 процентов, красная на тесте поднимается до 82 процентов и выходит на плато; между ними растущий разрыв 18 процентов; отмечена лучшая сложность и зоны недообучения и переобучения
Рис. 32.1. Кривая переобучения

Синяя кривая (на обучении) неудержимо ползёт к 100%100\%: дерево заучивает всё больше примеров. Красная (на тесте) поднимается лишь до 82%82\% и застывает. Разрыв между ними — 18%18\% на глубоком дереве — и есть переобучение: модель помнит обучающие цифры, но не переносит это на новые.

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

Три роли данных

Чтобы честно и настроить, и оценить модель, данные делят на три части, у каждой своя роль. Обучающая (train) меняет веса. Проверочная (validation) выбирает настройки — глубину дерева, скорость обучения, — сравнивая варианты. Тестовая (test) отвечает на главный вопрос один раз, в самом конце.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три блока: train (модель учится), validation (настройка), test (один раз в конце); красная перечёркнутая стрелка от теста к обучению подписана: подсмотреть в тест и подстроиться запрещено — утечка
Рис. 32.2. Три роли данных

Три роли: учить, настраивать, судить. Красная перечёркнутая стрелка — запрет: подсматривать в тест и под него подстраиваться нельзя. Иначе тест перестаёт быть честной проверкой невиданного и превращается в ещё одну обучающую выборку.

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

Больше данных, а не хитрее модель

Что сильнее улучшает обобщение — усложнить модель или добавить данных? Построим кривую обучения: как растёт точность на тесте с ростом обучающей выборки.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
График: точность на тесте растёт с размером обучающей выборки от 88 процентов при 60 примерах до 96 процентов при 1257 примерах, затем выходит на плато
Рис. 32.3. Кривая обучения

Точность на тесте растёт с размером выборки: 88%88\% на шестидесяти примерах, 96%96\% на тысяче с лишним. Кривая круто идёт вверх, а потом выходит на плато. Часто добавить данных полезнее, чем изобретать хитрую модель, — но и данные однажды перестают помогать.

Утечка: незаметный обман

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

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

Кросс-валидация

Когда данных мало, жалко отдавать большой кусок под validation. Выход — кросс-валидация: данные делят на kk частей, по очереди каждую делают проверочной, а на остальных обучают, и усредняют kk результатов. Так каждая строка побывает и в обучении, и в проверке, но никогда одновременно. Оценка становится устойчивее, а весь набор — использованным сполна.

Двойной спуск

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

Русская линия: теория обобщения

Почему вообще обучение на конечной выборке позволяет что-то сказать о новых данных? Строгий ответ дали советские математики Владимир Вапник и Алексей Червоненкис. В конце 19601960-х они создали теорию, связавшую способность модели обобщать с её сложностью и объёмом данных: чем богаче класс моделей (его меру назвали VC-размерностью dd), тем больше примеров нужно, чтобы малая ошибка на обучении гарантировала малую ошибку на новых данных. Схематично их результат выглядит так:

ошибка на новых  ошибка на обучении+O ⁣(dn),\text{ошибка на новых}\ \lesssim\ \text{ошибка на обучении} + O\!\left(\sqrt{\tfrac{d}{n}}\right),

где nn — число примеров. Разрыв между обучением и новыми данными растёт с богатством модели dd и убывает с объёмом данных nn — ровно то, что мы видели на кривой переобучения и кривой обучения.

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

Лаборатория переобучения

Сложность, обучение и проверка

Загружается живая иллюстрация…

Порядок опытов. Двигайте сложность модели — глубину дерева — и следите за двумя кривыми. Синяя, точность на обучении, упрямо ползёт к 100%100\%. Зелёная, точность на отложенной проверке, сперва растёт вместе с ней, но у лучшей сложности застывает, а дальше только расходится с синей. Красная чёрточка между ними — переобучение в чистом виде. Найдите точку, где зелёная кривая максимальна: именно там модель стоит остановить, а не там, где синяя достигла потолка.

Сборка: судить по невиданному

Честная проверка держится на одном правиле: качество модели меряют только на данных, которых она не видела. Достаточно сложная модель заучит обучающую выборку наизусть и покажет там стопроцентную точность, ничего не обобщив, — мы видели растущий разрыв train и test на реальных цифрах. Оттого данные делят на три роли: train учит, validation настраивает, test судит один раз, а подсматривать в тест — утечка, как и раскидывать строки одного пациента или мешать прошлое с будущим. Кросс-валидация выжимает максимум из скудных данных, а двойной спуск напоминает, что простая U-картина — лишь начало. За всем этим — теория обобщения Вапника и Червоненкиса и принцип простоты Колмогорова. Теперь мы умеем и обучать, и честно оценивать. Дальше — как выжать больше из тех же данных, не собирая новых: об аугментации и переносе обучения.

Задачи