Generative Adversarial Network (GAN)
Una red generativa antagónica (GAN) entrena un generador frente a un discriminador hasta que sus muestras parecen reales. Incluye el entrenamiento, las variantes y los usos.
Una red generativa antagónica (GAN) es un modelo de IA generativa formado por dos redes neuronales entrenadas una contra otra: un generador convierte ruido aleatorio en muestras y un discriminador intenta distinguir esas muestras de los datos de entrenamiento reales. Al terminar el entrenamiento, el generador produce nuevas imágenes, audio o registros tabulares en una sola pasada hacia delante. Ian Goodfellow y sus colaboradores de la Université de Montréal presentaron las GAN en el artículo de 2014 Redes generativas antagónicas, y estas dominaron la síntesis de imágenes hasta que los modelos de difusión las superaron en 2021.
Cómo funciona el entrenamiento de las GAN#
Las dos redes participan en un juego minimax. El discriminador es un clasificador binario que devuelve la probabilidad de que su entrada sea real; se entrena con una función de pérdida de entropía cruzada para puntuar las muestras reales con un 1 y las generadas con un 0. El generador nunca ve datos reales y solo aprende a partir de los gradientes del discriminador. En el óptimo teórico del juego, la distribución generada coincide con la distribución de los datos y el discriminador devuelve 0,5 para cualquier entrada. Al principio del entrenamiento, cuando es fácil detectar las falsificaciones, el objetivo original del generador apenas produce gradiente, una forma del problema del gradiente evanescente; por eso, en el artículo de Goodfellow se hizo que el generador maximizara la probabilidad de que el discriminador considerase reales sus muestras. El código siguiente utiliza esta pérdida no saturante.
Una GAN unidimensional en PyTorch aprende una distribución gaussiana únicamente a partir de muestras:
import torch
from torch import nn
torch.manual_seed(0)
# Generator maps 8-D noise to a number; discriminator scores a number as real (high) or fake (low)
generator = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 1))
discriminator = nn.Sequential(nn.Linear(1, 32), nn.LeakyReLU(0.2), nn.Linear(32, 1))
opt_g = torch.optim.Adam(generator.parameters(), lr=1e-3)
opt_d = torch.optim.Adam(discriminator.parameters(), lr=1e-3)
bce = nn.BCEWithLogitsLoss()
real_label, fake_label = torch.ones(64, 1), torch.zeros(64, 1)
for step in range(3000):
real = 4.0 + 1.25 * torch.randn(64, 1) # training data: samples from N(4, 1.25^2)
fake = generator(torch.randn(64, 8))
# Discriminator step: label real samples 1 and generated samples 0
loss_d = bce(discriminator(real), real_label) + bce(discriminator(fake.detach()), fake_label)
opt_d.zero_grad()
loss_d.backward()
opt_d.step()
# Generator step: push the discriminator to label generated samples 1
loss_g = bce(discriminator(fake), real_label)
opt_g.zero_grad()
loss_g.backward()
opt_g.step()
samples = generator(torch.randn(10000, 8)).detach()
print(f"Generated mean {samples.mean():.2f}, std {samples.std():.2f} (data: 4.00, 1.25)")
print(f"Discriminator's average P(real) on generated samples: {torch.sigmoid(discriminator(samples)).mean():.2f}")Tras 3000 pasos alternos, las muestras generadas tienen una media de 3,95 y una desviación típica de 1,20, frente a los valores de 4,00 y 1,25 de los datos; el discriminador les asigna una probabilidad media de 0,51 de ser reales, cerca del 0,5 de una moneda al aire, que corresponde al óptimo teórico.
Variantes principales de las GAN#
- DCGAN: El diseño de 2015 de Alec Radford, Luke Metz y Soumith Chintala permitió entrenar de forma fiable generadores y discriminadores convolucionales: sustituyó las capas de agrupamiento por convoluciones con paso y añadió normalización por lotes.
- GAN condicionales y pix2pix: Al proporcionar una etiqueta de clase o una imagen de entrada a ambas redes, el generador puede producir un resultado solicitado. pix2pix, de Phillip Isola y sus colaboradores (2017), aprende traducciones a partir de pares, como de mapas de etiquetas a fotografías de calles y de bordes a fotografías de productos.
- CycleGAN: Aprende a traducir entre dos colecciones de imágenes sin ejemplos emparejados —por ejemplo, de caballos a cebras o de paisajes de verano a paisajes de invierno— y exige que la imagen traducida pueda transformarse de nuevo en la original.
- Wasserstein GAN (WGAN): En 2017, Martin Arjovsky y sus colaboradores sustituyeron el clasificador por un crítico que estima la distancia de Wasserstein entre los datos reales y los generados; así se mantienen gradientes útiles incluso cuando las dos distribuciones apenas se solapan.
- StyleGAN: StyleGAN (2018) y StyleGAN2 (2019), de NVIDIA, introducen un vector de estilo aprendido en cada capa del generador. StyleGAN2 obtuvo una distancia de Inception de Fréchet (FID) de 2,84 con caras de 1024 x 1024 del conjunto de datos FFHQ.
Aplicaciones#
- Superresolución: SRGAN (2017), ESRGAN (2018) y Real-ESRGAN (2021) añaden una pérdida adversarial a las redes de ampliación, lo que recupera texturas nítidas allí donde una pérdida basada únicamente en píxeles produce desenfoque.
- Aumento de imágenes médicas: Maayan Frid-Adar y sus colaboradores entrenaron GAN con tomografías computarizadas de 182 lesiones hepáticas y añadieron las lesiones sintéticas al entrenamiento; así, la sensibilidad del clasificador aumentó del 78,6 % al 85,7 % y la especificidad, del 88,4 % al 92,4 %.
- Ultrafalsos: En un estudio de 2022 de Sophie Nightingale y Hany Farid, los participantes identificaron como reales o sintéticas las caras de StyleGAN2 con una precisión del 48 %, ligeramente inferior al azar, y consideraron que las caras sintéticas eran más dignas de confianza.
Las imágenes generadas por GAN se utilizan como datos sintéticos cuando escasean los ejemplos reales, como una capa de aumento de datos sobre transformaciones geométricas como giros y rotaciones. Se incorporan a un conjunto de entrenamiento de YOLO26 igual que cualquier otra imagen: la división de entrenamiento de un archivo YAML de conjunto de datos de detección de Ultralytics admite una lista de directorios, así que las imágenes sintéticas pueden guardarse en su propia carpeta junto a las reales y añadirse o quitarse editando una sola línea.
GAN frente a modelos de difusión y VAE#
Los modelos de difusión superaron a las GAN en calidad de imagen después de que Prafulla Dhariwal y Alex Nichol, de OpenAI, informaran en 2021 de que un modelo de difusión había obtenido un FID mejor en ImageNet que BigGAN-deep, la GAN más potente de entonces. El entrenamiento de difusión es un problema de regresión estable y sin adversarios, y representa con mayor amplitud la variedad de los datos. El entrenamiento de las GAN puede oscilar sin converger o sufrir un colapso de modos, en el que el generador se limita a unos pocos resultados que engañan al discriminador y deja de producir los demás. Los autocodificadores variacionales también se entrenan de forma estable, pero sus muestras son más borrosas. La principal ventaja que conservan las GAN es la velocidad, ya que generar una muestra requiere una sola pasada hacia delante: GigaGAN, de Adobe Research, Carnegie Mellon University y POSTECH, generó resultados de texto a imagen de 512 píxeles en 0,13 segundos en 2023. Las pérdidas adversariales también siguen utilizándose dentro de los sistemas de difusión. El autocodificador de Stable Diffusion se entrena con un discriminador basado en parches, y SDXL Turbo, de Stability AI, utiliza destilación adversarial de difusión, una forma de destilación de conocimiento que incluye un discriminador en la pérdida, para generar una imagen en un solo paso.










