# CMA-ES w Optuna: krok po kroku analiza strategii ewolucyjnej optymalizacji hiperparametrów
Algorytm CMA-ES to metoda optymalizacji bez pochodnych, efektywnie rozwiązująca zadania doboru hiperparametrów w złożonych, multimodalnych lub zaszumionych przestrzeniach. W przeciwieństwie do podejść gradientowych, nie wymaga różniczkowalności funkcji celu i jest odporny na minima lokalne. W tym artykule przeanalizujemy jego działanie na przykładzie dwuwymiarowej funkcji Rosenbrocka, aby naocznie pokazać, jak algorytm adaptuje krok i kierunek wyszukiwania.
Inicjalizacja: początkowe warunki wyszukiwania
Przed rozpoczęciem pracy CMA-ES należy ustawić trzy kluczowe parametry:
- Średnia początkowa (m) — współrzędne punktu startowego w przestrzeni wyszukiwania. W naszym przypadku — (0, -1).
- Macierz kowariancji (C) — określa kształt i orientację obszaru wyszukiwania. Początkowo jest to macierz jednostkowa, co tworzy symetrię kołową wokół centrum.
- Globalny krok (σ) — skala wyszukiwania. Ustawiony na 0.8, co odpowiada promieniowi elipsy ufności ≈1.96 dla 95% prawdopodobieństwa trafienia punktów.
Te parametry tworzą początkowe rozkład normalne, z którego generowane będą kandydaci. Ważne: nawet jeśli punkt początkowy jest daleki od optimum, algorytm potrafi się dostosować dzięki mechanizmom ewolucyjnym.
Generowanie i ocena kandydatów
Na każdej iteracji generowanych jest λ kandydatów (w przykładzie — 15) według wzoru:
x_k ~ m + σ · N(0, C)
gdzie N(0, C) — wielowymiarowe rozkład normalne o zerowej średniej i macierzy kowariancji C. Każdy kandydat to zestaw hiperparametrów, który jest podawany do modelu w celu oceny funkcji celu (np. loss). Po obliczeniu wartości funkcji wybierane są μ najlepszych kandydatów (w przykładzie — 7), które stanowią podstawę do aktualizacji rozkładu.
Aktualizacja centrum wyszukiwania za pomocą średniej ważonej
Centrum nowego rozkładu obliczane jest jako ważona suma najlepszych punktów:
m_new = Σ w_i · x_i
Wagi w_i obliczane są na skali logarytmicznej:
w_i = [ln((λ+1)/2) - ln(i)] / Σ[ln((λ+1)/2) - ln(j)]
To zapewnia wykładniczo większy wkład najlepszych kandydatów. Na przykład pierwsza punkt otrzymuje wagę kilka razy wyższą niż siódmy. Takie podejście imituje „dobór naturalny”: udane rozwiązania silniej wpływają na kolejne pokolenie.
Adaptacja kształtu i skali wyszukiwania
Kluczową zaletą CMA-ES jest dynamiczna adaptacja do topologii funkcji celu. Osiąga się to za pomocą dwóch mechanizmów:
Aktualizacja macierzy kowariancji
Wzór aktualizacji:
C_new = (1 - c_μ) · C_old + c_μ · C_μ
gdzie C_μ — macierz kowariancji zbudowana na podstawie znormalizowanych przesunięć najlepszych punktów względem starego centrum. Parametr c_μ (learning rate, np. 0.9) kontroluje równowagę między historią a nowymi danymi. Jeśli najlepsze punkty układają się wzdłuż określonego kierunku (np. wzdłuż „doliny” funkcji Rosenbrocka), macierz C deformuje obszar wyszukiwania w elipsę wydłużoną w tym kierunku — co przyspiesza zbieżność.
Korekta globalnego kroku (σ)
Krok aktualizowany jest według wzoru:
σ_new = σ_old · exp( (c_σ / d_σ) · (||p_σ|| / E[||N(0,I)||] - 1) )
Tutaj:
p_σ— ścieżka ewolucyjna, akumulująca kierunek ruchu centrum przez kilka iteracji.E[||N(0,I)||]— referencyjna długość losowego kroku (≈√n dla n-wymiarowej przestrzeni).c_σ,d_σ— parametry szybkości uczenia i tłumienia.
Jeśli norma ||p_σ|| przekracza referencję, oznacza to ruch sekwencyjny w jednym kierunku — krok jest zwiększany. Jeśli jest niższa — ruch jest chaotyczny, krok zmniejszany dla precyzyjniejszego pozycjonowania.
Zalety i ograniczenia CMA-ES w praktyce ML
CMA-ES jest szczególnie przydatny w następujących scenariuszach:
- Funkcja celu jest nieróżniczkowalna, zaszumiona lub ma przerwy.
- Przestrzeń wyszukiwania zawiera wiele minimów lokalnych.
- Hiperparametry mają różną wrażliwość (np. learning_rate vs. batch_size).
Jednak istnieją ograniczenia:
- Złożoność obliczeniowa rośnie z wymiarowością przestrzeni (O(n²) z powodu przechowywania C).
- Wymaga więcej iteracji w porównaniu z TPE na gładkich funkcjach.
- Nieskuteczny przy bardzo małym budżecie ocen (< 20).
Zalecenia dotyczące użycia w Optuna:
- Zaczynaj od
CmaEsSamplerdla zadań z >5 hiperparametrami lub skomplikowanym krajobrazem. - Ustaw
restart_strategy='ipop'dla automatycznego restaru z zwiększonym σ przy utknięciu. - Dla parametrów dyskretnych użyj
CategoricalCmaEsSampler. - Zawsze porównuj z TPE i RandomSearch na zbiorze kontrolnym.
Co ważne
- CMA-ES nie używa gradientów — działa z dowolną czarną skrzynką.
- Adaptacja macierzy kowariancji pozwala efektywnie poruszać się wzdłuż „doliny” funkcji celu.
- Dynamiczny krok zapobiega przedwczesnej zbieżności i przyspiesza ostateczne doprecyzowanie.
- Najlepiej sprawdza się przy średniej i dużej liczbie iteracji (>50) oraz w przestrzeniach wysokiej wymiarowości.
- W Optuna łatwo się podłącza przez zmianę samplera — nie wymaga modyfikacji kodu modelu.
Algorytm jest szczególnie cenny w zadaniach, gdzie standardowe metody (np. grid search czy Bayesian optimization) napotykają problemy: niestabilność metryk, skomplikowane interakcje parametrów, brak gładkości. Jego ewolucyjna natura czyni go odpornym i uniwersalnym narzędziem dla badaczy pracujących z rzeczywistymi, „brudnymi” zadaniami ML.
— Editorial Team
Brak komentarzy.