Демистификация HyperOpt

Как автоматизировать настройку модели с помощью HyperOpt

Любишь тюнинговать модели? Если ваш ответ «да», этот пост не для вас.

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Мультфильм от моего дедушки — веб-сайт.

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

Без лишних слов, давайте погрузимся!

HyperOpt — это пакет Python с открытым исходным кодом, который использует алгоритм Parzen Esimtors на основе дерева (TPE) для выбора гиперпараметров модели, которые оптимизируют определяемую пользователем целевую функцию. Просто определяя функциональную форму и границы каждого гиперпараметра, TPE тщательно, но эффективно осуществляет поиск в сложном гиперпространстве для достижения оптимума.

TPE — это последовательный алгоритм, который использует байесовское обновление и следует следующей последовательности.

  1. Обучите модель с несколькими наборами случайно выбранных гиперпараметров, возвращая значения целевой функции.
  2. Разделите наблюдаемые нами значения целевой функции на «хорошие» и «плохие» группы в соответствии с некоторой пороговой гаммой (γ).
  3. Рассчитайте показатель «перспективности», который всего лишь P(x|хорошо) / P(x|плохо).
  4. Определите гиперпараметры, которые максимизируют перспективность с помощью смешанных моделей.
  5. Подгоните нашу модель, используя гиперпараметры из шага 4.
  6. Повторяйте шаги 2–5 до достижения критерия остановки.

Вот быстрый пример кода.

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

1.1 — Наша цель

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

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

Наша цель в этой статье — понять, как использовать алгоритмы для автоматизации процесса настройки модели.

Чтобы помочь нам задуматься об этой цели, давайте воспользуемся аналогией: мы пираты, ищущие зарытые сокровища. Также важно отметить, что мы очень эффективные пираты, которые стремятся свести к минимуму время на поиски зарытого сокровища. Итак, как нам минимизировать время, затрачиваемое на поиск? Ответ используйте карту!

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
фигура 1: пример пространства поиска 3D-гиперпараметров. Расположение сундука с сокровищами — глобальный оптимум. Изображение автора.

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

Но что происходит, когда у нас нет карты?

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

Итак, давайте поговорим о некоторых потенциальных способах эффективного исследования этого пространства и поиска сокровищ!

1.2 — Возможные решения

Исходный метод настройки модели — «ручной»: инженер фактически вручную тестирует множество различных конфигураций и смотрит, какая комбинация гиперпараметров дает лучшую модель. Несмотря на информативность, этот процесс неэффективен. Должен быть лучший способ…

1.2.1 — Поиск по сетке (худший)

Наш первый алгоритм оптимизации — поиск по сетке. Поиск по сетке итеративно проверяет все возможные комбинации гиперпараметров в заданной пользователем сетке.

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 2: пример схемы поиска по сетке. Изображение автора

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

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

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

1.2.2 — Случайный поиск (хорошо)

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

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 3: пример случайного поиска. Изображение автора.

Вот интересный факт: случайный поиск находит (в среднем) 5 % самых популярных конфигураций гиперпараметров внутри 60 XNUMX итераций. Тем не менее, как и в случае с поиском по сетке, вы должны преобразовать пространство поиска, чтобы отразить функциональную форму каждого гиперпараметра.

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

1.2.3 — Байесовская оптимизация (лучше)

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

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 4: пример байесовской оптимизации. SRC. Изображение автора.

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

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

1.2.4 — Древовидные оценщики Парцена (лучшие)

Наконец, давайте поговорим о звезде шоу: древовидных оценщиках Парцена (TPE). TPE — это еще один алгоритм SMBO, который обычно превосходит базовую байесовскую оптимизацию, но его главное преимущество — он обрабатывает сложные отношения гиперпараметров через древовидную структуру.

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 5: пример иерархической структуры TPE — SRC. Изображение автора.

Давайте воспользуемся рисунком 5, чтобы понять это. древовидная структура. Здесь мы обучаем классификатор машины опорных векторов (SVM). Мы протестируем два ядра: linear и RBF, linear ядро не принимает параметр ширины, но RBF делает, поэтому, используя вложенный словарь, мы можем закодировать эту структуру и тем самым ограничить пространство поиска.

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

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

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

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

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

2.1 — Инициализация

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

Далее мы должны определим нашу целевую функцию, который используется для оценки того, насколько «хороша» наша комбинация гиперпараметров. Некоторые примеры включают классические функции потерь ML, такие как RMSE или AUC.

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

2.2 — Итеративная байесовская оптимизация

Байесовская оптимизация — это последовательный алгоритм, который находит точки в гиперпространстве с высокой вероятностью «успешности» в соответствии с целевой функцией. TPE использует байесовскую оптимизацию, но использует некоторые хитрые приемы для повышения производительности и управления сложностью пространства поиска…

2.2.0 — Концептуальная установка

Первый трюк – моделирование Р(х|у) вместо Р(у|х)…

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 6: условная вероятность, которую пытается решить TPE. Изображение автора.

Байесовская оптимизация обычно направлена ​​на моделирование Р(у|х), что представляет собой вероятность значения целевой функции (y), учитывая гиперпараметры (x). TPE делает наоборот — он моделирует Р(х|у), что является вероятностью гиперпараметров (x), учитывая значение целевой функции (y).

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

После этой очень важной настройки давайте перейдем к реальному алгоритму.

2.2.1 — Разделите наши данные на «хорошие» и «плохие» группы

Помните, наша цель — найти лучшие значения гиперпараметров в соответствии с некоторой целевой функцией. Итак, как мы можем использовать Р(х|у) сделать это?

Во-первых, TPE разделяет наблюдаемые нами точки данных на две группы: хорошо, обозначенный г (х), и плохой, обозначенный л(х). Граница между хорошим и плохим определяется определяемым пользователем параметром гаммы (γ), который соответствует процентилю целевой функции, разделяющему наши наблюдения (y*).

Итак, при γ = 0.5 значение нашей целевой функции, которая разделяет наши наблюдения (y*) будет медианой наших наблюдаемых точек.

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 7: разбивка p(x|y) на два набора. Изображение автора.

Как показано на рисунке 7, мы можем формализовать р(х|у) используя вышеуказанную структуру. И, если провести аналогию с пиратами…

Пиратская перспектива: глядя на места, которые мы уже исследовали, l(x) перечисляет места с очень небольшим количеством сокровищ, а g(x) перечисляет места с большим количеством сокровищ.

2.2.32 — Расчет показателя «перспективности»

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

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 8: определение показателя перспективности. Изображение автора.

На рисунке 8 показана наша оценка перспективности (P), что представляет собой просто соотношение следующих компонентов…

  • Числитель: вероятность наблюдения набора гиперпараметров (x), учитывая, что соответствующее значение целевой функции равно «хорошо".
  • Знаменатель: вероятность наблюдения набора гиперпараметров (x), учитывая, что соответствующее значение целевой функции равно «плохой".

Чем больше значение «перспективности», тем больше вероятность того, что наши гиперпараметры x даст «хорошую» целевую функцию.

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

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

2.2.3 — Создание оценок плотности вероятности

В-третьих, TPE стремится оценить показатель «перспективности» с помощью смешанные модели. Идея смешанных моделей состоит в том, чтобы взять несколько распределений вероятностей и соединить их с помощью линейной комбинации. SRC. Эти комбинированные распределения вероятностей затем используются для разработки оценок плотности вероятности.

Как правило, процесс моделирования смеси…

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

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

Давайте рассмотрим пример на рисунке 9…

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 9: пример усеченных гауссовских распределений, соответствующих трем наблюдениям за гиперпараметрами. Изображение автора.

Для каждого наблюдения (синие точки на оси x) мы создаем нормальное распределение ~N(μ, σ), где…

  • мкм (мю) является средним значением нашего нормального распределения. Его значение — это расположение нашей точки по оси X.
  • σ (сигма) — стандартное отклонение нашего нормального распределения. Его значение — это расстояние до ближайшей соседней точки..

Если точки расположены близко друг к другу, стандартное отклонение будет небольшим, и, следовательно, распределение будет очень высоким, и наоборот, если точки разбросаны друг от друга, распределение будет плоским (рисунок 10)…

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 10: пример влияния стандартного отклонения на форму нормального распределения. Изображение автора.

Перспектива пиратов: NA — пираты не очень хорошо справляются со смешанными моделями.

Еще одно небольшое отступление, прежде чем двигаться дальше: если вы читаете литературу, вы заметите, что TPE использует «усеченные» гауссианы, что просто означает, что гауссианы ограничены диапазоном, который мы указываем в нашей конфигурации гиперпараметра, а не расширяются до +/- бесконечности. .

2.2.4 — Определение следующей точки для исследования!

Давайте соберем эти кусочки вместе. На данный момент мы 1) получили наблюдения целевой функции, 2) определили нашу формулу «перспективности» и 3) создали оценку плотности вероятности с помощью смешанных моделей на основе предыдущих значений. У нас есть все необходимое, чтобы оценить ту или иную точку!

Наш первый шаг — создать среднюю функцию плотности вероятности (PDF) для обоих г (х) и л(х).

Гиперпараметр, модель настройки гиперпараметров, настройка машинного обучения, обработка данных, модель sklearn mllib, искровое дерево Hyperopt, оценщик парзена, tpe, основанный на дереве парзенов, esimtator mlflow databricks
Рисунок 11: наложение средней плотности вероятности с учетом 3 наблюдаемых точек. Изображение автора.

Пример процесса показан на рисунке 11: красная линия — это наш средний PDF-файл, который представляет собой просто сумму всех PDF-файлов, деленную на количество PDF-файлов.

Используя средний PDF, мы можем получить вероятность любого значения гиперпараметра (x) находясь в г (х) or л(х).

Например, предположим, что наблюдаемые значения на рисунке 11 принадлежат «хорошему» набору, г (х). Судя по нашему среднему PDF, маловероятно, что значение гиперпараметра 3.9 или 0.05 принадлежит к «хорошему» набору. И наоборот, значение гиперпараметра ~ 1.2, скорее всего, принадлежит «хорошему» набору.

Теперь это только половина картины. Мы применяем ту же методологию для «плохого» набора, л(х). Поскольку мы стремимся максимизировать г(х) / л(х), перспективные точки должны располагаться там, где г (х) высокий и л(х) низок.

Довольно круто, не так ли?

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

Перспектива пирата: следующее место, которое мы раскопаем, — это место, которое максимизирует (вероятность наличия большого количества сокровищ) / (вероятность наличия небольшого количества сокровищ).

Теперь, когда вы знаете, как это работает, вот несколько практических советов по реализации TPE с помощью пакета с открытым исходным кодом HyperOpt.

3.1 — Структура приложения HyperOpt

Как правило, использование HyperOpt состоит из трех основных шагов…

  1. Определите пространство поиска, это всего лишь диапазоны и функциональные формы гиперпараметров, которые вы хотите оптимизировать.
  2. Определите функцию подгонки, который зовет тебя model.fit() функция в заданном разделении поезд/тест.
  3. Определим целевую функцию, это любой из классических показателей точности, таких как RMSE или AUC.

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

3.2— Советы и рекомендации

  • HyperOpt можно распараллелить через оба Apache Spark и MongoDB. Если вы работаете с несколькими ядрами, будь то в облаке или на локальном компьютере, это может значительно сократить время выполнения.
  • Если вы распараллеливаете процесс настройки через Apache Spark, используйте SparkTrialsобъект для моделей машинного обучения с одним узлом (sklearn) и Trails объект для распараллеленных моделей машинного обучения (MLlib). Код ниже.
  • Млфлоу — это метод с открытым исходным кодом для отслеживания запуска вашей модели. Он легко интегрируется с HyperOpt.
  • Не сужайте пространство поиска слишком рано. Некоторые комбинации гиперпараметров могут оказаться удивительно эффективными.
  • Определить пространство поиска может быть непросто, особенно если вы не знаете функциональная форма ваших гиперпараметров. Однако, как показывает личный опыт, TPE довольно устойчив к неправильной спецификации этих функциональных форм.
  • Выбор хорошей целевой функции имеет большое значение. В большинстве случаев ошибки не равны. Если определенный тип ошибки является более проблематичным, обязательно встройте эту логику в свою функцию.

3.3 — Пример кода

Вот код для распределенного запуска HyperOpt. Он был адаптирован из кода из книги, Машинное обучение в действии — вот git репо.

Некоторые приятные особенности этого фрагмента включают в себя распараллеливание с помощью Apache Spark и регистрация модели через Млфлоу. Также обратите внимание, что этот фрагмент оптимизирует sklearn RandomForestRegressor — вам придется изменить модель и функцию подгонки в соответствии с вашими потребностями.

И вот он — HyperOpt во всей красе!

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

Настройка гиперпараметров — необходимая часть жизненного цикла модели машинного обучения, но она требует много времени. Алгоритмы последовательной оптимизации на основе моделей (SMBO) превосходно подходят для поиска оптимумов в сложных гиперпространствах и могут применяться для настройки гиперпараметров. Древовидные оценщики Парцена (TPE) — это очень эффективный SMBO, превосходящий по производительности как байесовскую оптимизацию, так и случайный поиск.

TPE повторяет следующие шаги до тех пор, пока не будет достигнут критерий остановки:

  1. Разделите наблюдаемые точки на «хорошие» и «плохие» наборы в соответствии с некоторым гиперпараметром — гаммой.
  2. Подберите модель смеси как к «хорошему», так и к «плохому» набору, чтобы получить среднюю оценку плотности вероятности.
  3. Выберите точку, которая оптимизирует оценку «перспективности», которая использует шаг 2 для оценки вероятности попадания в «хороший» и «плохой» наборы.

Наконец, у нас есть действительно классный фрагмент кода, показывающий, как распараллелить HyperOpt с помощью SparkTrials. Он также регистрирует все наши итерации в MLflow.

Раскрытие тайны HyperOpt Переиздано из источника https://towardsdatascience.com/hyperopt-demystified-3e14006eb6fa?source=rss—-7f60cf5620c9—4 через https://towardsdatascience.com/feed

<!–

->

Отметка времени:

Больше от Блокчейн-консультанты