HMC: Combien de dimensions c'est trop?

9

D'après ce que j'ai lu, Hamiltonian Monte Carlo est la MCMCméthode "goto" lorsque votre problème est de grande dimension.

Concrètement, combien de dimensions 10, 100, 1 000, 10 000, 100 000, ..., c'est trop? Le coût de calcul deviendra sans aucun doute un problème et je suppose que le modèle utilisé est important à considérer, mais ces choses mises à part, y a-t-il une limite pratique au nombre de dimensions lorsqu'il s'agit d'obtenir de bons échantillons de la distribution souhaitée en utilisant HMC?

De plus, comment pouvons-nous surveiller la convergence (ou l'absence de celle-ci, je suppose) pour les problèmes où le nombre de paramètres est beaucoup trop important pour vérifier les tracés de trace, les moyens d'exécution, les autocorrélations, etc. pour les paramètres individuels?

Mise à jour: Trouvé cet article qui mentionne certains diagnostics non visuels

ryguy
la source

Réponses:

2

Nombre maximum de paramètres

Cela dépend beaucoup de la structure de votre problème. Par exemple, mon expérience avec divers modèles linéaires hiérarchiques dans Stan était qu'elle commence à être très lente (heures ou jours pour terminer) à environ 10000 à 30000 params (certains nombres reproductibles sont sur mon blog sur Stan vs INLA ). Lorsque vous travaillez avec des modèles impliquant des équations différentielles ordinaires et une structure complexe, 10 paramètres peuvent être trop nombreux. Lors de l'ajustement d'un vecteur de normales indépendantes (voir ci-dessous), Stan prend environ 40 minutes pour compléter les paramètres 1e5, en utilisant les paramètres par défaut (1000 iter warmup, 1000 iter échantillonnage, 4 chaînes). Donc, avoir beaucoup plus de 1e5 paramètres est très probablement impraticable.

La partie la plus longue d'une exécution de Stan est cependant la phase d'échauffement lorsque les hyperparamètres de l'algorithme sont modifiés. Si vous pouvez fournir vous-même de bonnes valeurs (ce qui est difficile), vous pourrez peut-être pousser les performances encore plus loin.

En outre, le support de MPI pour le parallélisme intra-chaîne et le déchargement des opérations matricielles vers le GPU devrait être ajouté à Stan bientôt (voir par exemple la discussion ici http://discourse.mc-stan.org/t/parallelization-again-mpi-to- the-rescue / 455/11 , et ici http://discourse.mc-stan.org/t/stan-on-the-gpu/326/10 ) donc des modèles encore plus grands deviendront probablement pratiques dans un avenir proche.

Diagnostic en haute dimension

L'implémentation de la console HMC dans Stan fournit plusieurs diagnostics utiles qui fonctionnent même avec un grand nombre de paramètres: transitions divergentes, n_eff(taille effective de l'échantillon) et fractionnée Rhat(réduction d'échelle potentielle). Voir le manuel de Stan , section "Initialisation et surveillance de la convergence" pour une explication détaillée de ceux-ci.


Code R pour un modèle simple - juste un ensemble de normales indépendantes qui peuvent évoluer dans le nombre de paramètres, tenir dans 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
la source