Kiedy koduję symulację Monte Carlo dla jakiegoś problemu, a model jest dość prosty, używam bardzo prostego podręcznika Gibbs. Kiedy nie jest możliwe użycie próbkowania Gibbsa, koduję podręcznik Metropolis-Hastings, którego nauczyłem się wiele lat temu. Zastanawiam się nad wyborem rozkładu skoków lub jego parametrów.
Wiem, że istnieją setki specjalistycznych metod, które udoskonalają te opcje podręczników, ale zwykle nigdy nie myślę o ich użyciu / nauce. Zwykle wydaje się, że to zbyt duży wysiłek, aby nieco poprawić to, co już działa bardzo dobrze.
Ale ostatnio zastanawiałem się, czy może nie ma nowych ogólnych metod, które mogłyby poprawić to, co robiłem. Minęło wiele dekad od odkrycia tych metod. Może jestem naprawdę przestarzały!
Czy są jakieś dobrze znane alternatywy dla Metropolis-Hastings, które są:
- dość łatwe do wdrożenia,
- tak uniwersalne, jak MH,
- i zawsze poprawia wyniki MH w pewnym sensie (wydajność obliczeniowa, dokładność itp.)?
Wiem o kilku bardzo specjalistycznych ulepszeniach bardzo wyspecjalizowanych modeli, ale czy są jakieś ogólne rzeczy, których wszyscy używają, których nie znam?
źródło
Odpowiedzi:
Nie jestem ekspertem w żadnym z nich, ale pomyślałem, że i tak je tam opublikuję, aby zobaczyć, co myśli społeczność. Korekty są mile widziane.
Jedną z coraz bardziej popularnych metod, która nie jest zbyt łatwa do wdrożenia, jest Hamiltonian Monte Carlo (lub czasami Hybrid Monte Carlo). Wykorzystuje model fizyczny z potencjałem i energią kinetyczną do symulacji kuli toczącej się wokół przestrzeni parametrów, jak opisano w tym artykule Radforda Neala. Model fizyczny wymaga sporej ilości zasobów obliczeniowych, więc często otrzymujesz znacznie mniej aktualizacji, ale aktualizacje są zwykle mniej skorelowane. HMC jest motorem nowego oprogramowania STAN , które jest opracowywane jako bardziej wydajna i elastyczna alternatywa dla BUGS lub JAGS do modelowania statystycznego.
Istnieje również cała gama metod obejmujących „rozgrzanie” łańcucha Markowa, o których można pomyśleć jako wprowadzanie szumu termicznego do modelu i zwiększanie szans na próbkowanie stanów o niskim prawdopodobieństwie. Na pierwszy rzut oka wydaje się to złym pomysłem, ponieważ chcesz, aby model próbkował proporcjonalnie do prawdopodobieństwa z tyłu. Ale w rzeczywistości używasz tylko stanów „gorących”, aby lepiej wymieszać łańcuch. Rzeczywiste próbki są pobierane tylko wtedy, gdy łańcuch ma „normalną” temperaturę. Jeśli zrobisz to poprawnie, możesz użyć rozgrzanych łańcuchów, aby znaleźć tryby, do których zwykły łańcuch nie byłby w stanie dostać się z powodu dużych dolin o niskim prawdopodobieństwie blokujących przejście z trybu na tryb. Kilka przykładów tych metod to MCMC sprzężone z Metropolis ,, równoległe odpuszczanie i wyżarzanie próbek o wyższym znaczeniu .
Wreszcie możesz zastosować sekwencyjne Monte Carlo lub filtrowanie cząstek, gdy współczynnik odrzucenia byłby tak wysoki, że wszystkie inne metody zawiodłyby. Wiem najmniej o tej rodzinie metod, więc mój opis może być tutaj niepoprawny , ale rozumiem, że tak to działa. Zaczynasz od uruchomienia swojego ulubionego samplera, mimo że szanse na odrzucenie są w zasadzie jedne. Zamiast odrzucać wszystkie próbki, wybierasz najmniej budzące zastrzeżenia i inicjujesz stamtąd nowe samplery, powtarzając proces, aż znajdziesz próbki, które możesz zaakceptować. Potem wracasz i poprawiasz fakt, że twoje próbki były nielosowe, ponieważ nie zainicjalizowałeś samplerów z przypadkowych lokalizacji.
Mam nadzieję że to pomoże.
źródło