¿Cómo funciona el truco de reparameterization para autoencoders variacionales (VAE)? ¿Existe una explicación intuitiva y fácil sin simplificar las matemáticas subyacentes? ¿Y por qué necesitamos el 'truco'?
¿Cómo funciona el truco de reparameterization para autoencoders variacionales (VAE)? ¿Existe una explicación intuitiva y fácil sin simplificar las matemáticas subyacentes? ¿Y por qué necesitamos el 'truco'?
Respuestas:
Después de leer las diapositivas del taller NIPS 2015 de Kingma , me di cuenta de que necesitamos el truco de reparametrización para propagar hacia atrás a través de un nodo aleatorio.
Intuitivamente, en su forma original, los VAE toman muestras de un nodo aleatorio que se aproxima mediante el modelo paramétrico del verdadero posterior. Backprop no puede fluir a través de un nodo aleatorio.q ( z ∣ ϕ , x )
La introducción de un nuevo parámetro nos permite volver a parametrizar de una manera que permita que el backprop fluya a través de los nodos deterministas.z
Supongamos que tenemos una distribución normal que está parametrizada por θ , específicamente q θ ( x ) = N ( θ , 1 ) . Queremos resolver el siguiente problema min θ Esto es por supuesto un problema bastante tonto y la óptima θ es obvia. Sin embargo, aquí solo queremos entender cómo el truco de reparameterización ayuda a calcular el gradiente de este objetivo E q [ x 2 ] .
Una forma de calcular es la siguiente ∇ θ E q [ x 2 ] = ∇ θ ∫ q θ ( x ) x 2 d x = ∫ x 2 ∇ θ q θ ( x ) q θ ( x )
Para nuestro ejemplo donde , este método da ∇ θ E q [ x 2 ] = E q [ x 2 ( x - θ ) ]
El truco de reparametrización es una forma de reescribir la expectativa para que la distribución con respecto a la cual tomamos el gradiente sea independiente del parámetro . Para lograr esto, necesitamos hacer que el elemento estocástico en q sea independiente de θ . Por lo tanto, escribimos x como x = θ + ϵ , Entonces, podemos escribir E q [ x 2 ] = E p [ ( θ + ϵ ) 2 ] donde p es la distribución de ϵ , es decir, N ( 0 , 1 ) . Ahora podemos escribir la derivada de E q [ x 2 ] de la siguiente manera ∇ θ E q [ x 2 ] =
Aquí hay un cuaderno de IPython que he escrito que analiza la varianza de estas dos formas de calcular gradientes. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb
En la respuesta de Goker se da un ejemplo razonable de las matemáticas del "truco de reparameterización", pero alguna motivación podría ser útil. (No tengo permisos para comentar esa respuesta; por lo tanto, aquí hay una respuesta por separado).
, que puede estar lejos de ser óptimo (por ejemplo, un valor inicial elegido arbitrariamente). Es un poco como la historia de la persona borracha que busca sus llaves cerca de la farola (porque allí es donde puede ver / probar) en lugar de cerca de donde las dejó caer.
Espero que eso ayude.
Permítanme explicar primero, ¿por qué necesitamos el truco de reparametrización en VAE?
VAE tiene codificador y decodificador. Decodificador de muestras al azar de verdadero posterior Z ~ q (z∣ϕ, x) . Para implementar el codificador y el decodificador como una red neuronal, debe realizar una retropropagación mediante muestreo aleatorio y ese es el problema porque la retropropagación no puede fluir a través de un nodo aleatorio; Para superar este obstáculo, utilizamos el truco de reparameterización.
Ahora vamos a engañar. Dado que nuestro posterior está normalmente distribuido, podemos aproximarlo con otra distribución normal. Aproximamos Z con ε normalmente distribuido .
Pero, ¿cómo es esto relevante?
Ahora, en lugar de decir que Z se muestrea a partir de q (z∣ϕ, x) , podemos decir que Z es una función que toma el parámetro (ε, (µ, L)) y estos µ, L proviene de la red neuronal superior (codificador) . Por lo tanto, mientras que la retropropagación todo lo que necesitamos es derivadas parciales wrt µ, L y ε es irrelevante para tomar derivados.
Pensé que la explicación encontrada en el curso Stanford CS228 sobre modelos gráficos probabilísticos era muy buena. Se puede encontrar aquí: https://ermongroup.github.io/cs228-notes/extras/vae/
He resumido / copiado las partes importantes aquí por conveniencia / mi propia comprensión (aunque recomiendo encarecidamente que consulte el enlace original).
Si está familiarizado con los estimadores de la función de puntuación (creo que REINFORCE es solo un caso especial de esto), notará que ese es el problema que resuelven. Sin embargo, el estimador de la función de puntuación tiene una gran varianza, lo que genera dificultades para aprender modelos la mayor parte del tiempo.
Como ejemplo, usemos una q muy simple de la que tomamos muestras.
Esto tiene una varianza menor, por razones imo, no triviales. Consulte la parte D del apéndice aquí para obtener una explicación: https://arxiv.org/pdf/1401.4082.pdf
Tenemos nuestro modelo probablístico. Y quiere recuperar los parámetros del modelo. Reducimos nuestra tarea a la optimización del límite inferior variacional (VLB). Para hacer esto, deberíamos poder hacer dos cosas:
Los autores sugieren usar el Estimador de Monte Carlo para ambos. Y, de hecho, presentan este truco para obtener un estimador de gradiente Monte Carlo más preciso de VLB.
Es solo una mejora del método numérico.
El truco de reparameterization reduce dramáticamente la varianza del estimador MC para el gradiente. Entonces es una técnica de reducción de varianza :
Con reparametrización