45 · Autoencoders variacionales (VAEs)
Un VAE convierte el cuello de botella en una distribución de probabilidad. Al codificar a una media y varianza, regularizarla hacia N(0,1) y muestrear con el truco de reparametrización, el espacio latente se vuelve suave y muestreable — un generador de verdad.
Un VAE codifica cada entrada a una DISTRIBUCIÓN (una media y varianza) en lugar de un punto, regulariza esa distribución hacia N(0,1) con un término KL, y entrena a través de la aleatoriedad con el truco de reparametrización — haciendo el espacio latente lo bastante suave para MUESTREAR datos nuevos.
Sin esto:
El VAE es el primer modelo generativo profundo de verdad y el encoder/decoder dentro del cual corre Stable Diffusion. Su pérdida KL + reconstrucción es la plantilla del ELBO que se repite en todo el modelado generativo.
La lección pasada terminó con un problema: el espacio latente de un autoencoder simple tiene agujeros, así que no puedes muestrear de él para generar. El autoencoder variacional (VAE) arregla esto con un cambio elegante — hacer el cuello de botella probabilístico.
En lugar de que el encoder mapee x a un único punto z, lo mapea a una distribución sobre el espacio latente: un vector de media μ y una (log-)varianza logσ². Para obtener un código muestreas z ∼ N(μ, σ²), y luego decodificas z como antes. Codificar a una nube difusa en lugar de un punto nítido significa que códigos cercanos deben decodificar a salidas similares — el espacio latente se vuelve continuo.
La pérdida tiene dos términos:
- Reconstrucción —
‖x − x̂‖²(o una entropía cruzada), exactamente como antes: la muestra decodificada debe parecerse a la entrada. - Divergencia KL —
KL(N(μ,σ²) ‖ N(0,1)), un regularizador que empuja cada distribución codificada hacia la normal estándar. Esto empaqueta todas las nubes por ejemplo en una región compartida y bien formada alrededor del origen, sin huecos. Ahora un código extraído deN(0,1)cae en algún lugar que el decoder entiende — así que puedes generar muestreandoz ∼ N(0,1)y decodificando.
Juntos, estos dos términos son (el negativo de) el ELBO — la cota inferior de la evidencia (evidence lower bound) — la cantidad que los VAEs maximizan. La reconstrucción dice "sé fiel"; la KL dice "mantente organizado y muestreable". Se empujan mutuamente, y el equilibrio es todo el juego.
Queda un obstáculo: no puedes retropropagar a través de un muestreo aleatorio. El arreglo es el truco de reparametrización: escribe z = μ + σ · ε donde ε ∼ N(0,1) se extrae fuera de la red. Ahora la aleatoriedad vive en ε (no se necesita gradiente ahí), mientras que μ y σ son funciones deterministas de la red — así que los gradientes fluyen directamente a través de ellas. La celda de abajo muestra este truco reproduciendo una distribución objetivo exactamente, y calcula el término KL en forma cerrada.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Un VAE en PyTorch: el encoder produce mu y logvar, el truco de reparametrización muestrea z = mu + sigma*eps, y la pérdida suma reconstrucción + KL (el ELBO negativo); genera decodificando z ~ N(0,1).
¿Cuál es el papel del término de divergencia KL en la pérdida de un VAE?
- Un VAE codifica a una distribución (μ, logσ²) en lugar de un punto, muestrea z con el truco de reparametrización z = μ + σ·ε, y decodifica — haciendo el espacio latente continuo.
- Su pérdida = reconstrucción + KL(N(μ,σ²)‖N(0,1)) (el ELBO negativo): la reconstrucción exige fidelidad, la KL empaqueta los códigos en una región N(0,1) muestreable para que puedas generar decodificando z ~ N(0,1).
- El truco de reparametrización mueve la aleatoriedad a un ε ~ N(0,1) externo para que los gradientes fluyan por μ y σ; la tensión reconstrucción/KL es por la que las muestras del VAE tienden a ser borrosas.
Los VAEs generan e interpolan imágenes, moléculas y audio, y comprimen datos en latentes estructurados; el primer y último paso de Stable Diffusion son literalmente un encoder y decoder de VAE alrededor del proceso de difusión.
Si lo quitas: Te faltaría el puente de 'autoencoder que comprime' a 'modelo que genera', y el ELBO (reconstrucción + KL) que reaparece en todo el modelado generativo probabilístico.