48 · Difusión latente y condicional
Stable Diffusion hace la difusión práctica y controlable: difunde en el latente comprimido de un VAE en lugar de píxeles, inyecta un prompt de texto vía cross-attention, y dirige la adherencia al prompt con guía sin clasificador.
Stable Diffusion corre la difusión en el espacio LATENTE comprimido de un VAE (barato), CONDICIONA el denoiser U-Net sobre un embedding de texto de CLIP vía cross-attention (controlable), y usa guía sin clasificador ε = ε_uncond + w·(ε_cond − ε_uncond) para regular cuán fuerte se obedece el prompt.
Sin esto:
La difusión latente es lo que hizo que el texto-a-imagen fuera lo bastante rápido para correr en GPUs de consumo y controlable por un prompt — la receta exacta detrás de Stable Diffusion, DALL·E y Midjourney.
La difusión de la lección pasada corría directamente sobre píxeles — y eso es caro. Una imagen RGB de 512×512 son ~780k números, y debes correr el denoiser docenas de veces. La difusión latente (la base de Stable Diffusion) hace esto práctico con una jugada ingeniosa: no difundas en el espacio de píxeles — difunde en un espacio latente comprimido.
Un VAE pre-entrenado (lección 45) codifica la imagen a un latente pequeño (p. ej. 64×64×4, ~50× menos números). Corre todo el proceso de difusión — el ruido forward y el denoising reverse — dentro de ese latente. Solo al final el decoder del VAE convierte el latente limpio final de vuelta en una imagen a resolución completa. La misma matemática de difusión, una fracción del cómputo.
Eso resuelve la velocidad. Ahora el control: ¿cómo hacemos que pinte un prompt específico en lugar de una imagen aleatoria? Condicionamiento. Un codificador de texto CLIP convierte el prompt ("un corgi astronauta") en una secuencia de vectores. Esos vectores se inyectan en el denoiser U-Net a través de cross-attention (Capítulo 7): en cada paso de denoising, el latente de la imagen atiende a los tokens de texto, dejando que el prompt dirija qué se va denoizando hacia la existencia. El denoiser ya no es ε_θ(x_t, t) sino ε_θ(x_t, t, texto).
Por último, ¿cuán fuerte debe obedecerse el prompt? La guía sin clasificador (classifier-free guidance, CFG) es el dial. En cada paso la red predice el ruido dos veces — una con el prompt (ε_cond) y una sin él (ε_uncond) — y las combina:
ε = ε_uncond + w · (ε_cond − ε_uncond)
El término (ε_cond − ε_uncond) es la dirección hacia la que tira el prompt. La escala de guía w la amplifica: w=1 es la predicción condicional simple; un w mayor empuja más allá hacia (y pasando) el prompt — mayor adherencia y saturación, a costa de la diversidad. La celda de abajo muestra exactamente esta interpolación: a medida que w crece, el resultado marcha hacia y más allá de ε_cond.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
El pipeline de Stable Diffusion en diffusers: codificador de texto CLIP → denoiser latente U-Net con cross-attention → decoder VAE; StableDiffusionPipeline.from_pretrained y luego pipe(prompt, guidance_scale=7.5, num_inference_steps=30).
¿Qué controla la escala de guía sin clasificador w?
- La difusión latente (Stable Diffusion) corre todo el proceso de difusión dentro del latente comprimido de un VAE y decodifica solo al final — recortando el cómputo frente a la difusión en espacio de píxeles.
- El condicionamiento inyecta un embedding de texto CLIP en el denoiser U-Net vía cross-attention para que el prompt dirija la generación; el denoiser se vuelve ε_θ(x_t, t, texto).
- La guía sin clasificador ε = ε_uncond + w·(ε_cond − ε_uncond) regula la adherencia al prompt: un w mayor empuja más fuerte hacia el prompt (por defecto ~7.5) a costa de la diversidad.
La difusión latente + condicional es la receta exacta detrás de Stable Diffusion, DALL·E y Midjourney — cada herramienta de texto-a-imagen que usas compone un VAE, U-Net, cross-attention, CLIP y difusión.
Si lo quitas: Entenderías la difusión cruda pero no cómo se convirtió en texto-a-imagen rápido y controlable por prompt — el salto práctico que puso la generación de imágenes en manos de todos.