Демістифікований HyperOpt

Як автоматизувати налаштування моделі за допомогою HyperOpt

Ви любите тюнінг моделей? Якщо ваша відповідь «так», це повідомлення НЕ для вас.

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Мультфільм від дідуся — сайт.

У цьому блозі ми розглянемо надзвичайно популярний автоматизований алгоритм налаштування гіперпараметрів під назвою Деревоподібні оцінювачі Parzen (TPE). TPE підтримується пакетом із відкритим кодом HyperOpt. Використовуючи HyperOpt і TPE, інженери машинного навчання можуть швидко розробляти високооптимізовані моделі без ручного налаштування.

Без зайвих слів, давайте зануримось!

HyperOpt — це пакет Python з відкритим вихідним кодом, який використовує алгоритм під назвою Tree-based Parzen Esimtors (TPE) для вибору гіперпараметрів моделі, які оптимізують цільову функцію, визначену користувачем. Просто визначаючи функціональну форму та межі кожного гіперпараметра, TPE ретельно, але ефективно шукає складний гіперпростір для досягнення оптимуму.

TPE — це послідовний алгоритм, який використовує байєсівське оновлення та дотримується наведеної нижче послідовності.

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

Ось швидкий приклад коду.

Гаразд, це було багато гучних слів. Давайте сповільнимось і по-справжньому зрозуміємо, що відбувається.

1.1 — Наша мета

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

Однак певні етапи життєвого циклу моделювання ML дуже важко автоматизувати. Дослідницький аналіз даних (EDA) і розробка функцій, наприклад, зазвичай пов’язані з конкретною темою та вимагають людської інтуїції. Налаштування моделі, з іншого боку, є ітераційним процесом, у якому комп’ютери можуть досягти успіху.

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

Щоб допомогти нам подумати про цю мету, давайте використаємо аналогію: ми пірати, які шукають захований скарб. Важливо також відзначити, що ми дуже ефективні пірати, які прагнуть мінімізувати свій час на пошуки захованих скарбів. Отже, як нам мінімізувати час, витрачений на пошук? Відповідь така користуйся картою!

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 1: приклад тривимірного простору пошуку гіперпараметрів. Розташування скрині зі скарбами є глобальним оптимумом. Зображення автора.

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

Але що станеться, якщо у нас немає карти?

Коли нам доручено налаштувати модель, нам, на жаль, не дають карти. Наша місцевість, яка відповідає простору пошуку гіперпараметрів, невідома. Крім того, також невідоме місце розташування нашого скарбу, яке відповідає оптимальному набору гіперпараметрів.

З таким налаштуванням давайте поговоримо про потенційні способи ефективного дослідження цього простору та пошуку скарбів!

1.2 — Потенційні рішення

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

1.2.1 — Пошук у сітці (найгірший)

Наш перший алгоритм оптимізації — пошук у сітці. Пошук у сітці ітеративно перевіряє всі можливі комбінації гіперпараметрів у сітці, визначеній користувачем.

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 2: приклад макета пошуку в сітці. Зображення автора

Наприклад, на малюнку 2 червона крапка відображає місце, де ми будемо перенавчати та оцінювати нашу модель. Ця структура неефективна, оскільки вона повторно використовує неправильні гіперпараметри. Наприклад, якщо гіперпараметр 2 мало впливає на нашу цільову функцію, ми все одно перевіримо всі комбінації його значень, тим самим збільшивши необхідну кількість ітерацій у 10 разів (у цьому прикладі).

Але перш ніж рухатися далі, важливо зазначити, що пошук сітки все ще досить популярний, оскільки він гарантовано знаходить оптимум за правильно визначеної сітки. Якщо ви вирішите скористатися методом, переконайтеся, що ви трансформували свою сітку, щоб відобразити функціональну форму ваших гіперпараметрів. Наприклад, max_depth для a класифікатор випадкового лісу є цілим числом — не дозволяйте йому шукати в безперервному просторі. Також малоймовірно, що він має рівномірний розподіл — якщо ви знаєте функціональну форму свого гіперпараметра, трансформуйте сітку, щоб відобразити це.

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

1.2.2 — Випадковий пошук (добре)

Наш другий алгоритм – випадковий пошук. Випадковий пошук намагається вибрати випадкові значення в сітці, визначеній користувачем. На відміну від пошуку в сітці, ми не зобов’язані тестувати всі можливі комбінації гіперпараметрів, що підвищує ефективність.

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 3: приклад випадкового пошуку. Зображення автора.

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

Випадковий пошук є хорошою основою для оптимізації гіперпараметрів.

1.2.3 — байєсовська оптимізація (краще)

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

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 4: приклад байєсової оптимізації — SRC. Зображення автора.

Байєсовська оптимізація гіперпараметрів має на меті розробити імовірнісний розподіл нашого простору пошуку гіперпараметрів. Звідти він використовує функцію збору даних, наприклад очікуване очікуване покращення, щоб перетворити наш гіперпростір на більш «зручний для пошуку». Нарешті, він використовує алгоритм оптимізації, такий як стохастичний градієнтний спуск, щоб знайти гіперпараметри, які максимізують нашу функцію отримання. Ці гіперпараметри використовуються для відповідності нашій моделі, і процес повторюється до збіжності.

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

1.2.4 — Деревоподібні оцінювачі Parzen (найкращі)

Нарешті, давайте поговоримо про зірку шоу: деревоподібні оцінювачі Parzen (TPE). TPE – це ще один алгоритм SMBO, який зазвичай перевершує базову байєсовську оптимізацію, але головна перевага полягає в тому, що він обробляє складні зв’язки гіперпараметрів через структуру дерева.

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 5: приклад ієрархічної структури для TPE — SRC. Зображення автора.

Давайте використаємо малюнок 5, щоб зрозуміти це структура дерева. Тут ми навчаємо класифікатор Support Vector Machine (SVM). Ми будемо тестувати два ядра: linear та RBF. linear ядро не приймає параметр ширини, але RBF робить, тож за допомогою вкладеного словника ми можемо закодувати цю структуру й таким чином обмежити простір пошуку.

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

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

Загалом, TPE є дійсно надійним і ефективним рішенням для оптимізації гіперпараметрів.

Тепер, коли ми маємо загальне розуміння деяких популярних алгоритмів оптимізації гіперпараметрів, давайте глибше зануримося в те, як працює TPE.

Повертаючись до нашої аналогії, ми пірати, які шукають захований скарб але не маю карти. Нашому капітану потрібен скарб якомога швидше, тому нам потрібно копати в стратегічних місцях, де є висока ймовірність наявності скарбу, використовуючи попередні розкопки, щоб визначити місце майбутніх розкопок.

2.1 — Ініціалізація

Для початку ми визначити обмеження нашого простору. Як зазначалося вище, наші гіперпараметри часто мають функціональну форму, максимальні/мінімальні значення та ієрархічний зв’язок з іншими гіперпараметрами. Використовуючи наші знання про наші алгоритми машинного навчання та дані, ми можемо визначити простір пошуку.

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

Чудово! Тепер, коли у нас є обмежений простір пошуку та спосіб вимірювання успіху, ми готові розпочати пошук…

2.2 — Ітеративна байєсовська оптимізація

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

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

Перший трюк – моделювання P(x|y) замість P(y|x)…

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 6: умовна ймовірність, яку TPE має вирішити. Зображення автора.

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

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

З цим дуже важливим налаштуванням, давайте перейдемо до фактичного алгоритму.

2.2.1 — Розділіть наші дані на групи «Хороші» та «Погані».

Пам’ятайте, що наша мета — знайти найкращі значення гіперпараметрів відповідно до певної цільової функції. Отже, як ми можемо використовувати P(x|y) зробити це?

По-перше, TPE поділяє наші спостережувані точки даних на дві групи: добре, позначено g(x), та поганий, позначено l(x). Межа між хорошим і поганим визначається визначеним користувачем параметром гамма (γ), який відповідає процентилю цільової функції, що розділяє наші спостереження (y*).

Отже, з γ = 0.5 значення нашої цільової функції, яке розділяє наші спостереження (y*) буде медіаною наших спостережуваних точок.

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 7: розбивка p(x|y) на два набори. Зображення автора.

Як показано на малюнку 7, ми можемо формалізувати p(x|y) використовуючи наведену вище структуру. І, повторюючи аналогію з піратами…

Піратська перспектива: дивлячись на місця, які ми вже дослідили, l(x) перераховує місця з дуже невеликою кількістю скарбів, а g(x) перераховує місця з великою кількістю скарбів.

2.2.32— Розрахувати показник «перспективності».

По-друге, TPE визначає, як ми повинні оцінювати неспостережувану комбінацію гіперпараметрів через оцінка «перспективність»..

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 8: визначення показника перспективності. Зображення автора.

Рисунок 8 визначає нашу оцінку перспективності (P), що є просто співвідношенням з такими компонентами...

  • Чисельник: ймовірність спостереження набору гіперпараметрів (x), враховуючи відповідне значення цільової функції “добре».
  • Знаменник: ймовірність спостереження набору гіперпараметрів (x), враховуючи відповідне значення цільової функції “поганий».

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

Піратська перспектива: перспективність показує, наскільки ймовірно, що дане місце на нашій території матиме багато скарбів.

Швидко відволікаємося, перш ніж рухатися далі. Якщо ви знайомі з байєсовською оптимізацією, це рівняння діє як функція отримання та пропорційна Очікуване покращення (EI).

2.2.3— Створення оцінок щільності ймовірності

По-третє, TPE намагається оцінити показник «перспективності» за допомогою суміші моделей. Ідея змішаних моделей полягає в тому, щоб взяти кілька розподілів ймовірностей і об’єднати їх за допомогою лінійної комбінації — SRC. Ці комбіновані розподіли ймовірностей потім використовуються для розробки оцінок щільності ймовірностей.

Як правило, процес моделювання суміші…

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

Зверніть увагу, що цей процес виконується окремо для обох наборів l(x) та g(x).

Давайте розглянемо приклад на рисунку 9…

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Малюнок 9: приклад усічених гаусових розподілів, які відповідають 3 спостереженням гіперпараметрів. Зображення автора.

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

  • μ (мю) це середнє значення нашого нормального розподілу. Його значенням є розташування нашої точки вздовж осі х.
  • σ (сигма) це стандартне відхилення нашого нормального розподілу. Його значенням є відстань до найближчої сусідньої точки.

Якщо точки розташовані близько одна до одної, стандартне відхилення буде невеликим і, таким чином, розподіл буде дуже високим, і навпаки, якщо точки рознесені одна від одної, розподіл буде плоским (рис. 10)…

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 10: приклад впливу стандартного відхилення на форму нормального розподілу. Зображення автора.

Піратська перспектива: NA — пірати не дуже добре користуються змішаними моделями.

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

2.2.4 — Визначення наступної точки для дослідження!

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

Наш перший крок — створити функцію середньої щільності ймовірності (PDF) для обох g(x) та l(x).

Гіперпараметр гіперпараметр налаштування моделі налаштування машинного навчання data science sklearn model mllib spark hyperopt дерево parzen оцінка tpe деревоподібний parzen esimtator mlflow databricks
Рисунок 11: накладення середньої щільності ймовірності за 3 точками спостереження. Зображення автора.

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

Використовуючи середнє PDF, ми можемо отримати ймовірність будь-якого значення гіперпараметра (x) перебуваючи в g(x) or l(x).

Наприклад, припустимо, спостережувані значення на малюнку 11 належать до «хорошого» набору, g(x). Виходячи з нашого середнього PDF, малоймовірно, що значення гіперпараметра 3.9 або 0.05 належать до «хорошого» набору. І навпаки, значення гіперпараметра ~1.2, здається, дуже ймовірно належить до «хорошого» набору.

Тепер це лише половина картини. Ми застосовуємо ту саму методологію для «поганого» набору, l(x). Оскільки ми прагнемо максимізувати g(x) / l(x), де мають бути розташовані перспективні точки g(x) є високим і l(x) низький.

Досить круто, правда?

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

Піратська перспектива: наступна локація, яку ми копаємо, — це локація, яка максимізує (ймовірність мати багато скарбів) / (ймовірність мати мало скарбів).

Тепер, коли ви знаєте, як це працює, ось кілька практичних порад щодо впровадження TPE через пакет із відкритим кодом HyperOpt.

3.1 — Структура програми HyperOpt

Загалом існує три основні кроки під час використання HyperOpt…

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

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

3.2— Поради та підказки

  • HyperOpt можна розпаралелювати через обидва Apache Spark та MongoDB. Якщо ви працюєте з декількома ядрами, чи то в хмарі, чи на локальній машині, це може значно скоротити час роботи.
  • Якщо ви розпаралелюєте процес налаштування через Apache Spark, використовуйте a SparkTrialsоб’єкт для одновузлових моделей ML (sklearn) і a Trails об’єкт для паралелізованих моделей ML (MLlib). Код нижче.
  • MLflow це метод із відкритим кодом для відстеження прогонів вашої моделі. Він легко інтегрується з HyperOpt.
  • Не звужуйте простір пошуку занадто рано. Деякі комбінації гіперпараметрів можуть бути напрочуд ефективними.
  • Визначення простору пошуку може бути складним, особливо якщо ви не знаєте функціональна форма ваших гіперпараметрів. Однак з особистого досвіду TPE досить стійкий до неправильного визначення цих функціональних форм.
  • Вибір хорошої цільової функції має велике значення. У більшості випадків помилка не є рівною. Якщо певний тип помилки є більш проблематичним, обов’язково вбудуйте цю логіку у свою функцію.

3.3— Приклад коду

Ось деякий код для розподіленого запуску HyperOpt. Це було адаптовано з коду в книзі, Інженерія машинного навчання в дії — ось git репо.

Деякі приємні особливості цього фрагмента включають розпаралелювання через Apache Spark і журналювання моделі через MLflow. Також зауважте, що цей фрагмент оптимізує sklearn RandomForestRegressor — вам доведеться змінити модель і функцію підгонки відповідно до ваших потреб.

Ось і все — HyperOpt у всій красі!

Щоб закріпити надію на ключові моменти, давайте коротко підсумуємо.

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

TPE повторює наведені нижче кроки, доки не буде визначено критерій зупинки:

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

Нарешті, у нас є дійсно класний фрагмент коду, який показує, як розпаралелювати HyperOpt через SparkTrials. Він також реєструє всі наші ітерації в MLflow.

HyperOpt Demystified Перепубліковано з джерела https://towardsdatascience.com/hyperopt-demystified-3e14006eb6fa?source=rss—-7f60cf5620c9—4 через https://towardsdatascience.com/feed

<!–

->

Часова мітка:

Більше від Консультанти з блокчейнів