Deep Learning · Autosupervisado · Laboratorio 02

Autoencoder Variacional: comprimir, y volver a imaginar

Una red que aprende a describir cada observación con unos pocos números y a reconstruirla desde ahí. Aquí se entrena de verdad, en tu navegador, con gradientes calculados a mano: verás bajar la pérdida época a época y qué le hace cada hiperparámetro.

1

Capítulo 1 · ≈ 5 min

La idea: comprimir con incertidumbre

Al terminar podrás…

  • explicar qué hace un autoencoder y qué le añade la parte variacional;
  • leer la pérdida del VAE como dos fuerzas en tensión: reconstrucción y KL;
  • decir para qué sirve el truco de reparametrización.
1

Comprimir y reconstruir

El encoder reduce cada observación a unos pocos números; el decoder intenta recuperarla. El cuello de botella obliga a quedarse con lo esencial.

2

Pero con incertidumbre

No produce un punto, sino una distribución (media μ y desviación σ). Cada observación ocupa una región difusa, así que el espacio latente queda continuo y sin huecos.

3

Y ordenado por el KL

Un segundo término empuja esas distribuciones hacia una gaussiana estándar. Gracias a eso se puede muestrear del espacio y generar datos nuevos.

La pérdida: dos fuerzas en tensión

L = reconstrucción + β · KL

Reconstrucción

«Que la salida se parezca a la entrada.» Empuja a usar el código latente para guardar todo lo posible.

quiere fidelidad
⟷

KL contra el prior

«Que el código se parezca a una gaussiana estándar.» Empuja a no usar el código más de lo necesario.

quiere orden

Ese equilibrio es el corazón del modelo, y β es el mando que lo mueve. Sin el KL tendrías un autoencoder normal; con demasiado KL el modelo deja de usar el latente por completo. Ambos extremos los verás en el capítulo 2.

La suma con β = 1 es el ELBO con signo cambiado (Kingma & Welling, 2014). Se mide en nats.

El truco de reparametrización

Hay un problema: si z se sortea de una distribución, no se puede derivar a través del sorteo y la red no puede entrenarse. La solución es escribir el azar aparte:

z = μ + σ · ε, con ε ~ N(0, 1)

Así el azar (ε) entra como una constante en cada paso y el gradiente puede fluir hasta μ y σ. Es la idea que hizo entrenable al VAE (Kingma & Welling, 2014; Rezende et al., 2014).

En este laboratorio el modelo se entrena con Adam y los gradientes están derivados a mano, sin librerías: puedes leer las 200 líneas de vae.js.

Para profundizar: la revisión de conjunto de Kingma & Welling (2019) y los capítulos 14 y 20 de Goodfellow et al. (2016).

2

Capítulo 2 · ≈ 14 min

Laboratorio: entrena y mueve los hiperparámetros

Al terminar podrás…

  • reconocer el colapso posterior y saber qué hacer;
  • decidir la dimensión latente mirando cuántas dimensiones quedan activas;
  • distinguir los hiperparámetros de modelo (β, latente, capacidad) de los de optimización (η, épocas, lote).

Empieza por un escenario guiado (recomendado)

Cada uno entrena un modelo con una configuración concreta para que veas un fenómeno. Después explora libremente.

Datos y reconstrucciones

Arriba, observaciones reales; abajo, lo que el modelo devuelve tras comprimirlas.

Cada casilla es una observación: una imagen de 8×8, es decir 64 variables (una por píxel, de 0 a 1). Se generan a partir de unos pocos factores conocidos (posición, tamaño…), lo que permite comprobar después si el modelo los descubre. Sin PCA: el modelo recibe los 64 números tal cual.

Originales

Reconstruidas por el modelo

Resultados

Ajuste del modelo no necesita etiquetas
Desenredo solo con datos sintéticos

Curva de entrenamiento

Las dos partes de la pérdida, época a época. La reconstrucción (azul, eje izquierdo) debería bajar; el KL (naranja, eje derecho) cuenta cuánta información usa el latente.

KL por dimensión latente

Cuánta información transporta cada dimensión. Las barras grises están apagadas: el modelo no las usa.

Espacio latente

Cada punto es una observación, colocada en su código μ. El color muestra un factor real: si varía de forma ordenada, el modelo lo capturó.

Mapa generativo

Qué produce el decoder al recorrer el espacio latente. Aquí se ve si el modelo es generativo de verdad: puntos vecinos deben dar imágenes parecidas y plausibles.

Una observación de cerca

Clic en el espacio latente para elegir otra.

Elegir:

¿Descubrió los factores reales?

Para cada factor que generó los datos, con qué fuerza se alinea con alguna dimensión latente.

Barrido

Entrena varios modelos desde cero con distintos valores del hiperparámetro activo (2 semillas cada uno). Tarda unos segundos.

Ver como tabla

El fallo que hay que saber reconocer: el colapso posterior

Si el KL cae a cero, el modelo ha dejado de usar el espacio latente: el encoder devuelve siempre el prior y el decoder reconstruye siempre la misma imagen promedio. Lo tramposo es que la pérdida puede parecer razonable y el modelo sigue produciendo scores y reconstrucciones. Se diagnostica con las dimensiones activas, no con la pérdida. Causas: β demasiado alto, red demasiado pequeña, o un decoder tan potente que no necesita el código (Bowman et al., 2016; Lucas et al., 2019). Remedios: recocido del KL —también en variante cíclica (Fu et al., 2019)—, bajar β, o free bits (Kingma et al., 2016).

3

Capítulo 3 · ≈ 8 min

Evaluar: ¿cómo sé si mi VAE es bueno?

Al terminar podrás…

  • explicar por qué la pérdida total sola no sirve para comparar modelos;
  • elegir indicadores según lo que quieras del modelo (reconstruir, generar, representar, detectar);
  • saber qué se puede medir sin etiquetas y qué no.

La trampa número uno

Dos modelos con distinto β no son comparables por su pérdida: cada uno está minimizando una función distinta. Y aun con el mismo β, un modelo puede bajar la pérdida total subiendo la reconstrucción y hundiendo el KL — es decir, empeorando la representación. Mira siempre las dos partes por separado y cuántas dimensiones quedan activas.

Qué indicador usar y cuándo

Sí · solo en validación: necesitas casos confirmadosNo · disponibles en producciónParcial · solo con datos sintéticos o revisión humana
Indicador¿Necesita etiquetas?Qué mideÚsalo cuando…Cuidado con…
Error de reconstrucciónNoCuánta información se pierde al comprimir y reconstruirSiempre: es la mitad de la pérdidaBaja siempre que subas la capacidad; por sí sola premia al autoencoder sin regularizar
KLNoInformación que el latente transportaSiempre, junto a la anteriorNi cero (colapso) ni enorme (latente disperso)
Dimensiones activasNoCuántas dimensiones tienen KL > 0.01 natsPara elegir latent_dim y diagnosticar colapsoEl umbral 0.01 es una convención, no una ley
−ELBONoCota de la verosimilitud: reconstrucción + KLComparar modelos con el mismo β y los mismos datosEs una cota, no la verosimilitud; no comparable entre β distintos
Inspección visualNoReconstrucciones y muestras del priorSiempre; detecta colapso de un vistazoSubjetiva; las muestras de un VAE son borrosas por naturaleza
Estabilidad entre semillasNoCuánto cambia el resultado solo por el azarAntes de afirmar que una configuración es mejorEl latente cambia de orientación con la semilla: compara métricas, no coordenadas
Alineación con factoresParcialSi cada factor real vive en su propia dimensión (desenredo)Datos sintéticos con factores conocidosEn datos reales no existe; las métricas de desenredo son discutidas (Locatello et al., 2019)
Utilidad posteriorParcialSi la representación mejora el modelo que la usa despuésEl VAE es un paso intermedioRequiere etiquetas para esa tarea posterior
ROC-AUC / APSíCalidad del error de reconstrucción como detector; existe también la probabilidad de reconstrucción (An & Cho, 2015)Detección de anomalías con casos confirmadosCon anomalías raras usa AP, no ROC-AUC (Saito & Rehmsmeier, 2015)

Un VAE bueno ¿para qué?

No hay un "mejor VAE" en abstracto. Según el objetivo, miras cosas distintas:

  • Reconstruir / detectar defectos → error de reconstrucción bajo. β pequeño.
  • Generar datos nuevos → muestras del prior plausibles. β ≥ 1 y sin huecos.
  • Representar para otro modelo → rendimiento de ese modelo posterior.
  • Interpretar factores → desenredo, con todas las reservas del párrafo siguiente.

Sobre el desenredo, con honestidad

β > 1 favorece que cada factor caiga en su propia dimensión (Higgins et al., 2017), y en este laboratorio se ve. Pero un estudio a gran escala mostró que el desenredo no supervisado es imposible sin supuestos previos, que las métricas discrepan entre sí y que el resultado depende tanto de la semilla como del hiperparámetro (Locatello et al., 2019). Trátalo como una propiedad deseable que hay que verificar, no como algo que β garantice.

4

Capítulo 4 · ≈ 8 min

Optimizar: β y latent_dim no se ajustan por separado

Al terminar podrás…

  • ver por qué dos hiperparámetros que interactúan exigen buscarlos juntos;
  • ordenar el ajuste: primero optimización, después modelo;
  • aplicar el mismo criterio de qué no optimizar que en los demás modelos del sitio.

4.1 Interacción: la cuadrícula β × latent_dim

Cada casilla es un modelo entrenado desde cero. Si los hiperparámetros fueran independientes, la mejor fila y la mejor columna se cruzarían en el óptimo; aquí no pasa eso: con β alto da igual cuántas dimensiones des, porque se apagan todas.

Entrena 30 modelos: unos 10–30 segundos.

4.2 En qué orden ajustar

1

Optimización primero

learning_rate y épocas. Si el entrenamiento no converge, cualquier otra configuración parecerá mala. Barre η en escala logarítmica.

2

Capacidad

hidden_units y profundidad. Sube hasta que la reconstrucción se aplane; si la red es muy pequeña, el modelo colapsa aunque β esté bien.

3

Modelo, juntos

β y latent_dim a la vez, en cuadrícula o con búsqueda aleatoria. Nunca uno tras otro: interactúan.

4

Rescate

Si aparece colapso, recocido del KL antes de tocar nada más.

4.3 Qué no optimizar

La misma clasificación que usamos en todos los modelos del sitio: fíjalo, decídelo o solo reproducibilidad.

4.4 Métodos y presupuesto

Qué cambia respecto a un modelo clásico

  • Cada evaluación es cara (entrenar una red entera), así que el número de pruebas es pequeño: aquí brillan la optimización bayesiana y Hyperband, que descarta pronto las configuraciones malas usando pocas épocas (Li et al., 2018).
  • Hay más hiperparámetros y muchos interactúan; la búsqueda aleatoria sigue siendo la referencia mínima (Bergstra & Bengio, 2012).
  • La varianza entre semillas es mayor: compara siempre con al menos 3 repeticiones.
  • Las épocas son un recurso ideal para métodos de baja fidelidad: entrena 10 épocas a muchas configuraciones y solo sigue con las prometedoras.

El capítulo 4 de Isolation Forest compara grid, random, bayesiana y successive halving con el mismo presupuesto; esos criterios se aplican igual aquí.

Ejemplo en Python (PyTorch + Optuna, Akiba et al., 2019)

import optuna

def objective(trial):
    beta    = trial.suggest_float("beta", 0.2, 8.0, log=True)
    latent  = trial.suggest_int("latent_dim", 2, 32, log=True)
    hidden  = trial.suggest_categorical("hidden", [64, 128, 256])
    lr      = trial.suggest_float("lr", 1e-4, 1e-2, log=True)

    model = VAE(latent_dim=latent, hidden=hidden)
    for epoch in range(MAX_EPOCHS):
        train_one_epoch(model, loader, lr=lr, beta=kl_warmup(beta, epoch))
        val = evaluate(model, val_loader)          # rec + KL, con beta=1 para comparar
        trial.report(val["loss"], epoch)
        if trial.should_prune():                   # Hyperband descarta lo que no promete
            raise optuna.TrialPruned()

    if val["active_dims"] == 0:                    # colapso: configuración inservible
        raise optuna.TrialPruned()
    return val["loss"]

study = optuna.create_study(direction="minimize",
                            pruner=optuna.pruners.HyperbandPruner())
study.optimize(objective, n_trials=40)

Detalle importante: se descarta explícitamente el modelo colapsado. Sin esa comprobación, una búsqueda automática puede premiar configuraciones que no representan nada.

5

Capítulo 5 · ≈ 5 min

Casos de la vida real

Al terminar podrás…

  • ver cómo el mismo hiperparámetro se ajusta en direcciones opuestas según el objetivo;
  • traducir β y latent_dim a decisiones concretas de cada dominio;
  • anticipar la trampa típica de cada aplicación.

Los datos del laboratorio son sintéticos; estos casos describen situaciones típicas de forma ilustrativa, no resultados medidos.

6

Capítulo 6 · ≈ 4 min

Checklist, errores comunes y límites

Al terminar podrás…

  • seguir un flujo ordenado para entrenar y validar un VAE;
  • reconocer los errores más frecuentes;
  • saber cuándo un VAE no es la herramienta adecuada.

Flujo de trabajo recomendado

  1. Define el objetivo: ¿reconstruir, generar, representar o detectar? De ahí sale la dirección de β.
  2. Normaliza las entradas al rango que asume tu verosimilitud (aquí [0,1] con entropía cruzada).
  3. Ajusta la tasa de aprendizaje y comprueba que la curva baja.
  4. Sube la capacidad hasta que la reconstrucción se aplane.
  5. Busca β y latent_dim juntos, descartando configuraciones colapsadas.
  6. Verifica: dimensiones activas, reconstrucciones y muestras del prior a ojo.
  7. Repite con 3+ semillas antes de declarar un ganador.
  8. Monitorea el KL y la distribución del error tras desplegar.

Errores comunes

  • Mirar solo la pérdida total y no darse cuenta del colapso.
  • Comparar modelos con β distintos por su pérdida.
  • Subir latent_dim esperando mejora cuando β ya apagó las dimensiones.
  • Interpretar las dimensiones latentes como variables con significado sin verificarlo.
  • Entrenar el detector de anomalías con datos contaminados de anomalías.
  • Culpar a la arquitectura de lo que era una tasa de aprendizaje mal puesta.
  • Esperar muestras nítidas: el VAE genera borroso por diseño del objetivo.

Límites del VAE

  • Muestras borrosas frente a modelos de difusión o GAN.
  • El colapso posterior con decoders potentes.
  • El desenredo no está garantizado (Locatello et al., 2019).
  • En detección de anomalías, puede reconstruir demasiado bien lo que nunca vio si tiene demasiada capacidad.
  • Alternativas según el caso: autoencoder simple (más fiel), VQ-VAE (latente discreto, van den Oord et al., 2017), difusión (mejor generación), o Isolation Forest si tus datos son tabulares y pequeños.
★

Referencias

Bibliografía

✔ = ficha y contenido consultados en la fuente (texto completo o resumen oficial) al preparar este material. Datos menores como páginas o volumen conviene contrastarlos antes de una cita formal. Sin ✔: referencias estándar que no se consultaron directamente en esta revisión.

  1. Kingma, D. P., & Welling, M. (2014). Auto-Encoding Variational Bayes. International Conference on Learning Representations (ICLR). arXiv:1312.6114
  2. Rezende, D. J., Mohamed, S., & Wierstra, D. (2014). Stochastic backpropagation and approximate inference in deep generative models. Proc. ICML (PMLR 32), 1278–1286.
  3. ✔ Higgins, I., Matthey, L., Pal, A., Burgess, C., Glorot, X., Botvinick, M., Mohamed, S., & Lerchner, A. (2017). β-VAE: Learning basic visual concepts with a constrained variational framework. International Conference on Learning Representations (ICLR). openreview.net/forum?id=Sy2fzU9gl
  4. ✔ Bowman, S. R., Vilnis, L., Vinyals, O., Dai, A. M., Jozefowicz, R., & Bengio, S. (2016). Generating sentences from a continuous space. Proc. CoNLL, 10–21. doi:10.18653/v1/K16-1002 — origen del recocido del KL contra el colapso posterior.
  5. Sønderby, C. K., Raiko, T., Maaløe, L., Sønderby, S. K., & Winther, O. (2016). Ladder variational autoencoders. Advances in Neural Information Processing Systems 29 (NIPS) — introduce el warm-up determinista.
  6. Kingma, D. P., Salimans, T., Jozefowicz, R., Chen, X., Sutskever, I., & Welling, M. (2016). Improved variational inference with inverse autoregressive flow. Advances in Neural Information Processing Systems 29 (NIPS) — propone los free bits.
  7. Lucas, J., Tucker, G., Grosse, R., & Norouzi, M. (2019). Don't blame the ELBO! A linear VAE perspective on posterior collapse. Advances in Neural Information Processing Systems 32 (NeurIPS).
  8. Locatello, F., Bauer, S., Lucic, M., Rätsch, G., Gelly, S., Schölkopf, B., & Bachem, O. (2019). Challenging common assumptions in the unsupervised learning of disentangled representations. Proc. ICML (PMLR 97), 4114–4124. Premio al mejor artículo — el desenredo no supervisado es imposible sin supuestos previos.
  9. Fu, H., Li, C., Liu, X., Gao, J., Çelikyilmaz, A., & Carin, L. (2019). Cyclical annealing schedule: A simple approach to mitigating KL vanishing. Proc. NAACL-HLT, 240–250.
  10. van den Oord, A., Vinyals, O., & Kavukcuoglu, K. (2017). Neural discrete representation learning (VQ-VAE). Advances in Neural Information Processing Systems 30 (NIPS).
  11. An, J., & Cho, S. (2015). Variational autoencoder based anomaly detection using reconstruction probability. SNU Data Mining Center, Technical Report.
  12. Kingma, D. P., & Welling, M. (2019). An introduction to variational autoencoders. Foundations and Trends in Machine Learning, 12(4), 307–392. arXiv:1906.02691 — la referencia de conjunto.
  13. ✔ Bergstra, J., & Bengio, Y. (2012). Random search for hyper-parameter optimization. Journal of Machine Learning Research, 13, 281–305.
  14. ✔ Li, L., Jamieson, K., DeSalvo, G., Rostamizadeh, A., & Talwalkar, A. (2018). Hyperband: A novel bandit-based approach to hyperparameter optimization. Journal of Machine Learning Research, 18(185), 1–52.
  15. ✔ Akiba, T., Sano, S., Yanase, T., Ohta, T., & Koyama, M. (2019). Optuna: A next-generation hyperparameter optimization framework. Proc. ACM SIGKDD (KDD), 2623–2631. doi:10.1145/3292500.3330701
  16. ✔ Saito, T., & Rehmsmeier, M. (2015). The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLoS ONE, 10(3), e0118432. doi:10.1371/journal.pone.0118432
  17. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press — capítulos 14 (autoencoders) y 20 (modelos generativos profundos).