HMC: Wie viele Dimensionen sind zu viele?

9

Nach dem, was ich gelesen habe, ist Hamiltonian Monte Carlo die "goto" MCMC-Methode, wenn Ihr Problem hochdimensional ist.

Wie viele Dimensionen 10, 100, 1000, 10.000, 100.000, ... sind praktisch zu viele? Die Rechenkosten werden zweifellos zu einem Problem, und ich nehme an, dass das verwendete Modell wichtig ist, aber abgesehen von diesen Dingen gibt es eine praktische Grenze für die Anzahl der Dimensionen, wenn es darum geht, gute Proben aus der gewünschten Verteilung zu erhalten HMC?

Wie können wir auch die Konvergenz (oder deren Fehlen) auf Probleme überwachen, bei denen die Anzahl der Parameter viel zu groß ist, um Trace-Plots, Laufmittel, Autokorrelationen usw. auf einzelne Parameter zu überprüfen?

Update: Dieser Beitrag wurde gefunden, in dem einige nicht visuelle Diagnosen erwähnt werden

Ryguy
quelle

Antworten:

2

Maximale Anzahl von Parametern

Es hängt sehr von der Struktur Ihres Problems ab. Zum Beispiel war meine Erfahrung mit verschiedenen hierarchischen linearen Modellen in Stan, dass es bei etwa 10 000 - 30 000 Parametern sehr langsam ist (Stunden oder Tage) (einige reproduzierbare Zahlen finden Sie in meinem Blog über Stan vs. INLA ). Bei der Arbeit mit Modellen mit gewöhnlichen Differentialgleichungen und komplexer Struktur können 10 Parameter zu viele sein. Wenn nur ein Vektor unabhängiger Normalen angepasst wird (siehe unten), benötigt Stan etwa 40 Minuten, um die 1e5-Parameter mit den Standardeinstellungen (1000-Iter-Aufwärmen, 1000-Iter-Abtastung, 4 Ketten) zu vervollständigen. Es ist also sehr wahrscheinlich, dass es sehr unpraktisch ist, mehr als 1e5 Parameter zu haben.

Der längste Teil eines Stan-Laufs ist jedoch die Aufwärmphase, in der die Hyperparameter des Algorithmus angepasst werden. Wenn Sie selbst gute Werte für diese liefern könnten (was schwierig ist), könnten Sie die Leistung möglicherweise noch weiter steigern.

Die Unterstützung von MPI für Parallelität innerhalb der Kette und das Auslagern von Matrixoperationen auf die GPU sollte Stan bald hinzugefügt werden (siehe z. B. Diskussion hier http://discourse.mc-stan.org/t/parallelization-again-mpi-to- The-Rescue / 455/11 und hier http://discourse.mc-stan.org/t/stan-on-the-gpu/326/10 ), sodass wahrscheinlich auch größere Modelle in naher Zukunft praktisch werden.

Diagnose in hoher Dimension

Die HMC-Implementierung in Stan bietet mehrere nützliche Diagnosen, die auch bei einer großen Anzahl von Parametern funktionieren: divergierende Übergänge n_eff(effektive Stichprobengröße) und Split Rhat(potenzielle Skalenreduzierung). Ausführliche Erläuterungen hierzu finden Sie im Stan-Handbuch , Abschnitt "Initialisierungs- und Konvergenzüberwachung".


R-Code für ein einfaches Modell - nur eine Reihe unabhängiger Normalen, die in der Anzahl der Parameter skaliert werden können, passen in Stan:

library(rstan)
model_code = "
data {
 int N;
}

parameters {
 vector[N] a;
}

model {
 a ~ normal(0,1);
}
"

model = stan_model(model_code = model_code)

fit_large = sampling(model, data = list(N = 1e5))
Martin Modrák
quelle