Wprowadzenie do losowego przeszukiwania

Strojenie hiperparametrów w Pythonie

Alex Scriven

Data Scientist

Co już wiesz

 

Bardzo podobnie jak przeszukiwanie siatką:

  • Definiujemy estymator, hiperparametry do strojenia oraz zakresy ich wartości.
  • Nadal ustalamy schemat walidacji krzyżowej i funkcję oceny.

 

Jednak zamiast tego losowo wybieramy pola siatki.

Strojenie hiperparametrów w Pythonie

Dlaczego to działa?

Bengio & Bergstra (2012):

Praca ta pokazuje empirycznie i teoretycznie, że losowo wybrane próby są efektywniejsze w optymalizacji hiperparametrów niż przeszukiwanie siatką.

Dwa główne powody:

  1. Nie każdy hiperparametr jest jednakowo istotny.
  2. Pewna sztuczka probabilistyczna.
Strojenie hiperparametrów w Pythonie

Sztuczka probabilistyczna

Przeszukiwanie siatką:

siatka 10x10 różnych modeli

Ile modeli trzeba uruchomić, aby z prawdopodobieństwem 95% trafić w jedno z zielonych pól?

Nasze najlepsze modele:

siatka 10x10 różnych modeli

Strojenie hiperparametrów w Pythonie

Sztuczka probabilistyczna

 

Jeśli losujemy kombinacje hiperparametrów równomiernie, rozważmy prawdopodobieństwo OMINIĘCIA pożądanego obszaru we wszystkich próbach:

  • Próba 1: szansa sukcesu 0,05, ominięcia (1-0,05).

    • Próba 2: (1-0,05) x (1-0,05) szans na ominięcie.
      • Próba 3: (1-0,05) x (1-0,05) x (1-0,05) szans na ominięcie.
  • Przy n próbach szansa ominięcia pożądanego miejsca we wszystkich wynosi (1-0,05)^n.

Strojenie hiperparametrów w Pythonie

Sztuczka probabilistyczna

 

Ile prób potrzeba, aby z prawdopodobieństwem 95% trafić w ten obszar?

  • Prawdopodobieństwo ominięcia go we wszystkich próbach wynosi (1-0.05)^n.
  • Prawdopodobieństwo trafienia wynosi więc (1-(1-0.05)^n).
  • Rozwiązanie 1-(1-0.05)^n >= 0.95 daje n >= 59.
Strojenie hiperparametrów w Pythonie

Sztuczka probabilistyczna

 

Co z tego wynika?

  • Przy losowym wyborze punktów mało prawdopodobne jest długotrwałe omijanie „dobrego obszaru".
  • Przeszukiwanie siatką może marnować czas w „złym obszarze", pokrywając go wyczerpująco.
Strojenie hiperparametrów w Pythonie

Ważne uwagi

 

Pamiętaj:

  1. Maksimum jest ograniczone przez zdefiniowaną siatkę!

  2. Aby uczciwie porównać metodę z przeszukiwaniem siatką, należy zachować ten sam budżet obliczeniowy.

Strojenie hiperparametrów w Pythonie

Tworzenie losowej próby hiperparametrów

Można ręcznie utworzyć losową próbę kombinacji hiperparametrów:

# 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]
Strojenie hiperparametrów w Pythonie

Wizualizacja losowego przeszukiwania

Zasięg losowego przeszukiwania można zwizualizować, nanosząc wybrane hiperparametry na osie X i Y.

wykres zasięgu losowego przeszukiwania

Widoczny jest szeroki zakres rozproszenia, ale bez głębokiego pokrycia.

Strojenie hiperparametrów w Pythonie

Czas na ćwiczenia!

Strojenie hiperparametrów w Pythonie

Preparing Video For Download...