Сетка, случайное, от грубого к точному, байесовский, ручной поиск и генетический алгоритм!

Допустим, вы подготовили данные и разработали POC своей модели машинного обучения.

и это работает.

Однако вы поняли, что производительность не очень хорошая.

Конечно, вы хотите улучшить характеристики своей модели, но как?

Стоит ли менять модель?

Это вариант, но что, если после смены модели вы по-прежнему не можете достичь ожидаемой производительности?

У вас есть 2 варианта: спроектировать модель или пересмотреть данные.

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

Существует множество статей и руководств о том, как выполнять настройку гиперпараметров в Python.

Итак, почему я должен тратить время на чтение очередной типичной статьи?

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

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

В этой статье пойдет речь о 6 методах:

  1. Поиск по сетке
  2. Случайный поиск
  3. От грубого до точного поиска
  4. Байесовский поиск
  5. Генетический алгоритм
  6. Ручной поиск

Не нужно беспокоиться о реализации кода, потому что вы можете получить к нему свободный доступ по ссылке, прикрепленной в конце этой статьи!

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

Гиперпараметр против параметра

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

Ключевое различие между гиперпараметром и параметром заключается в их расположении относительно модели.

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

Пример: коэффициенты в логистической регрессии / линейной регрессии, веса в нейронной сети, опорные векторы в SVM

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

Пример: max_depth в дереве решений, скорость обучения в нейронной сети, C и сигма в SVM

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

Настройка гиперпараметров

Теперь мы знаем, в чем разница между гиперпараметром и параметром. Затем мы должны знать, зачем нам настраивать гиперпараметры.

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

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

Но как выбрать лучшую комбинацию гиперпараметров?

Это главный вопрос, на который будет дан ответ в этой статье! Существует множество методов настройки гиперпараметров. В этой статье мы узнаем 6 из них, а также сравним их и расскажем, когда использовать каждый из них.

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

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

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

Плюсы:

  • Возможность тестирования всех комбинаций в пространстве гиперпараметров
  • Очень просто реализовать

Минусы:

  • Проклятие размерности
  • Возможно упустить лучшую комбинацию гиперпараметров вне пространства гиперпараметров

Случайный поиск

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

Этот метод лучше всего подходит, когда вы не знаете подходящее пространство гиперпараметров (чаще всего это так).

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

Плюсы:

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

Минусы:

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

От грубого до точного поиска

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

Этот метод работает так:

  1. Произвести случайный поиск в начальном пространстве гиперпараметров
  2. Найдите перспективный район
  3. Выполните сеточный / случайный поиск в меньшей области
  4. Продолжайте, пока не будет получен оптимальный результат или не будет достигнуто максимальное количество итераций.

Плюсы:

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

Минусы:

  • Сложнее реализовать, поскольку еще нет пакета, поддерживающего эту функцию

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

Байесовский поиск

Байесовский поиск - это «умный» алгоритм, который использует теорему Байеса для поиска наилучшего сочетания гиперпараметров.

На высоком уровне этот метод работает так:

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

Плюсы:

  • Эффективный способ выбора гиперпараметров без вмешательства человека

Минусы:

  • Сложно реализовать с нуля

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

Реализацию кода для этого метода можно найти в репозитории Github, прикрепленном в конце этой статьи.

Генетический алгоритм

Это еще более «умный» способ настройки гиперпараметров. Этот метод вдохновлен эволюцией концепции естественного отбора.

На высоком уровне генетический алгоритм работает так:

  • Начните с населения
  • Для каждой итерации популяция будет «эволюционировать» путем отбора, скрещивания и мутации.
  • Продолжайте, пока не будет достигнуто максимальное количество итераций

Посмотрите это видео, чтобы узнать больше о генетическом алгоритме.

Реализацию кода для этого метода можно найти в репозитории Github, прикрепленном в конце этой статьи.

Ручной поиск

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

Вы должны действительно понимать, как работает алгоритм, если хотите использовать этот подход. В основном этот метод работает так:

  • Обучите и оцените модель
  • Угадайте лучшую комбинацию гиперпараметров
  • Переобучить и заново оценить модель
  • Продолжайте до получения оптимального результата

Плюсы:

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

Минусы:

  • Трудно угадать, даже если вы действительно понимаете алгоритм
  • Кропотливый

Когда использовать каждый из методов?

Иногда. чем больше мы знаем, тем запутываемся.

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

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

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

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

Вы можете найти все коды, использованные в этой статье, здесь.

Заключительные слова

Поздравляем вас с этим! Надеюсь, вы узнали что-то новое из этой статьи.

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

об авторе

Луи Оуэн - энтузиаст науки о данных, который всегда жаждет новых знаний. Он получил специальность математика в одном из лучших университетов Индонезии, Institut Teknologi Bandung, в рамках полной стипендии последнего года обучения. Недавно, в июле 2020 года, он как раз с отличием окончил учебу.

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

Посетите сайт Луи, чтобы узнать о нем больше! Наконец, если у вас есть какие-либо вопросы или темы для обсуждения, свяжитесь с Луи через LinkedIn.

использованная литература

Https://machinelearningmaster.com/difference-between-a-parameter-and-a-hyperparameter/

Https://fullstackdeeplearning.com/spring2021/lecture-7/