Neural Network Training Labs
Laboratorio 08 · Central · 9 / 31

🎨 GAN generativa

GAN generativa

Objetivo

Generar prendas a partir de imágenes reales de Fashion-MNIST.

Dataset real

No usa anillos ni puntos inventados; entrena con prendas reales etiquetadas.

Fundamento matemático

min_G max_D E[log D(x)] + E[log(1-D(G(z)))].

Protocolo experimental

  1. Descargar y verificar la procedencia.
  2. Conservar o crear una partición reproducible.
  3. Ajustar transformaciones únicamente con train.
  4. Seleccionar modelo e hiperparámetros usando validation.
  5. Evaluar test una sola vez tras congelar la decisión.
  6. Comparar con la línea base: PCA generativa y distribución real de referencia.
  7. Guardar configuración, entorno, métricas, predicciones, gráficos y modelo.

Ejecución

python labs/08_gan_generation/train.py --quick
python labs/08_gan_generation/train.py --config improved

Preparar únicamente el dataset:

python -m neural_labs.cli dataset --lab 08_gan_generation

Inferencia y exportación:

neural-labs predict --lab 08_gan_generation --run latest --input sample.json
neural-labs export --lab 08_gan_generation --run latest --format onnx --verify

Métricas

generator_loss, discriminator_loss, mmd_rbf, diversity, nearest_real_distance, moment_distance.

Archivos

Ejercicios

Material formativo v3

Comandos profesionales

neural-labs quality --lab 08_gan_generation --quick
neural-labs benchmark --lab 08_gan_generation --quick --split-seed 42 --training-seeds 41 42 43
neural-labs leaderboard

Sellado del experimento

La partición se controla con split_seed; la inicialización y el entrenamiento con training_seed. El conjunto test se abre solamente después de seleccionar el checkpoint mediante validación y escribir experiment.lock.json.

🧠 Teoría

Teoría — GAN generativa

Propósito

Generar prendas a partir de imágenes reales de Fashion-MNIST.

Idea central

Este laboratorio estudia aprendizaje adversarial generativo usando fashion_mnist, un dataset público real procedente de Torchvision / Zalando Research.

Una red generativa adversarial (GAN) plantea el aprendizaje como un juego entre dos redes con objetivos opuestos. El generador G toma ruido aleatorio z y trata de producir imágenes que parezcan prendas reales. El discriminador D es un clasificador que recibe una imagen y estima la probabilidad de que sea real (proveniente del dataset) y no falsa (generada por G). Ambos se entrenan a la vez: D mejora en distinguir real de falso, y G mejora en engañar a D. La metáfora habitual es la del falsificador (G) y el detective (D): cada uno fuerza al otro a mejorar, y en el equilibrio ideal el falsificador produce prendas indistinguibles de las auténticas.

Lo elegante es que G nunca ve las imágenes reales directamente ni recibe una pérdida de reconstrucción píxel a píxel; aprende solo a través del gradiente que le pasa D. En vez de decirle a G "copia esta imagen", D le dice "esto todavía se nota falso por aquí", y ese señal guía a G hacia la variedad de imágenes plausibles. Este laboratorio usa una DCGAN (GAN convolucional profunda), donde G usa convoluciones transpuestas para expandir el ruido hasta una imagen de 28×28 y D usa convoluciones para clasificarla; esta receta convolucional es la que estabilizó el entrenamiento de GANs sobre imágenes.

Fundamento matemático

El objetivo original es un juego minimax de suma cero sobre el valor V(D, G):

min_G max_D  V(D, G) = 𝔼_{x∼p_data}[ log D(x) ] + 𝔼_{z∼p_z}[ log(1 − D(G(z))) ]

Leámoslo por partes. El discriminador D quiere maximizar V: para muestras reales x quiere D(x) → 1 (así log D(x) → 0, su máximo), y para muestras falsas G(z) quiere D(G(z)) → 0 (así log(1 − D(G(z))) → 0). El generador G quiere minimizar V respecto al segundo término: busca que D(G(z)) → 1, es decir, engañar a D. z se muestrea de una distribución simple p_z (típicamente 𝒩(0, I)) y G la transforma en la distribución generada p_g. El entrenamiento alterna pasos: se congela G y se da un paso de ascenso de gradiente en θ_D, luego se congela D y se da un paso de descenso en θ_G.

¿Por qué este juego produce imágenes realistas? Goodfellow et al. probaron que, para un G fijo, el discriminador óptimo es D(x) = p_data(x) / (p_data(x) + p_g(x)). Sustituyendo D en V, el objetivo de G se vuelve equivalente a minimizar la divergencia de Jensen–Shannon entre la distribución real p_data y la generada p_g (salvo constantes): min_G V = 2·D_JS(p_data ‖ p_g) − log 4. El mínimo global se alcanza cuando p_g = p_data, es decir, cuando el generador reproduce exactamente la distribución de las prendas reales y D no puede hacer mejor que responder ½ en todo. Ese es el sentido preciso de "generar imágenes indistinguibles".

En la práctica, el término log(1 − D(G(z))) tiene gradiente casi nulo justo cuando G es malo (al inicio, D lo detecta con facilidad), así que se suele entrenar G maximizando 𝔼_z[ log D(G(z)) ] —el truco del "gradiente no saturante"— que apunta al mismo óptimo pero da señal fuerte desde el principio. Conectando con los cuatro elementos: la representación de entrada es el vector de ruido z para G y la imagen (28×28) para D; la función del modelo son las dos redes convolucionales G y D; la función de pérdida es la entropía cruzada binaria derivada de V (una para D, otra para G); y la regla de actualización son los dos pasos de gradiente alternados θ_D ← θ_D + η ∇{θ_D} V y θ_G ← θ_G − η ∇ V. El notebook muestra las dimensiones de los tensores en cada capa y conserva la misma implementación que el script de terminal.

El riesgo técnico característico es el colapso de modos (mode collapse): G descubre unas pocas imágenes que engañan a D y las produce siempre, perdiendo diversidad aunque la pérdida parezca buena. Por eso este laboratorio no se conforma con las curvas de pérdida y mide diversidad, distancia al vecino real más cercano y discrepancia de momentos: distinguir diversidad real de ruido visual o de un puñado de prototipos repetidos es exactamente el reto de evaluar una GAN.

Protocolo científico

Riesgos de interpretación

No usa anillos ni puntos inventados; entrena con prendas reales etiquetadas.

El dataset refleja su proceso de recolección y no representa automáticamente otros períodos, países o poblaciones. Una asociación predictiva no demuestra causalidad.

Pregunta crítica

¿Cómo se distingue diversidad real de ruido visual?

Las referencias apuntan a las obras; no se reproduce su contenido, la redacción es original.

🔗 Referencias

🔬 Experimentos

Plan de experimentos — GAN generativa

Hipótesis principal

Generar prendas a partir de imágenes reales de Fashion-MNIST. La hipótesis debe aceptarse o rechazarse comparando el modelo con PCA generativa y distribución real de referencia y no solo observando que la pérdida disminuye.

Experimento mínimo

  1. Ejecutar baseline.yaml con tres semillas.
  2. Ejecutar improved.yaml con las mismas semillas.
  3. Mantener fija la partición de datos dentro de cada semilla.
  4. Elegir la variante con validation.
  5. Comparar la variante elegida contra la línea base en test.
  6. Revisar intervalos de confianza, errores y costo computacional.

Experimento específico

Vigilar colapso de modos y estabilidad.

Variables controladas

Tabla que debe completarse

Variante Semilla Métrica validation Métrica test Tiempo Parámetros Observación
baseline 41
baseline 42
baseline 43
improved 41
improved 42
improved 43

Criterio de conclusión

La conclusión debe declarar magnitud de la mejora, incertidumbre, costo adicional, errores relevantes y condiciones bajo las cuales el resultado podría no repetirse.

📝 Evaluación

Evaluación — GAN generativa

Evidencias obligatorias

Preguntas

  1. Explique con sus palabras: min_G max_D E[log D(x)] + E[log(1-D(G(z)))].
  2. ¿Qué información del dataset solo puede utilizarse durante entrenamiento?
  3. ¿Por qué la línea base PCA generativa y distribución real de referencia es una comparación razonable?
  4. ¿Cómo se distingue diversidad real de ruido visual?
  5. ¿Qué cambiaría antes de usar este modelo fuera del laboratorio?

Rúbrica

Criterio Insuficiente Adecuado Excelente Peso
Integridad de datos mezcla particiones separación correcta auditoría, hashes y justificación 20%
Implementación no ejecuta entrena y evalúa código claro, reusable y probado 20%
Diseño experimental resultado aislado comparación controlada multi-semilla e incertidumbre 20%
Análisis repite métricas interpreta errores identifica sesgos, límites y costo 25%
Comunicación incompleta reporte entendible model card y conclusiones verificables 15%

La aprobación exige al menos 70% y cero errores críticos de fuga de datos.