Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Modelos generativos: GANs, VAEs, Unidad 3 — Variational Autoencoders (VAE), 3.2 — Fundamentos probabilísticos ·

Inferencia variacional

Inferencia variacional: Fundamentos probabilísticos para modelos generativos

Introducción

La inferencia variacional es una técnica clave que permite convertir problemas de aprendizaje no supervisado en problemas solubles con métodos de optimización. En el contexto de los modelos generativos como Variational Autoencoders (VAEs), la inferencia variacional nos permite modelar distribuciones complejas en el espacio latente y generar muestras realistas a partir de ellas. Esta técnica es fundamental para comprender cómo funcionan estos modelos y cómo mejorarlos.

Explicación principal

La inferencia variacional se basa en minimizar una distorsión entre la distribución del modelo y la distribución real de los datos. Este proceso implica dos componentes principales: el encoder y el decoder, que trabajan juntos para aprender las propiedades latentes de un conjunto de datos.

Conceptos clave

  1. Inferencia variacional (VI):

La idea es encontrar una aproximación a la distribución posterior \( p(z|x) \), donde \( z \) representa las variables latentes y \( x \) los datos observados. Usamos una familia paramétrica de distribuciones \( q(z; \theta) \) para aproximar \( p(z|x) \).

  1. Entropía Kullback-Leibler (KL):

El objetivo es minimizar la divergencia KL entre \( q(z; \theta) \) y \( p(z|x) \). Formalmente, esto se expresa como: \[ \mathcal{L} = -\mathbb{E}_{q(z;\theta)}[\log p(x|z)] + D_{KL}(q(z;\theta)||p(z)) \]

  1. Estimación de elipse (ELBO):

La función de pérdida total \( \mathcal{L} \) puede ser aproximada mediante la Entropía de Lower Bound (Lower Bound, LB), también conocida como el Entropy Lower Bound (ELBO): \[ ELBO = -\mathbb{E}_{q(z;\theta)}[\log q(z;\theta)] + \mathbb{E}_{q(z;\theta)}[\log p(x|z)] \]

Ejemplo práctico

Vamos a implementar una simplificación del VAE utilizando Keras, una biblioteca popular de TensorFlow. Este código muestra cómo configurar la capa encodadora y decodadora para aprender las distribuciones latentes.

from tensorflow.keras import layers, Model
import numpy as np
import tensorflow as tf

# Configuración del modelo
latent_dim = 2
input_shape = (32,) # Ajuste a su caso de uso

class VAE(tf.keras.Model):
    def __init__(self, latent_dim=latent_dim):
        super(VAE, self).__init__()
        self.latent_dim = latent_dim
        self.encoder = tf.keras.Sequential([
            layers.InputLayer(input_shape=input_shape),
            layers.Dense(32, activation='relu'),
            layers.Dense(latent_dim + latent_dim, name="encoder_output")
        ])

        self.decoder = tf.keras.Sequential([
            layers.InputLayer(input_shape=(latent_dim,)),
            layers.Dense(32, activation='relu'),
            layers.Dense(np.prod(input_shape), activation='sigmoid'),
            layers.Reshape(target_shape=input_shape)
        ])
    
    def call(self, x):
        z_mean, z_log_var = self.encoder(x)
        z = self.reparameterize(z_mean, z_log_var)
        reconstructed = self.decoder(z)
        return reconstructed

    @tf.function
    def reparameterize(self, mean, logvar):
        eps = tf.random.normal(shape=mean.shape)
        return eps * tf.exp(logvar * .5) + mean

# Crear y compilar el modelo
vae = VAE(latent_dim)
vae.compile(optimizer='adam')

Errores típicos / trampas

  1. Overfitting variacional:

Asegúrate de regularizar adecuadamente tanto la capa encodadora como la decodadora para evitar overfitting. Esto puede implicar aumentar el número de capas ocultas, añadir dropout o usar técnicas de regularización.

  1. Memorización:

Si tu modelo se comporta como un mero interpolador en lugar de una generadora creativa, es posible que estés memorizando los datos en lugar de aprender las características latentes. Verifica si tus muestras generadas son únicas y no simplemente copias de la entrada.

  1. Divergencia KL excesiva:

La divergencia KL puede ser demasiado grande inicialmente, lo que dificulta el entrenamiento. Utiliza técnicas como el ajuste gradual del learning rate o agregar una regularización adicional para controlar la divergencia.

Checklist accionable

  1. Entender la función de pérdida:

Asegúrate de entender claramente cómo se calcula ELBO y cómo contribuye a la minimización de la divergencia KL.

  1. Regularización adecuada:

Ajusta las regularizaciones en el encoder y decoder para evitar overfitting o memorización. Considere técnicas como dropout, l1/l2 regularization.

  1. Visualización de distribuciones latentes:

Visualiza las distribuciones aprendidas en el espacio latente para comprender mejor cómo se comportan tus modelos.

  1. Pruebas con datos reales:

Comprueba la calidad de tu modelo utilizando conjuntos de datos reales y evalúa su rendimiento comparativamente con otros modelos generativos.

  1. Comparación con ELBO:

Monitorea el valor del Entropy Lower Bound (ELBO) durante el entrenamiento para asegurarte de que está disminuyendo de manera constante, indicando un buen ajuste a los datos.

Cierre

La inferencia variacional es una herramienta poderosa en la construcción y mejoramiento de modelos generativos como VAEs. Asegúrate de tener en cuenta las trampas comunes y seguir el checklist proporcionado para optimizar tu modelo. Continúa explorando nuevos desafíos con VAEs y otras arquitecturas de aprendizaje profundo para mejorar aún más tus capacidades generativas.

Siguientes pasos

  • Explorar variantes GAN:

Investiga diferentes tipos de GAN, como DCGAN y StyleGAN, para comparar sus ventajas y desventajas frente a VAEs.

  • Aumento de datos:

Aprende técnicas avanzadas para aumentar los datos, como data augmentation, que pueden ser útiles en conjuntos de datos limitados.

  • Entrenamiento con datasets grandes:

Experimenta con modelos VAE y GANs en conjuntos de datos más grandes para mejorar la calidad y diversidad de las muestras generadas.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).