Autoencoders variacionales (VAE)
Pérdida ELBO, truco de reparametrización, exploración del espacio latente y generación de imágenes con VAE.
Autoencoders variacionales (VAE) es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 2 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.
Del autoencoder al VAE
Un autoencoder convencional aprende puntos dispersos, por lo que muestrear otros nuevos produce resultados sin sentido. Un autoencoder variacional (VAE) aprende un espacio latente suave y continuo del que se puede muestrear, convirtiéndolo en un verdadero modelo generativo.
Codificación en una distribución
En lugar de un solo punto, el codificador de un VAE genera una distribución para cada entrada: una media mu y un logaritmo de la varianza log_var. Cada entrada se asigna a una pequeña región difusa del espacio latente, no a un único punto.
class Encoder(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(784, 256)
self.fc_mu = nn.Linear(256, 64)
self.fc_logvar = nn.Linear(256, 64)¿Por qué mu y log_var?
Predecimos log_var en lugar de la varianza directamente porque puede ser cualquier número real, sin la restricción de positividad, y es numéricamente estable. Al exponenciarlo se recupera la varianza cuando es necesario.
def forward(self, x):
h = torch.relu(self.fc(x))
return self.fc_mu(h), self.fc_logvar(h)Muestreo del latente z
Para decodificar, debemos muestrear z a partir de la distribución predicha. Este muestreo aleatorio no es diferenciable de forma directa, por lo que no podemos retropropagar a través de él. El truco de reparametrización resuelve este problema.
El truco de reparametrización
Reescriba la muestra como z = mu + eps * exp(0.5 * log_var), donde eps es ruido aleatorio. Ahora la aleatoriedad queda en eps, que no necesita gradiente, y los gradientes fluyen a través de mu y log_var.
def reparameterize(mu, log_var):
std = torch.exp(0.5 * log_var)
eps = torch.randn_like(std)
return mu + eps * stdEl decodificador
El decodificador recibe el z muestreado y reconstruye la imagen, igual que el decodificador de un autoencoder normal, expandiendo las 64 dimensiones de nuevo a 784 píxeles mediante una salida Sigmoid.
decoder = nn.Sequential(
nn.Linear(64, 256),
nn.ReLU(),
nn.Linear(256, 784),
nn.Sigmoid()
)Término de pérdida de reconstrucción
La primera parte de la pérdida del VAE es la reconstrucción: mide cuánto se parece la imagen decodificada a la entrada. Se utiliza entropía cruzada binaria (o MSE) sobre los píxeles.
recon_loss = nn.functional.binary_cross_entropy(
recon, x, reduction="sum"
)El término de divergencia KL
La segunda parte es la divergencia KL, que aproxima cada distribución codificada a una normal estándar. Esto regulariza el espacio latente para que sea suave y continuo, lo que permite generar datos.
kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())El objetivo ELBO
Los VAE maximizan el ELBO (límite inferior de la evidencia), lo que equivale a minimizar reconstruction + KL. La reconstrucción hace que las salidas sean fieles; KL mantiene el espacio bien estructurado. Equilibrar ambos términos es fundamental.
loss = recon_loss + kl
loss.backward()Generación de imágenes nuevas
Como el espacio latente coincide con una normal estándar, puede generar imágenes completamente nuevas muestreando z de N(0,1) y decodificándolo, sin necesidad de una imagen de entrada.
with torch.no_grad():
z = torch.randn(16, 64)
new_images = decoder(z) # 16 generated samplesPor qué importan los VAE
Los VAE proporcionan un espacio latente suave y fundamentado que se puede interpolar y muestrear. Sirven de base para muchas técnicas generativas y enseñan la idea fundamental de aprender distribuciones, no solo puntos.
Comprobación rápida
Compruebe su comprensión de los VAE.
Repaso: autoencoders variacionales
Aprendió qué es un VAE: un codificador genera mu y log_var; el truco de reparametrización z = mu + eps * exp(0.5 * log_var) mantiene diferenciable el muestreo; y la pérdida es ELBO = reconstruction + KL. Muestrear z de N(0,1) y decodificarlo genera imágenes nuevas.
Preguntas frecuentes
¿La lección «Autoencoders variacionales (VAE)» es gratis?
Sí — el texto completo de «Autoencoders variacionales (VAE)» 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 «Autoencoders variacionales (VAE)»?
Pérdida ELBO, truco de reparametrización, exploración del espacio latente y generación de imágenes con VAE. 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 2 de 4.
¿Cuánto tiempo toma la lección «Autoencoders variacionales (VAE)»?
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