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

Умный Ганс - сказка о машинном обучении

Прежде чем мы углубимся в теорию, расскажем правдивую историю о лошади по кличке «Умный Ганс». Судя по названию, Ганс не был похож на других лошадей. Его владелец Вильгельм вскоре обнаружил, что его можно научить читать основные уравнения на классной доске и нажимать ногой на правильный ответ. Это поразило Вильгельма, который сразу же продемонстрировал Ганса всей Германии. Однако вскоре обнаружилось, что без ведома Вильгельма Ганс только выглядел умен и не мог заниматься математикой. Сообразительность Ганса зависела от его способности вблизи и беспрепятственно видеть человека, который знал правильный ответ. Уберите это, и его точность упадет до нуля. Ганс просто очень хорошо читал язык тела людей, что подсказывало ему перестать постукивать ногой.

Итак, что это говорит нам о машинном обучении? Как и владелец Ганса Вильгельм, как тренеры моделей мы не всегда можем быть уверены в том, что наша модель извлекла из данных. Модель может показаться превосходной при обучении, но затем делает ужасные прогнозы относительно невидимых данных в производственной среде. В настоящее время это горячая тема в сообществе машинного обучения (я даже посетил академическую конференцию по этой теме). Если вы хотите узнать больше, посмотрите эту статью.

Как быть "слишком" в хорошей форме

Возьмем следующий пример. Здесь у нас есть набор данных, содержащий два класса, представленных красными крестами и синими кружками.

Мы хотим обучить модель, которая может классифицировать данные по двум классам. После обучения вы можете быть поражены, узнав, что модель показывает 100% точность на этом наборе данных. Но когда вы вводите новые данные, точность может полностью упасть - классический признак переобучения.

Граница классификации, которую использует наша модель, может выглядеть примерно так:

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

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

Перекрестная проверка на помощь

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

При перекрестной проверке набор данных разбивается на части. Определенная пропорция, скажем 80%, используется для обучения модели в обычном режиме. Остальные данные (20%) не используются для обратного распространения ошибки, а вместо этого используются для отслеживания ошибки теста. Когда эта ошибка перестает улучшаться (или, в большинстве случаев, становится еще хуже), это верный признак того, что мы переоснащаемся, поэтому мы можем прекратить тренировку на этом этапе.

Посмотрим, как это выглядит в коде:

Крепче, счастливее, продуктивнее

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

Реализация перекрестной проверки, которую я представил в этом посте, является очень простой - гораздо чаще тренировать несколько моделей (обычно до десяти) с разными порциями тестовых данных каждый раз. Это известно как k-кратная перекрестная проверка. Вы можете попробовать расширить приведенный выше пример до кросс-валидатора k-fold, если хотите.

Как всегда, исходный код всех вышеперечисленных примеров вы можете найти на нашем GitHub.

Чтобы начать обучение программированию AI с первого дня, перейдите здесь. И дайте нам подписаться, чтобы получать обновления о наших последних сообщениях.