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

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

Оценка модели

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

При оценке модели данных наиболее часто используемым показателем является точность. Это дает общее представление о том, сколько выборок данных неправильно классифицировано, однако эта информация может быть обманчивой и может дать нам ложное ощущение безопасности.

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

Компромисс смещения и дисперсии

Хотя существует множество различных показателей, которые можно использовать для измерения производительности модели, всегда важно поддерживать низкий уровень систематической ошибки и дисперсии. Мы определяем смещение как любую систематическую разницу между результатом нашей модели и «истинным» значением. Дисперсия относится к статистическому пределу модели (см. Рисунок для иллюстрации).

Итак, в каких ситуациях нам придется бороться с высокой систематической ошибкой или высокой дисперсией?

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

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

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

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

K-кратная перекрестная проверка

В этом разделе мы будем использовать Keras для обертывания нейронной сети и использовать sklearn для выполнения перекрестной проверки в K-кратном порядке. Для нейронной сети мы будем использовать архитектуру LeNet. Это была одна из первых известных глубоких сверточных архитектур, ее довольно легко кодировать и не слишком дорого с точки зрения вычислений. Архитектура состоит из двух наборов сверточных слоев и слоев субдискретизации (также известных как объединение в пулы), за которыми следует уплощающий сверточный слой, а затем два плотных (полностью связанных) слоя.

Прежде чем подробно изучать код, может быть полезно определить, что такое k-кратная перекрестная проверка и почему вы должны ее использовать.

K-кратная перекрестная проверка - один из наиболее распространенных методов подтверждения предполагаемой гипотезы на основе данных, а также оценки точности работы модели и ее способности к обобщениям. В k-кратной перекрестной проверке вы случайным образом разбиваете обучающие данные на «k» складок одинакового размера. На каждой итерации одна из складок используется для оценки производительности, а остальная часть используется для обучения. Этот процесс выполняется k раз, чтобы мы получили k моделей и оценки производительности.

Статистически средняя производительность, измеренная в k-кратной перекрестной проверке, дает правильную оценку того, насколько хорошо модель выполняет свою задачу в целом.

Код перекрестной проверки

Сначала мы импортируем данные из Кераса. В качестве обучающего набора мы будем использовать набор данных Fashion-MNIST. Fashion-MNIST - это набор данных, состоящий из изображений продуктов Zalando. Он имеет обучающий набор из 60 000 образцов и тестовый набор из 10 000 образцов. Каждое изображение в этих наборах имеет размер 28 пикселей на 28 пикселей.

Перед передачей данных в нашу модель мы должны объявить количество каналов (также известное как глубина изображения) и изменить форму выборки на 60 000 x [1, 28, 28] в соответствии с требованиями свертки. Обратите внимание, что набор данных состоит из черно-белых изображений. По этой причине у нас всего один канал.

На следующем шаге мы определяем класс сверточной нейронной сети (LeNet):

Чтобы выполнить перекрестную проверку, мы импортируем функцию cross_val_score из Sklearn. Эта функция принимает классификатор, образцы (X), метки (y) и количество складок (cv) в качестве входных данных:

После выполнения перекрестной проверки функция возвращает список точности для пяти значений. Чтобы узнать, как он работает в среднем, мы смотрим на среднее значение и стандартное отклонение:

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

После выполнения перекрестной проверки для 5 кратностей и извлечения средней точности и стандартного отклонения у нас есть более точная оценка производительности модели и ее надежности в среднем. Мы видим, что классификатор в среднем достигает 90% точности. Это значение колеблется от итерации к итерации со стандартным отклонением примерно 0,4%. Мы можем сделать вывод, что у нас низкая дисперсия и относительно низкая систематическая ошибка. Тем не менее, мы рекомендуем вам протестировать различные архитектуры CNN с помощью набора данных Fashion-MNIST: https://github.com/zalandoresearch/fashion-mnist#benchmark

Оптимизация гиперпараметров

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

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

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

Поиск по сетке

Grid-Search - популярный метод определения наилучшего набора гиперпараметров для модели. Это метод поиска методом грубой силы, который берет набор возможных значений для каждого гиперпараметра, который мы хотим настроить. Машина оценивает производительность для каждой комбинации. В конце концов, он вернет выбор с лучшей производительностью.

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

Пример поиска по сетке

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

Несмотря на то, что мы используем небольшое количество складок для перекрестной проверки (параметр cv) и скромное количество значений для 3 гиперпараметров, чтобы сократить время ожидания, для запуска следующей конфигурации все равно потребуется более часа. Мы рекомендуем установить для n_jobs значение -1, чтобы поиск по сетке выполнялся параллельно на всех процессорах:

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

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

Заключение

В этой статье мы рассмотрели некоторые основные идеи о том, как оценить модель машинного обучения и как настроить ее гиперпараметры.

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

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

Если у вас есть какие-либо мысли или вопросы по поводу оценки модели или оптимизации гиперпараметров, пожалуйста, свяжитесь с нами.

Ключевые выводы

  • Точность, измеренная в ходе обучения и набора данных тестирования, является самым быстрым и наиболее часто используемым показателем для оценки модели, но не лучшим.
  • Какую бы метрику вы ни использовали для измерения производительности, вам необходимо обеспечить минимальные смещения и отклонения.
  • Если модель перетренирована или слишком сложна, вы увидите большую дисперсию. Если модель слишком негибкая и дает одинаковые ошибки как в данных обучения, так и в данных тестирования, вы увидите высокую систематическую ошибку.
  • Попытки уменьшить одно часто усиливают другое. Необходим компромисс, известный как компромисс между отклонением и отклонением.
  • Средняя производительность, измеренная с помощью перекрестной проверки в k раз, дает правильную оценку того, насколько хорошо модель выполняет свою задачу в целом.
  • Нейронные сети имеют два типа параметров; те, которые выучили во время обучения, и те, которые жестко запрограммированы и оптимизированы отдельно. Последние являются гиперпараметрами.
  • Оптимизация гиперпараметров часто требует многократного обучения разных версий модели различным наборам гиперпараметров.
  • Поиск по сетке - один из простейших методов гиперпараметрической оптимизации.