GAN: generador y discriminador
Teoría de juegos min-max, inestabilidad del entrenamiento de GAN, colapso de modos e implementación de DCGAN.
GAN: generador y discriminador es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué es una GAN?
Una red generativa antagónica enfrenta dos redes: un generador, que crea datos falsos, y un discriminador, que determina si son reales o falsos. Ambas compiten y el generador aprende a producir muestras convincentes.
El juego antagónico
Piense en un falsificador (el generador) y un detective (el discriminador). El falsificador mejora sus imitaciones para engañar al detective, y el detective agudiza su criterio. Esta competición impulsa a ambos a mejorar hasta que las falsificaciones parecen reales.
El generador
El generador transforma un vector de ruido aleatorio en una imagen falsa. Aprende a convertir números aleatorios sin significado en datos estructurados y de apariencia realista.
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(100, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Tanh()
)
def forward(self, z):
return self.net(z)El vector de ruido
La entrada z se muestrea de una normal estándar. Distintos vectores de ruido producen imágenes diferentes, por lo que el ruido es la «semilla» de la generación. Su dimensión (100 en este caso) es el tamaño latente.
z = torch.randn(batch_size, 100)
fake_images = generator(z)El discriminador
El discriminador recibe una imagen y produce una única probabilidad: la probabilidad de que sea real. Una Sigmoid genera un valor en [0,1], donde 1 significa real y 0 significa falso.
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid()
)Entrenamiento del discriminador
Entrene D con un lote de imágenes reales etiquetadas con 1 y de imágenes falsas etiquetadas con 0. Aprende a aumentar las puntuaciones de las imágenes reales y a reducir las de las falsas mediante entropía cruzada binaria.
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()¿Por qué usar detach() con las muestras falsas?
Al entrenar D usamos fake.detach() para que los gradientes no fluyan hacia el generador. En este paso solo actualizamos el discriminador; el generador tendrá su turno por separado.
Entrenamiento del generador
Ahora entrene G para engañar a D: pase las muestras falsas por D y premie al generador cuando D produzca real (etiqueta 1). El generador mejora haciendo que D crea que sus muestras falsas son reales.
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()Entrenamiento alternado
Cada iteración alterna ambos pasos: primero se actualiza D y después G. Mantenerlos aproximadamente equilibrados es fundamental: si D se vuelve demasiado potente, G no recibe un gradiente útil; si es demasiado débil, G no tiene ningún desafío.
# per step
# 1) update Discriminator
# 2) update GeneratorColapso de modos
Un fallo clásico es el colapso de modos: el generador encuentra una o unas pocas salidas que engañan a D y produce únicamente esas, ignorando la variedad de los datos. Síntoma: todas las muestras generadas tienen un aspecto casi idéntico.
Inestabilidad del entrenamiento
Las GAN son conocidas por ser inestables: las pérdidas oscilan, una red puede imponerse a la otra y la convergencia es frágil. Técnicas como LeakyReLU, unas tasas de aprendizaje cuidadosas y el label smoothing ayudan a estabilizar el entrenamiento.
Comprobación rápida
Compruebe su comprensión de las GAN.
Repaso: GAN
Aprendió la configuración antagónica: un generador transforma un vector de ruido en muestras falsas; un discriminador produce una probabilidad de real o falso; y ambos se entrenan alternadamente, primero D y después G. También aprendió a identificar el colapso de modos y la inestabilidad general que hace que las GAN sean difíciles de entrenar.
Preguntas frecuentes
¿La lección «GAN: generador y discriminador» es gratis?
Sí — el texto completo de «GAN: generador y discriminador» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué aprenderé en «GAN: generador y discriminador»?
Teoría de juegos min-max, inestabilidad del entrenamiento de GAN, colapso de modos e implementación de DCGAN. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn AI with Python?
No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «GAN: generador y discriminador»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?
Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Autoencoders para aprendizaje de representaciones
- Autoencoders variacionales (VAE)
- GAN: generador y discriminador
- GAN condicionales y transferencia de estilo