Algorytm Hybrid Monte Carlo (HMC)
Hybrid Monte Carlo (ang. Hybrid Monte Carlo, HMC), zwany także Hamiltonian Monte Carlo (HMC), to metoda numeryczna służąca do generowania próbek z rozkładów prawdopodobieństwa o wysokiej wymiarowości. Łączy ona techniki łańcucha Markowa Monte Carlo (MCMC) z metodami symulacji dynamiki Hamiltona, co pozwala na efektywniejsze przeszukiwanie przestrzeni parametrów niż tradycyjne algorytmy Metropolisa‑Hastingsa.
Historia
Algorytm został opracowany w 1987 roku przez Simona Duane, Allana Kennedy'ego, Briana Pendletona i Durhama Rowetha w kontekście symulacji w sieciowej kwantowej chromodynamice. Od tego czasu HMC stał się podstawowym narzędziem w fizyce statystycznej, wnioskowaniu Bayesowskim oraz w uczeniu maszynowym.
Podstawowe pojęcia
- Hamiltonian – funkcja opisująca całkowitą energię układu (suma energii kinetycznej i potencjalnej).
- Symplecticzny integrator – metoda numeryczna zachowująca strukturę symplektyczną równań Hamiltona, najczęściej używany jest leapfrog (skok).
- MCMC – zbiór technik generujących łańcuch Markowa o zadanym rozkładzie stacjonarnym.
- Metropolis – akceptacja/odrzucenie propozycji w ramach łańcucha Markowa, zapewniająca szczegółowość równowagi szczegółowej.
Zasada działania
Algorytm HMC działa w trzech głównych etapach:
- Losowanie zmiennych pomocniczych – dla każdego wymiaru parametru θ losuje się wektor pędów p ze standardowego rozkładu normalnego
N(0, I). - Symulacja dynamiki Hamiltona – przy użyciu wybranego integratora sympletycznego (np. metodą leapfrog) wykonuje się L kroków o długości ε, co generuje propozycję (θ', p') w przestrzeni fazowej.
- Akceptacja propozycji – zgodnie z regułą Metropolisa akceptuje się nowe położenie θ' z prawdopodobieństwem
α = min{1, exp[H(θ, p) - H(θ', p')]},
gdzie H oznacza Hamiltonian układu. W przeciwnym razie pozostaje się przy poprzedniej wartości θ.
Po akceptacji (lub odrzuceniu) wektor pędów jest odrzucany, a proces rozpoczyna się od nowego losowego pędu, co zapewnia właściwość ergodyczności.
Formalny opis algorytmu
1. Zainicjuj stan θ₀.
2. Dla każdych iteracji t = 1,2,…:
a) Wylosuj p_t ∼ N(0, I).
b) Ustaw (θ, p) ← (θ_{t‑1}, p_t).
c) Wykonaj L kroków sympletycznego integratora:
i) p ← p - (ε/2)·∇_θ U(θ) (połowa kroku pędu)
ii) θ ← θ + ε·M^{‑1}p (krok położenia)
iii) p ← p - (ε/2)·∇_θ U(θ) (druga połowa kroku pędu)
d) Oblicz α = min{1, exp[H(θ_{t‑1}, p_t) - H(θ, p)]}.
e) Z akceptuj θ z prawdopodobieństwem α, w przeciwnym wypadku przyjmij θ_t = θ_{t‑1}.
3. Zwróć zebrane próbki {θ_t}.
W powyższym zapisie U(θ) = -log π(θ) jest potencjalną energią (ujemny logarytm docelowego rozkładu), a M – macierz mas (zazwyczaj przyjmowaną za tożsamość).
Zalety i wady
| Zalety | Wady |
|---|---|
|
|
Warianty i ulepszenia
W praktyce stosuje się liczne modyfikacje algorytmu:
- No‑U‑Turn Sampler (NUTS) – adaptacyjny wybór długości trajektorii, eliminujący potrzebę ręcznego strojenia L.
- Adaptacyjne skalowanie ε (np. metodą dual averaging) w fazie „warm‑up”.
- Użycie Riemannian Manifold HMC (RM‑HMC), w którym macierz mas M zależy od położenia, co lepiej dostosowuje się do lokalnych krzywizn rozkładu.
- Implementacje w językach Python (
PyMC3,TensorFlow Probability) oraz Stan, które automatyzują obliczenia gradientów przy użyciu automatycznej różniczkowania.
Zastosowania
Algorytm HMC znajduje szerokie zastosowanie w różnych dziedzinach:
- Analiza Bayesowska – wyznaczanie posteriorów w modeli o dużej liczbie parametrów.
- Fizyka statystyczna – symulacje układów many‑body, modelowanie pól kwantowych.
- Uczenie maszynowe – optymalizacja modeli probabilistycznych, np. VAE z rozkładami posteriorów próbkowanymi metodą HMC.
- Chemia obliczeniowa – badanie powierzchni potencjału i dynamiki molekularnej.
Implementacje w open‑source
Popularne biblioteki udostępniające gotowe implementacje HMC:
- Stan – język i środowisko statystyczne z auto‑differentiacją.
- PyMC3 i PyMC4 – biblioteki w Pythonie wspierające NUTS.
- TensorFlow Probability – integracja z ekosystemem TensorFlow.
- JAX – pozwala na bardzo szybkie symulacje HMC dzięki kompilacji just‑in‑time.
Podsumowanie
Hybrid Monte Carlo (Hamiltonian Monte Carlo) to potężny algorytm łączący zalety metod Monte Carlo i symulacji dynamiki Hamiltona. Dzięki wykorzystaniu gradientów oraz sympletycznych integratorów umożliwia szybkie i efektywne generowanie próbek z złożonych, wysokowymiarowych rozkładów prawdopodobieństwa. Pomimo konieczności obliczania pochodnych i wrażliwości na parametry implementacji, HMC pozostaje jednym z najważniejszych narzędzi w nowoczesnej statystyce bayesowskiej, fizyce i uczeniu maszynowym.