6 votos

¿Cómo establecer el tamaño de los pasos en el Monte Carlo Hamiltoniano?

Estoy usando Hamiltonian Monte Carlo (HMC) aplicación en Edward una biblioteca de programación probabilística construida sobre TensorFlow. Uno de los hiperparámetros de HMC es el tamaño del paso:

inference = ed.HMC({w: qw, b: qb}, data={X: X_train, y: y_train})
inference.initialize(step_size=0.5/float(N))

Sé que hay una versión adaptativa del algoritmo: el Muestreo sin giro (NUTS) . Sin embargo, me pregunto cómo inicializar el tamaño del paso en el caso de HMC.

8voto

PoorPhil Puntos 21

Hay una sección en el Manual de Radford Neal sobre HMC en la que se explica cómo establecer la longitud de discretización $\epsilon$ y el número de pasos de salto $L$ adecuadamente: http://www.mcmchandbook.net/HandbookChapter5.pdf .

Aquí puedo resumir los puntos clave:

La distancia total recorrida es $\epsilon L$ por lo que hay que tener en cuenta ambas cosas.

Configuración $\epsilon$ :

  • La razón por la que se rechazan las propuestas en HMC se debe puramente a un error de discretización (de lo contrario, la dinámica preserva perfectamente la densidad de probabilidad/energía).

  • Si $\epsilon$ es demasiado grande, entonces habrá un gran error de discretización y una baja aceptación, si $\epsilon$ es demasiado pequeño, entonces se necesitarán pasos de salto más costosos para recorrer grandes distancias.

  • Lo ideal es que queramos el mayor valor posible de $\epsilon$ que da una probabilidad de aceptación razonable. Lamentablemente, esto puede variar para diferentes valores de la variable objetivo.

  • Una heurística simple para establecer esto puede ser hacer una ejecución preliminar con $L$ , aumentando gradualmente $\epsilon$ hasta que la probabilidad de aceptación esté en un nivel adecuado.

Configuración $L$ :

Dice Neal:

"Por lo tanto, parece necesario fijar la longitud de la trayectoria por ensayo y error. Para un problema que se considera bastante difícil, una trayectoria con L = 100 podría ser un punto de partida adecuado. Si las ejecuciones preliminares (con un valor adecuado; véase más arriba) muestran que HMC alcanza un punto casi independiente punto casi independiente después de una sola iteración, un valor más pequeño de L podría ser probado a continuación. (A menos que (A menos que estas ejecuciones "preliminares" sean realmente suficientes, en cuyo caso no es necesario, por supuesto, hacer más ejecuciones). hacer más ejecuciones). Si, por el contrario, hay una alta autocorrelación en la ejecución con L = 100, las ejecuciones con L = 1000 podrían probarse a continuación".

También puede ser aconsejable tomar una muestra aleatoria $\epsilon$ y $L$ formar rangos adecuados para evitar la posibilidad de tener trayectorias cercanas a las periódicas, ya que esto ralentizaría la mezcla.

0 votos

Hay un artículo interesante que combina una red neuronal simple con HMC para resolver algunas de las heurísticas asociadas al algoritmo: arxiv.org/abs/1711.09268

0 votos

Eso es cierto, pero mi experiencia con él ha sido que el tiempo de entrenamiento del muestreador es a menudo un cuello de botella y tratar de obtener el programa correcto de hiperparámetros/temperatura de recocido para el muestreador aprendido es complicado. Sigo pensando que NUTS, que está implementado en STAN, puede ser el camino correcto si no quieres afinar estos parámetros.

0 votos

@R.Habib; Neal dijo que paso a paso $\epsilon$ debe escalarse como $d^{1/4}$ donde $d$ es la dimensión pero parece que no mencionó nada sobre cómo escalar la longitud de la trayectoria

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X