user@devops:~$ cat README.md
DDPM Difusión
# Descripción
DDPM (Denoising Diffusion Probabilistic Model) implementado desde cero en PyTorch sobre Fashion-MNIST, la familia de modelos detrás de DALL-E 2 y Stable Diffusion. Idea: en lugar de comprimir (VAE) o competir (GAN), el modelo aprende a INVERTIR un proceso de ruido. Proceso forward fijo (sin parámetros): q(x_t|x_0) = N(x_t; √ᾱ_t·x_0, (1-ᾱ_t)·I) con schedule lineal β: 1e-4 → 0.02 en T=200 pasos, hasta convertir la imagen en ruido puro. Proceso reverse aprendido: una UNet (361,905 parámetros, 3 niveles 16/32/32 canales, embedding temporal sinusoidal 128→256→128, ResBlocks con GroupNorm+SiLU+inyección temporal, bottleneck 7×7, upsampling con F.interpolate) predice el ruido ε_θ(x_t, t) y lo resta paso a paso. Entrenamiento: loss = MSE(ε, ε_θ), 25 épocas sobre 4,000 muestras en CPU (~9 min), loss final 0.1228 con descenso monótono y suave (sin modo collapse, a diferencia de las GAN). Generación: muestrear x_T ~ N(0, I) y denoisear 200 pasos — 64 imágenes nuevas en 21s. Hallazgos: (1) en t=100 la imagen está casi destruida pero el x_0 estimado ya revela la silueta de la prenda — el modelo "ve" a través del ruido; (2) la generación es estocástica pero coherente (zapatillas, pantalones, bolsos), sin modo collapse; (3) el proceso reverse es un revelado gradual: primero la silueta global (t≈100), luego los detalles finos (t<50); (4) CPU-viable: 361K params + T=200 (vs 1000 del paper) + 4,000 muestras = convergencia en 9 min. Incluye 7 visualizaciones: forward diffusion, noise schedule, curvas de entrenamiento, 64 muestras generadas, progreso del denoise y predicción de ruido en t=25 y t=100.
# Características principales
$ DDPM desde cero en PyTorch: forward q(x_t|x_0) cerrado + reverse p_θ aprendido con UNet
$ UNet 361,905 params: 3 niveles (16/32/32 ch), embedding temporal sinusoidal, ResBlocks con GroupNorm + inyección temporal
$ Loss = MSE(ε, ε_θ(x_t, t)): el modelo solo aprende a predecir el ruido añadido
$ Schedule lineal β: 1e-4 → 0.02 en T=200 pasos (vs 1000 del paper, CPU-friendly)
$ Generación estocástica: muestrear x_T ~ N(0, I) y denoisear — 64 imágenes nuevas en 21s
$ El modelo ve a través del ruido: en t=100 el x_0 estimado ya revela la silueta de la prenda
$ Proceso reverse como revelado gradual: silueta global primero (t≈100), detalles finos después (t<50)
$ CPU-optimizado: 25 épocas sobre 4,000 muestras en ~9 min, loss final 0.1228 sin modo collapse
# Galería
# Tecnologías utilizadas