57 votos

cómo ponderar la pérdida KLD frente a la pérdida de reconstrucción en el autocodificador variacional

En casi todos los ejemplos de código que he visto de un VAE, las funciones de pérdida se definen de la siguiente manera (este es el código de tensorflow, pero he visto similar para theano, torch etc. También es para un convnet, pero eso tampoco es demasiado relevante, sólo afecta a los ejes sobre los que se toman las sumas):

# latent space loss. KL divergence between latent space distribution and unit gaussian, for each batch.
# first half of eq 10. in https://arxiv.org/abs/1312.6114
kl_loss = -0.5 * tf.reduce_sum(1 + log_sigma_sq - tf.square(mu) - tf.exp(log_sigma_sq), axis=1)

# reconstruction error, using pixel-wise L2 loss, for each batch
rec_loss = tf.reduce_sum(tf.squared_difference(y, x), axis=[1,2,3])

# or binary cross entropy (assuming 0...1 values)
y = tf.clip_by_value(y, 1e-8, 1-1e-8) # prevent nan on log(0)
rec_loss = -tf.reduce_sum(x * tf.log(y) + (1-x) * tf.log(1-y), axis=[1,2,3])

# sum the two and average over batches
loss = tf.reduce_mean(kl_loss + rec_loss)

Sin embargo, el rango numérico de kl_loss y rec_loss depende en gran medida de las dimensiones del espacio latente y del tamaño de la característica de entrada (por ejemplo, la resolución de píxeles) respectivamente. ¿Sería sensato reemplazar los reduce_sum por reduce_mean para obtener por z-dim KLD y por píxel (o característica) LSE o BCE? Y lo que es más importante, ¿cómo ponderamos la pérdida latente con la pérdida de reconstrucción al sumarlas para obtener la pérdida final? ¿Es sólo prueba y error? o ¿hay alguna teoría (o al menos una regla general) para ello? No he podido encontrar ninguna información al respecto en ningún sitio (incluido el documento original).


El problema que tengo es que si el equilibrio entre las dimensiones de mis características de entrada (x) y las dimensiones del espacio latente (z) no es "óptimo", o bien mis reconstrucciones son muy buenas pero el espacio latente aprendido no está estructurado (si las dimensiones x son muy altas y el error de reconstrucción domina sobre el KLD), o viceversa (las reconstrucciones no son buenas pero el espacio latente aprendido está bien estructurado si el KLD domina).

Me encuentro con que tengo que normalizar la pérdida de reconstrucción (dividiendo por el tamaño de la característica de entrada), y KLD (dividiendo por las dimensiones z) y luego ponderar manualmente el término KLD con un factor de peso arbitrario (La normalización es para que pueda utilizar el mismo o similar peso independientemente de las dimensiones de x o z ). Empíricamente he encontrado alrededor de 0,1 para proporcionar un buen equilibrio entre la reconstrucción y el espacio latente estructurado que se siente como un "punto dulce" para mí. Estoy buscando trabajos anteriores en esta área.


A petición, notación matemática de lo anterior (centrándose en la pérdida L2 para el error de reconstrucción)

$$\mathcal{L}_{latent}^{(i)} = -\frac{1}{2} \sum_{j=1}^{J}(1+\log (\sigma_j^{(i)})^2 - (\mu_j^{(i)})^2 - (\sigma_j^{(i)})^2)$$

$$\mathcal{L}_{recon}^{(i)} = -\sum_{k=1}^{K}(y_k^{(i)}-x_k^{(i)})^2$$

$$\mathcal{L}^{(m)} = \frac{1}{M}\sum_{i=1}^{M}(\mathcal{L}_{latent}^{(i)} + \mathcal{L}_{recon}^{(i)})$$

donde $J$ es la dimensionalidad del vector latente $z$ (y la correspondiente media $\mu$ y la varianza $\sigma^2$ ), $K$ es la dimensionalidad de las características de entrada, $M$ es el tamaño del minilote, el superíndice $(i)$ denota el $i$ punto de datos y $\mathcal{L}^{(m)}$ es la pérdida para el $m$ a la mini-lote.

34voto

Shinie Puntos 31

Para cualquiera que tropiece con este post y que también busque una respuesta, este hilo de twitter ha añadido una gran cantidad de información muy útil.

A saber:

beta-VAE: Aprendizaje de conceptos visuales básicos con un marco variacional restringido

discute mi pregunta exacta con algunos experimentos. Curiosamente, parece que su $\beta_{norm}$ (que es similar a mi peso KLD normalizado) también se centra en torno a 0,1, con valores más altos que dan un espacio latente más estructurado a costa de una reconstrucción más pobre, y valores más bajos que dan una mejor reconstrucción con un espacio latente menos estructurado (aunque su enfoque se centra específicamente en el aprendizaje Desenredado representaciones).

y lecturas relacionadas (donde se discuten temas similares)

19voto

user206835 Puntos 11

Me gustaría añadir un papel más relacionados con este tema (no puedo comentar nada debido a mi baja reputación en este momento).

En la subsección 3.1 del documento, los autores especificaron que no pudieron entrenar una implementación directa de VAE que ponderara por igual la probabilidad y la divergencia KL. En su caso, la pérdida KL se redujo indeseablemente a cero, aunque se esperaba que tuviera un valor pequeño. Para superar esto, propusieron utilizar el "recocido de costes KL", que aumentaba lentamente el factor de peso del término de divergencia KL (curva azul) de 0 a 1.

Figure 2. The weight of the KL divergence term of variational lower bound according to a typical sigmoid annealing schedule plotted alongside the (unweighted) value of the KL divergence term for our VAE on the Penn TreeBank.

Esta solución se aplica también en Ladder VAE.

Papel:

Bowman, S.R., Vilnis, L., Vinyals, O., Dai, A.M., Jozefowicz, R. y Bengio, S., 2015. Generación de frases a partir de un espacio continuo . arXiv preprint arXiv:1511.06349.

8voto

nim.py Puntos 131

Me encontré con el mismo problema de no saber cómo ponderar los términos de reconstrucción y KL, y aquí quiero añadir una respuesta con algunos valores concretos de $\beta$ (el peso del término KL) para futuras referencias.

En el $\beta$ -VAE papel parecen utilizar los valores de $\beta_{norm}$ entre $0.001$ y $10$ (Fig. 6 del documento).

Calculan $\beta_{norm}$ de la siguiente manera:

$$\beta_{norm} = \frac{\beta M}{N},$$

donde $M$ es el tamaño del espacio latente (por ejemplo $10$ ) y $N$ es el tamaño de la entrada (por ejemplo $64 \cdot 64 \cdot 1 = 4096$ ).

4voto

user206835 Puntos 11

Actualización del 6 de diciembre de 2020 : Hice un entrada del blog para explicar esto en detalle.


Por fin he conseguido averiguar la razón de la divergencia de la ponderación de KL en VAE. Se trata más bien de la constante normalizada de la distribución que modela la variable objetivo. Aquí, voy a presentar algunas distribuciones de salida que utilizamos a menudo. La mayor parte de la notación seguirá el libro "Reconocimiento de patrones y aprendizaje automático" .

  1. Regresión lineal (regresión sin límites): (sección 3.1.1 en la página 140) - Esto explica para la divergencia KL de ponderación cuando se utiliza la pérdida MSE

La variable objetivo $t$ se supone que es la suma de la función determinista $y(\mathbf{x}, \mathbf{w})$ y un ruido gaussiano: \begin{equation} t = y(\mathbf{x}, \mathbf{w}) + \epsilon, \qquad\epsilon \sim \mathcal{N}\left(\epsilon | 0, \color{red}{\beta}^{-1}\right) \end{equation} Por lo tanto, la variable objetivo se modela como una variable aleatoria gaussiana con la log-verosimilitud dada como: \begin{equation} p(t | \mathbf{x}, \mathbf{w}, \color{red}{\beta}) = \mathcal{N} \left( t | y(\mathbf{x}, \mathbf{w}), \color{red}{\beta}^{-1} \right) \end{equation} Dada esta suposición, la log-verosimilitud en los puntos de datos $\{\mathbf{x}_{n}, t_{n}\}_{n=1}^{N}$ es: \begin{equation} \ln p(\mathbf{t} | \mathbf{x}, \mathbf{w}, \color{red}{\beta}) = \frac{N}{2} \ln \frac{\color{red}{\beta}}{2\pi} - \color{red}{\beta} E_{D}(\mathbf{w}), \end{equation} donde: \begin{equation} E_{D}(\mathbf{w}) = \frac{1}{2} \sum_{n=1}^{N} [t_{n} - y(\mathbf{x}, \mathbf{w})]^{2}. \end{equation} A menudo optimizamos sólo $E_{D}(\mathbf{w})$ , no toda la log-verosimilitud $\ln p(\mathbf{t} | \mathbf{x}, \mathbf{w}, \beta)$ , lo que hace que no se tenga en cuenta la precisión $\color{red}{\beta}$ . Esto podría estar bien para la regresión convencional, en la que la pérdida consiste sólo en la log-verosimilitud negativa (NLL) $-\ln p(\mathbf{t} | \mathbf{x}, \mathbf{w}, \beta)$ y la predicción sería la media de la variable objetivo $t$ .

Sin embargo, la pérdida en VAE consiste en el NLL (o pérdida de reconstrucción) y la regularización (pérdida KL). Por lo tanto, si el factor de peso del término MSE (o, $E_{D}(\mathbf{w})$ en este caso) es 1, necesitamos ponderar la divergencia KL con un factor $\beta_{KL} = 1/\color{red}{\beta}$ para ser matemáticamente correcto. En la práctica, la gente suele encontrar un buen valor de la precisión $\beta_{KL}$ mediante la sintonización de hiperparámetros. Otro enfoque consiste en aprender $\color{red}{\beta}$ considerándolo como un parámetro aprendible que se obtiene minimizando toda la función de pérdida VAE.

  1. Regresión logística - Esto explica el caso de la pérdida de entropía cruzada binaria utilizada para las imágenes en blanco y negro

Consideremos el caso de la clasificación binaria. La verdad básica es 0 o 1, y la variable objetivo $t = p(y = 1 | \mathbf{x})$ se supone que sigue una distribución Bernoulli: \begin{equation} p(t | \mathbf{x}, \mathbf{w}) = \mathcal{B}(t | y(\mathbf{x}, \mathbf{w})) = \left[y(\mathbf{x}, \mathbf{w})\right]^{t} \left[ 1 - y(\mathbf{x}, \mathbf{w}) \right)^{1 - t}. \end{equation} Por lo tanto, el NLL en este caso viene dado por: \begin{equation} -\ln p(t | \mathbf{x}, \mathbf{w}) = -\left[ t \ln y(\mathbf{x}, \mathbf{w}) + (1 - t) \ln (1 - y(\mathbf{x}, \mathbf{w})) \right], \end{equation} que es la pérdida de entropía cruzada binaria. (Se puede extender a softmax para la clasificación multiclase utilizando una distribución categórica para llevar a la pérdida de entropía cruzada).

Para el conjunto de datos MNIST (o imágenes en blanco y negro), cada píxel es 0 o 1, y por lo tanto, podemos utilizar la pérdida de entropía cruzada binaria como la pérdida de reconstrucción en el VAE para predecir la probabilidad de que el valor de un píxel sea 1. Y como la media de la distribución Bernoulli es igual a $y(\mathbf{x}, \mathbf{w})$ A menudo utilizamos $y(\mathbf{x}, \mathbf{w})$ como intensidad de píxel para trazar las imágenes reconstruidas.

Nótese que cuando se utiliza la pérdida de entropía cruzada binaria en un VAE para imágenes en blanco y negro, no necesitamos ponderar el término de divergencia KL, lo que se ha visto en muchas implementaciones.

  1. Regresión limitada (por ejemplo, regresión en [0, 1]) - Esto explica el caso de la ponderación de la divergencia KL cuando se utiliza la pérdida de entropía cruzada binaria para las imágenes en color

Como se explica en la regresión logística, el soporte (o la etiqueta) de una distribución Bernoulli es $\{0, 1\}$ no $[0, 1]$ pero en la práctica se sigue empleando para la reconstrucción de imágenes en color, que requiere un soporte en $[0, 1]$ o $\{0, 1, \ldots, 255\}$ .

Dado que nuestro interés es el caso del apoyo en $[0, 1]$ podríamos encontrar alguna distribución continua que tenga soporte en $[0, 1]$ para modelar nuestra predicción. Una sencilla es la distribución beta. En ese caso, nuestra predicción sería los 2 parámetros $\alpha$ y $\beta$ . ¿Te parece complicado?

Afortunadamente, recientemente se ha propuesto una versión continua de la distribución Bernoulli, de modo que podemos seguir utilizando la pérdida de entropía cruzada binaria para predecir la intensidad de un píxel con algunas modificaciones mínimas. Consulte el artículo "La distribución continua de Bernoulli: la corrección de un error omnipresente en la VAE" o Wikipedia para más detalles sobre la distribución.

Bajo el supuesto de la distribución continua de Bernoulli, la log-verosimilitud puede expresarse como \begin{equation} \ln p(t | \mathbf{x}, \mathbf{w}) = \mathcal{CB}(t | y(\mathbf{x}, \mathbf{w})) = C(y(\mathbf{x}, \mathbf{w})) (y(\mathbf{x}, \mathbf{w}))^{t} (1 - y(\mathbf{x}, \mathbf{w}))^{1-t}, \end{equation} donde $C(y(\mathbf{x}, \mathbf{w}))$ es la constante normalizada.

Por lo tanto, cuando se trabaja con VAE que implica una pérdida de entropía cruzada binaria, en lugar de sintonizar un factor de peso del término KL -que podría ser matemáticamente incorrecto-, simplemente añadimos $- \ln C(y(\mathbf{x}, \mathbf{w}))$ en la pérdida, y luego optimizar.

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