GAN generativa
Objetivo
Generar prendas a partir de imágenes reales de Fashion-MNIST.
Dataset real
- Dataset:
fashion_mnist - Fuente: Torchvision / Zalando Research
- Referencia: https://github.com/zalandoresearch/fashion-mnist
- Licencia/condiciones: MIT
- Uso: los datos se descargan desde la fuente; no hay ejemplos sintéticos ni archivos inventados.
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
- Descargar y verificar la procedencia.
- Conservar o crear una partición reproducible.
- Ajustar transformaciones únicamente con
train. - Seleccionar modelo e hiperparámetros usando
validation. - Evaluar
testuna sola vez tras congelar la decisión. - Comparar con la línea base: PCA generativa y distribución real de referencia.
- 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
notebook.ipynb: recorrido completo y ejecutable.notebook_student.ipynb: actividades evaluables sin soluciones.notebook_solution.ipynb: resolución docente y pruebas de referencia.train.py: interfaz de terminal que usa el mismo código del cuaderno.configs/baseline.yaml: configuración base.configs/improved.yaml: configuración ampliada.data/dataset.yaml: procedencia, licencia y política de partición.
Ejercicios
- Cambiar una decisión experimental y justificarla.
- Analizar errores por clase o segmento.
- Comparar costo, precisión y latencia.
- Documentar sesgos, limitaciones y usos no recomendados.
Material formativo v3
theory.md: fundamento, protocolo y riesgos de interpretación.experiments.md: hipótesis, variables controladas y tabla multi-semilla.assessment.md: preguntas y rúbrica de evaluación.lesson.yaml: resultados de aprendizaje, prerrequisitos y entregables.
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
- Ajustar transformaciones, vocabulario, normalización y selección de variables solo con
train. - Usar
validationpara arquitectura, hiperparámetros, checkpoint y umbrales. - Evaluar
testuna vez, después de congelar las decisiones. - Comparar contra PCA generativa y distribución real de referencia.
- Reportar variación entre semillas e intervalos de confianza; una métrica puntual no expresa toda la incertidumbre.
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
- Foster — Generative Deep Learning (2.ª ed., O'Reilly) — tratamiento práctico de GANs, DCGAN y evaluación de modelos generativos.
- Goodfellow, Bengio & Courville — Deep Learning (MIT Press, 2016), cap. 20 — modelos generativos profundos y fundamentos del marco adversarial.
- Goodfellow et al. (2014), Generative Adversarial Nets, NeurIPS — formulación original del juego minimax y prueba del óptimo p_g = p_data.
- Radford, Metz & Chintala (2016), Unsupervised Representation Learning with Deep Convolutional GANs (DCGAN), ICLR — arquitectura convolucional que estabilizó el entrenamiento de GANs sobre imágenes.
- Fuente del dataset: https://github.com/zalandoresearch/fashion-mnist
- Consulte
docs/experiment-protocol.md,docs/reproducibility.mdydocs/ethics-and-licenses.md.
🔬 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
- Ejecutar
baseline.yamlcon tres semillas. - Ejecutar
improved.yamlcon las mismas semillas. - Mantener fija la partición de datos dentro de cada semilla.
- Elegir la variante con
validation. - Comparar la variante elegida contra la línea base en
test. - Revisar intervalos de confianza, errores y costo computacional.
Experimento específico
Vigilar colapso de modos y estabilidad.
Variables controladas
- Dataset y política de partición.
- Semillas declaradas.
- Presupuesto de épocas y criterio de parada.
- Métrica de selección:
generator_losso la especificada en la configuración. - Hardware y versiones registradas en
environment.json.
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
- Dataset preparado y auditoría sin solapamientos.
- Notebook ejecutado sin celdas omitidas.
- Línea base y modelo neuronal comparados.
- Resultados de al menos tres semillas o justificación del costo.
- Análisis de errores y limitaciones.
- Model card actualizada.
Preguntas
- Explique con sus palabras: min_G max_D E[log D(x)] + E[log(1-D(G(z)))].
- ¿Qué información del dataset solo puede utilizarse durante entrenamiento?
- ¿Por qué la línea base PCA generativa y distribución real de referencia es una comparación razonable?
- ¿Cómo se distingue diversidad real de ruido visual?
- ¿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.