Capítulo 21 · Difusión · 9 min

Generar una imagen borrando el ruido

Stable Diffusion, DALL-E, Midjourney. El proceso inverso de denoising, el papel de CLIP, y por qué U-Net cede el paso a los Transformers.

Una familia diferente

Todo lo que hemos visto hasta ahora describe Transformers que predicen el siguiente token. Es la arquitectura que domina el lenguaje, el codigo, y cada vez mas el video y el audio.

Pero cuando escribes un prompt en Midjourney, DALL-E o Stable Diffusion, no es eso lo que ocurre. La imagen no se genera pixel a pixel de izquierda a derecha. Aparece en todas partes a la vez, refinada por etapas sucesivas.

Es la obra de una familia de modelos muy distinta: los modelos de difusion.

La idea central: aprender a quitar ruido

El proceso de difusion se inspira en una intuicion casi demasiado simple. Si tomo una imagen nitida y le añado progresivamente ruido gaussiano, en algun momento se vuelve indistinguible del ruido puro. Si aprendo a invertir ese proceso — a quitar ruido poco a poco — entonces puedo partir del ruido puro y terminar con una imagen nitida.

Durante el entrenamiento:

  1. Se toma una imagen del dataset
  2. Se le añade ruido segun un calendario predefinido (por ejemplo T = 1000 etapas)
  3. Se entrena una red para predecir el ruido que se añadio, dada la imagen ruidosa y la etapa t

El modelo aprende asi, para cualquier nivel de ruido, a reconocer lo que es "imagen real" y lo que es "ruido añadido".

En inferencia, se invierte: se parte del ruido puro, en cada paso el modelo predice el ruido, lo restamos, y repetimos. Despues de T pasos, obtenemos una imagen plausible — que se parece a la distribucion aprendida.

Prueba el debruidaje

La animación parte de una imagen de ruido puro y la elimina paso a paso. Cada paso sigue el gradiente aprendido durante el entrenamiento, guiado por el embedding de texto de CLIP. A 5 pasos el resultado es borroso; a 50, es nítido.

Juega con el numero de etapas. Con 5 pasos, la imagen sigue granulada — el modelo no tiene tiempo de refinar. Con 50 pasos, queda nitida pero a costa de diez veces mas computo. La mayoria de los samplers modernos (DDIM, DPM-Solver) alcanzan una calidad casi optima en 20 a 30 pasos.

Dirigir hacia una imagen concreta: la guidance

El ruido puro es el mismo para cualquier prompt. Como sabe el modelo que queremos un atardecer y no un perro? La respuesta: condicionamos el modelo sobre el texto.

Durante el entrenamiento, ademas de la imagen ruidosa y la etapa, se proporciona a la red un embedding del texto asociado a la imagen (a menudo un encoder tipo CLIP). La red aprende asi predicciones de ruido condicionadas: "sabiendo que la imagen describe un atardecer, asi se ve el ruido".

En inferencia, se calculan dos predicciones: una con el prompt, otra sin (o con un prompt vacio). La tecnica del Classifier-Free Guidance (CFG) consiste en extrapolar en la direccion del prompt:

prediccion_final = prediccion_sin_prompt + guidance × (prediccion_con_prompt − prediccion_sin_prompt)

El coeficiente guidance (CFG scale) controla cuanto nos alejamos de lo natural para pegarnos al prompt. Con CFG=0, el modelo ignora el texto; con CFG=7, la imagen sigue fielmente el prompt sin volverse artificial; mas alla de 12, se vuelve sobresaturada y pierde sus detalles finos.

Latent diffusion: hacer menos calculo

Una imagen 512×512 tiene 786 432 pixeles (3 canales × 512 × 512). Hacer 1 000 pasos de debruidaje sobre tantos pixeles es muy costoso. Stable Diffusion popularizo un truco: trabajar en un espacio latente comprimido.

Antes de entrenar el modelo de difusion, se entrena un autoencoder (un VAE) que comprime las imagenes en un espacio latente 64×64×4 — unas 48× mas pequeño. La difusion se aplica entonces solo a ese latente, no a los pixeles. Al final del debruidaje, se decodifica el latente hacia la imagen final.

Eso es lo que hace que Stable Diffusion sea ejecutable en un GPU de consumo en pocos segundos — mientras que un modelo equivalente basado en pixeles necesitaria un cluster.

CLIP: el puente entre texto e imagen

Para condicionar sobre texto, hace falta una representacion textual que comparta espacio con la de las imagenes. Ese es el papel de CLIP (Contrastive Language-Image Pretraining), entrenado por OpenAI sobre 400 millones de pares imagen/leyenda.

CLIP aprende dos encoders — uno para imagenes, otro para texto — que producen embeddings en un espacio comun. Una leyenda y su imagen objetivo tienen embeddings cercanos; una leyenda no relacionada esta lejos. Esa alineacion permite al modelo de difusion entender prompts textuales que nunca ha visto exactamente durante el entrenamiento.

U-Net vs Transformer (DiT)

Durante mucho tiempo, la arquitectura de referencia para la difusion era la U-Net: una red convolucional en U, con skip connections que preservan los detalles finos. Stable Diffusion 1.4, 1.5 y 2 usan todas U-Nets.

Pero en 2022, Peebles y Xie propusieron DiT (Diffusion Transformer): reemplazar la U-Net por un Transformer puro. Cada "patch" de la imagen se trata como un token, con atencion completa sobre todos los demas patches. Sin piramide convolucional, sin skip connections — solo bloques Transformer apilados.

Stable Diffusion 3, FLUX, Sora (video) — todas las arquitecturas recientes han migrado al Transformer. Por que? Porque los Transformers escalan mejor: recuperamos las mismas scaling laws que para el lenguaje. Doblar el computo en un DiT mejora las imagenes de manera predecible.

El sampler: DDPM, DDIM, DPM-Solver

El sampler es el algoritmo que decide, en cada paso, como combinar la prediccion del ruido con el estado actual para producir el siguiente paso.

SamplerPasos tipicosParticularidad
DDPM1000Estocastico, fiel al entrenamiento, lento
DDIM20–50Determinista, calidad comparable a DDPM en muchos menos pasos
DPM-Solver10–25Solver de EDO, aun mas rapido
Euler / Heun20–30Metodos clasicos de EDO, simples y robustos
LCM4–8Destilacion latente, ultrarrapido

La eleccion del sampler es una de las palancas mas accesibles para ajustar velocidad vs calidad.

Por que esta familia existe junto a los Transformers

Uno podria preguntar: por que no generar imagenes como generamos texto, token a token? La respuesta es sutil.

Para el texto, el orden es natural: leemos de izquierda a derecha, y cada palabra depende de las anteriores. Para una imagen, no hay orden canonico. Generar pixel a pixel introduce artefactos (los primeros pixeles no tienen el contexto de los ultimos). La difusion resuelve este problema generando toda la imagen en paralelo, refinada globalmente en cada paso.

Por eso los enfoques autoregresivos sobre los pixeles (como PixelRNN, o el ImageGPT inicial de OpenAI) fueron abandonados en favor de la difusion. El unico retorno posible seria via los modelos autoregresivos sobre tokens de imagen (DALL-E 1, y ahora Chameleon de Meta) — pero todavia son menos eficientes que la difusion en calidad fotorrealista.

La difusion no es un Transformer. Es otra forma, matematicamente ortogonal, de aprender una distribucion compleja — y para las imagenes, es la que ha ganado.

Actualizado el

Diffusion: generar imágenes eliminando ruido · Step by Token