04 · Ocena · 4 min czytania · aktualizacja
Jak stroić hiperparametry modelu: grid search, random search czy optymalizacja bayesowska?
W skrócie
Strojenie hiperparametrów to wybór ustawień modelu, których algorytm nie uczy się sam, na podstawie walidacji. Wynik zwycięzcy jest zawsze nieco zawyżony.
Co to jest
Strojenie hiperparametrów (hyperparameter tuning) to wybór ustawień modelu, które nie są uczone z danych przez sam algorytm, lecz ustalane przed treningiem: siły regularyzacji, głębokości drzew, współczynnika uczenia, liczby warstw, parametrów jądra. Polega na wytrenowaniu wielu wariantów modelu, ocenie każdego na danych walidacyjnych (najczęściej walidacją krzyżową) i wybraniu najlepszego.
Parametry (wagi sieci, współczynniki regresji) ustala optymalizacja na zbiorze treningowym. Hiperparametry sterują tym, jak ta optymalizacja przebiega i jak elastyczny jest model. Nie można ich wybrać na treningu, bo na treningu zawsze wygrywa najbardziej złożony wariant — stąd potrzeba walidacji.
Mechanizm — dlaczego tak działa
Strojenie to optymalizacja „czarnej skrzynki”: funkcja celu (wynik walidacyjny) jest kosztowna do policzenia, zaszumiona i nie ma gradientu. Trzy główne strategie różnią się tym, jak wybierają kolejne punkty do sprawdzenia.
Przeszukiwanie siatki (grid search) sprawdza wszystkie kombinacje z ustalonych list wartości. Jest proste i powtarzalne, ale koszt rośnie wykładniczo z liczbą hiperparametrów. Przeszukiwanie losowe (random search) losuje kombinacje z zadanych rozkładów. Bergstra i Bengio pokazali, dlaczego zwykle wygrywa przy tym samym budżecie: w praktyce tylko kilka hiperparametrów naprawdę ma znaczenie, a siatka marnuje próby na powtarzanie tych samych wartości ważnego parametru przy zmianach nieważnego. Losowanie daje przy n próbach n różnych wartości każdego parametru. Optymalizacja bayesowska (np. TPE w Optuna, procesy gaussowskie) buduje model zastępczy funkcji celu i wybiera punkty obiecujące lub niezbadane; opłaca się, gdy jeden trening trwa długo. Metody wielowierności (successive halving, Hyperband) szybko odrzucają słabe konfiguracje, trenując je na małym budżecie.
Kluczowe zastrzeżenie: wynik najlepszej konfiguracji jest obciążony optymistycznie. Każdy wynik walidacyjny to prawdziwa jakość plus szum; wybierając maksimum spośród wielu prób, wybieramy też najkorzystniejszy szum. Im więcej konfiguracji i im mniej danych, tym większe zawyżenie. Cawley i Talbot pokazali, że może ono być porównywalne z różnicami między algorytmami. Uczciwą ocenę daje osobny zbiór testowy albo zagnieżdżona walidacja krzyżowa: pętla zewnętrzna ocenia całą procedurę „strój + trenuj”, pętla wewnętrzna wybiera hiperparametry.
Nie każdy hiperparametr wymaga strojenia. Wartości domyślne w dojrzałych bibliotekach bywają rozsądne, a poprawne przygotowanie danych (np. skalowanie cech) często daje więcej niż najdokładniejsze przeszukiwanie.
Na przykładzie
Na zbiorze Wine (178 win, 3 odmiany) stroiłem SVM z jądrem RBF i standaryzacją cech, przeszukując siatkę 5 wartości C (0,01–100) × 4 wartości gamma (0,001–1) z 5-krotną warstwową CV (GridSearchCV, random_state=0). Najlepsza kombinacja, C = 1 i gamma = 0,01, dała 98,9% trafności. Siatka pokazuje, jak różne bywają konfiguracje: przy C = 0,01 każda gamma daje 39,9% — model przewiduje zawsze najliczniejszą klasę — a przy C = 1 i gamma = 1 tylko 59,6%. Przeszukiwanie losowe z 20 próbami z rozkładów log-jednostajnych znalazło C ≈ 2,8 i gamma ≈ 0,07 z tym samym wynikiem 98,9%.
Zagnieżdżona walidacja krzyżowa (zewnętrzne 5 foldów z innym ziarnem) oceniła całą procedurę strojenia na 98,3% — nieco mniej niż 98,9% zwycięzcy, zgodnie z mechanizmem selekcji. Najciekawsze jest jednak porównanie z punktem wyjścia: SVM z domyślnymi ustawieniami, ale po standaryzacji, miał w tych samych foldach 98,9%, a bez standaryzacji (5-krotna warstwowa CV) tylko 65,7%. Na tym zbiorze przygotowanie danych zdecydowało o wszystkim, a strojenie praktycznie nic nie dodało.
Dane: Wine (wina z Piemontu)
W praktyce
GridSearchCV(pipe, param_grid, cv=5, scoring=..., n_jobs=-1)iRandomizedSearchCV(pipe, param_distributions, n_iter=50); rozkłady log-jednostajne:scipy.stats.loguniform(1e-3, 1e2).- Zawsze stroj cały
Pipeline(nazwy parametrów z prefiksem kroku, np.svc__C), by przetwarzanie nie widziało foldów walidacyjnych. - Dla kosztownych modeli:
HalvingGridSearchCV/HalvingRandomSearchCV(wymagająfrom sklearn.experimental import enable_halving_search_cv) albo biblioteka Optuna. - Uczciwa ocena:
cross_val_score(GridSearchCV(...), X, y, cv=outer)— zagnieżdżona CV; albo osobny test oceniony raz. - W sieciach neuronowych najważniejszy jest zwykle współczynnik uczenia; stroi się go w skali logarytmicznej, zanim zajmiesz się resztą.
- Typowy błąd: dziesiątki rund strojenia z oceną na tym samym zbiorze testowym — test staje się zbiorem walidacyjnym.
Najczęstsze pytania
- Grid search czy random search?
- Przy jednym lub dwóch hiperparametrach siatka jest w porządku i łatwa do zwizualizowania. Przy trzech i więcej przeszukiwanie losowe zwykle znajduje równie dobre lub lepsze konfiguracje przy mniejszym budżecie, a do tego łatwo je przerwać i wznowić.
- Ile prób wystarczy w random search?
- Często cytowany argument: przy 60 losowych próbach z prawdopodobieństwem około 95% przynajmniej jedna trafi do najlepszych 5% przestrzeni (1 − 0,95⁶⁰ ≈ 0,95). Nie gwarantuje to jednak dobrego wyniku, jeśli te najlepsze 5% obejmują słabe modele albo zakresy są źle ustawione.
- Czy po strojeniu trzeba trenować model jeszcze raz?
- Tak — z wybranymi hiperparametrami na wszystkich danych treningowych. `GridSearchCV` robi to automatycznie (`refit=True`), a gotowy model jest w `best_estimator_`.
Źródła
- Bergstra J., Bengio Y. (2012). Random Search for Hyper-Parameter Optimization. Journal of Machine Learning Research, 13.
- Cawley G. C., Talbot N. L. C. (2010). On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation. Journal of Machine Learning Research, 11.
- Snoek J., Larochelle H., Adams R. P. (2012). Practical Bayesian Optimization of Machine Learning Algorithms. Advances in Neural Information Processing Systems 25.
- Akiba T., Sano S., Yanase T., Ohta T., Koyama M. (2019). Optuna: A Next-generation Hyperparameter Optimization Framework. Proceedings of KDD 2019.
- Dokumentacja scikit-learn: Tuning the hyper-parameters of an estimator — https://scikit-learn.org/stable/modules/grid_search.html