Знайомство з Random Search

Тюнінг гіперпараметрів у Python

Alex Scriven

Data Scientist

Що ви вже знаєте

 

Дуже схоже на grid search:

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

 

АЛЕ замість цього ми випадково обираємо клітинки сітки.

Тюнінг гіперпараметрів у Python

Чому це працює?

Bengio & Bergstra (2012):

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

Дві головні причини:

  1. Не кожен гіперпараметр однаково важливий
  2. Невелика «хитрість» імовірності
Тюнінг гіперпараметрів у Python

Хитрість імовірності

Grid search:

10x10 of different models

Скільки моделей треба запустити, щоб із 95% імовірністю потрапити в одну із зелених клітинок?

Наші найкращі моделі:

10x10 of different models

Тюнінг гіперпараметрів у Python

Хитрість імовірності

 

Якщо ми рівномірно випадково обираємо комбінації гіперпараметрів, розгляньмо шанс ПРОМАХНУТИСЯ кожного разу, щоб показати, наскільки це малоймовірно

  • Спроба 1 = 0,05 шанс успіху та (1 - 0,05) шанс промаху

    • Спроба 2 = (1-0,05) × (1-0,05) шанс промахнутися знову
      • Спроба 3 = (1-0,05) × (1-0,05) × (1-0,05) шанс знову промахнутися
  • Взагалі, для n спроб маємо (1-0,05)^n імовірність, що кожна спроба омине бажану зону.

Тюнінг гіперпараметрів у Python

Хитрість імовірності

 

То скільки спроб потрібно, щоб мати високий (95%) шанс потрапити в ту ділянку?

  • Маємо (1-0,05)^n шанс усе прогаяти.
  • Отже, шанс потрапити туди дорівнює (1 - прогаяти все), тобто (1-(1-0,05)^n)
  • Розв'язок 1-(1-0,05)^n >= 0,95 дає n >= 59
Тюнінг гіперпараметрів у Python

Хитрість імовірності

 

Що це означає?

  • Малоймовірно довго повністю промахуватися повз «хорошу зону», випадково обираючи точки
  • Grid search може витратити багато часу в «поганій зоні», вичерпно її покриваючи.
Тюнінг гіперпараметрів у Python

Декілька важливих зауважень

 

Пам'ятайте:

  1. Максимум все одно залежить від обраної вами сітки!

  2. Щоб коректно порівняти з grid search, потрібно мати однаковий «бюджет» моделювання

Тюнінг гіперпараметрів у Python

Створення випадкової вибірки гіперпараметрів

Можемо створити власну випадкову вибірку комбінацій гіперпараметрів:

# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in 
                    product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
                            range(0,len(combinations_list)), 100, 
                            replace=False)
combinations_random_chosen = [combinations_list[x] for x in 
                            random_combinations_index]
Тюнінг гіперпараметрів у Python

Візуалізація Random Search

Можемо також візуалізувати покриття random search, наносячи вибрані гіперпараметри на осі X та Y.

random search coverage graph

Зверніть увагу: розкид широкий, але глибокого покриття немає.

Тюнінг гіперпараметрів у Python

Давайте потренуємось!

Тюнінг гіперпараметрів у Python

Preparing Video For Download...