Próbuję dostroić hiperparametry algorytmu regresji procesu gaussowskiego, który zaimplementowałem. Chcę po prostu zmaksymalizować prawdopodobieństwo krańcowe dziennika podane przez formułę gdzie K jest macierzą kowariancji z elementy K_ {ij} = k (x_i, x_j) = b ^ {- 1} \ exp (- \ frac {1} {2} (x_i-x_j) ^ TM (x_i-x_j)) + a ^ {- 1 } \ delta_ {ij} gdzie M = lI oraz a, b i l są hiperparametrami.
częściowa pochodna logarytmicznych parametrów krańcowych prawdopodobieństwa wrt jest podawana przez następujący
Jako wpisy zależy od parametrów, tak jak pochodne i odwrotność . Oznacza to, że gdy wykorzystywany jest optymalizator oparty na gradiencie, ocena gradientu w danym punkcie (wartość parametru) będzie wymagała ponownego obliczenia macierzy kowariancji. W mojej aplikacji nie jest to możliwe, ponieważ obliczenie macierzy kowariancji od zera i obliczenie jej odwrotności w każdej iteracji wznoszenia gradientu jest zbyt kosztowne. Moje pytanie brzmi: jakie mam opcje, aby znaleźć dość dobrą kombinację tych trzech parametrów? i nie wiem też, który parametr najpierw zoptymalizować, i doceniłbym również wszelkie wskazówki dotyczące tego problemu.
źródło
Odpowiedzi:
Masz rację, że potrzebujesz nowego obliczenia macierzy kowariancji przy każdej iteracji wynurzania gradientu. Jeśli więc obliczenie macierzy nie jest możliwe dla twojego ustawienia, to myślę, że nie możesz użyć optymalizacji marginalnego prawdopodobieństwa opartej na gradiencie.
Moją sugestią jest stosowanie bezstratnych metod dostrajania hiperparametrów, takich jak wyszukiwanie siatki, wyszukiwanie losowe lub wyszukiwanie oparte na optymalizacji Bayesa . Metody te są szeroko stosowane do optymalizacji hiperparametrów innych algorytmów uczenia maszynowego, np. SVM.
Sugeruję wyszukiwanie siatki przy pierwszej próbie. Zasadniczo tworzysz tabelę (siatkę) możliwych hiperparametrów, wypróbowujesz każdy i szukasz najlepszej wydajności sprawdzania poprawności (lub najlepszego marginalnego prawdopodobieństwa).
Wyszukiwanie w siatce dałoby nieoptymalny zestaw hiperparametrów i musisz sam określić siatkę (wskazówka: zrób siatkę w skali logarytmicznej), ale potrzebne jest znacznie mniej obliczeń. (i nie potrzebujesz gradientu!)
Jeśli nie jesteś zaznajomiony z wyszukiwaniem siatki, możesz wyszukać Wikipedia: Hyperparameter Optimization - Grid Search
źródło