🧮 Computational Mathematics

Inicio · Parte 16 — Matemática de Transformers, modelos generativos, grafos y RL

333 — GAN y juegos minimax

experto clase 13 de 20 4 horas demostración gan_minimax

En el equilibrio de una GAN el discriminador acierta el 50 %: no distingue nada.

Fórmulas

min_G max_D  E[log D(x)] + E[log(1 − D(G(z)))]
D*(x) = p_datos(x) / (p_datos(x) + p_G(x))
en el equilibrio D = 0,5 y la pérdida vale log 2

Desarrollo

Una GAN enfrenta dos redes con objetivos opuestos. El generador produce muestras falsas intentando parecer real; el discriminador intenta distinguir reales de falsas. El entrenamiento es un juego minimax, y el objetivo del generador es hacer fracasar al discriminador.

El resultado teórico central es que el discriminador óptimo tiene forma cerrada: la proporción de densidad real sobre densidad total. Sustituyendo ese óptimo en el objetivo, se obtiene que el generador está minimizando 2·JS(p_datos ‖ p_G) − log 4, es decir, la divergencia de Jensen-Shannon de la clase 265. El objetivo de las GAN no se inventó como divergencia: resulta serlo.

En el equilibrio ideal, generador y datos tienen la misma distribución, el discriminador óptimo vale 0,5 en todas partes y la pérdida vale log 2 ≈ 0,693. Ese número es el diagnóstico: una pérdida de discriminador que se estabiliza cerca de 0,693 indica equilibrio; una que se va a cero indica que el discriminador ha ganado y el generador ya no recibe señal útil.

La inestabilidad práctica tiene una causa identificable en esa misma teoría: si los soportes de ambas distribuciones no se solapan, la JS es constante y su gradiente es cero. Esa observación motivó WGAN, que sustituye JS por la distancia de Wasserstein, precisamente porque esta sí da gradiente útil cuando los soportes están separados.

Ejemplo trabajado

Tres escenarios del juego y el punto de equilibrio.

objetivo: min_G max_D E[log D(x)] + E[log(1 − D(G(z)))]

escenario "D gana":
  D(real) = 0,99    D(falso) = 0,01
  pérdida de D = 0,01005      muy baja
  el generador recibe gradiente casi nulo

escenario de equilibrio:
  D(real) = 0,50    D(falso) = 0,50
  pérdida teórica = log 2 = 0,693147                 ✓

D óptimo: D*(x) = p_datos / (p_datos + p_G)
  si p_G = p_datos  →  D* = 0,5 en todas partes

El objetivo original equivale a minimizar
2·JS(p_datos ‖ p_G) − log 4.

Qué calcula el laboratorio

GAN: el equilibrio del juego minimax y su punto óptimo.

python classes/part-16-matematica-de-transformers-modelos-generativos-grafos-y-rl/333-gan-y-juegos-minimax/lab.py
compmath run 333

Salidas del laboratorio (9)

Muestra de la ejecución real

{
  "objetivo": "min_G max_D E[log D(x)] + E[log(1 - D(G(z)))]",
  "escenarios": {
    "D_gana": {
      "D(real)": 0.99,
      "D(falso)": 0.01,
      "perdida_D": 0.01005,
      "perdida_G_saturante": -0.01005,
      "perdida_G_no_saturante": 4.60517
    },
    "equilibrio": {
      "D(real)": 0.5,
      "D(falso)": 0.5,
      "perdida_D": 0.693147,
      "perdida_G_saturante": -0.693147,
      "perdida_G_no_saturante": 0.693147
    },
    "G_gana": {
      "D(real)": 0.4,
      "D(falso)": 0.6,
      "perdida_D": 0.916291,
      "perdida_G_saturante": -0.916291,
      "perdida_G_no_saturante": 0.510826
    }
  },
  "D_optimo": "D*(x) = p_datos(x) / (p_datos(x) + p_G(x))",
  "en_el_equilibrio_D=0.5": true,
  "perdida_teorica_en_equilibrio": 0.693147,
  "el_objetivo_original_equivale_a": "minimizar 2·JS(p_datos ‖ p_G) - log 4"
}

Errores comunes

Dónde se usa

Generación de imágenes, superresolución, traducción entre dominios, aumento de datos y generación de datos sintéticos.

Idea rectora de la parte

Temperatura, top-k y top-p reescriben la distribución antes de muestrear.

Error a evitar

Olvidar la máscara causal en el modelado autoregresivo.

Conexión con IA

Esta parte es la traducción matemática directa de los papers que definen el estado del arte actual.

Bibliografía de la clase

Archivos de la clase