Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Modelos generativos: GANs, VAEs, Unidad 9 — Comparación VAEs vs GANs, 9.1 — Diferencias fundamentales ·

Probabilístico vs adversarial

Probabilístico vs adversarial: Comparando VAEs y GANs

Introducción

En el mundo de la inteligencia artificial generativa, dos metodologías predominan: los modelos probabilísticos (VAEs) y los modelos adversariales (GANs). Cada uno tiene sus fortalezas y debilidades. Comprender estas diferencias fundamentales es crucial para elegir la herramienta adecuada en función de las necesidades del proyecto.

Explicación principal con ejemplos

VAEs: Modelos probabilísticos

Los modelos variacionales autoencoder (VAEs) son baseados en principios probables. Tratan de aprender una representación compacta del espacio de datos a través de una distribución probabilística. La arquitectura típica consta de un encoder que codifica los datos observados y un decoder que genera las muestras a partir de la representación latente.

Ejemplo práctico

from tensorflow.keras import layers, models

def build_vae(input_shape):
    # Encoder
    inputs = layers.Input(shape=input_shape)
    x = layers.Flatten()(inputs)
    z_mean = layers.Dense(128)(x)
    z_log_var = layers.Dense(128)(x)
    
    def sampling(args):
        z_mean, z_log_var = args
        epsilon = tf.random.normal(shape=tf.shape(z_mean))
        return z_mean + tf.exp(z_log_var / 2) * epsilon
    
    z = layers.Lambda(sampling)([z_mean, z_log_var])
    
    # Decoder
    decoder_inputs = layers.Input(shape=(128,))
    x = layers.Dense(7*7*128)(decoder_inputs)
    x = layers.Reshape((7, 7, 128))(x)
    outputs = layers.Conv2DTranspose(3, (5, 5), padding='same', activation='sigmoid')(x)

    vae = models.Model(inputs=inputs, outputs=outputs)
    
    return vae

GANs: Modelos adversariales

En contraposición a los VAEs, los Generative Adversarial Networks (GANs) son un juego de dos redes: el generador y el discriminador. El objetivo es aprender una distribución que genere datos similares a la muestra real.

Ejemplo práctico

from tensorflow.keras import layers, models

def build_generator(input_shape):
    inputs = layers.Input(shape=input_shape)
    x = layers.Dense(256)(inputs)
    x = layers.LeakyReLU()(x)
    x = layers.Dense(512)(x)
    x = layers.BatchNormalization()(x)
    x = layers.LeakyReLU()(x)
    outputs = layers.Dense(784, activation='tanh')(x)

    generator = models.Model(inputs=inputs, outputs=outputs)
    
    return generator

def build_discriminator(input_shape):
    inputs = layers.Input(shape=input_shape)
    x = layers.Flatten()(inputs)
    x = layers.Dense(512)(x)
    x = layers.LeakyReLU()(x)
    x = layers.Dense(256)(x)
    outputs = layers.Dense(1, activation='sigmoid')(x)

    discriminator = models.Model(inputs=inputs, outputs=outputs)
    
    return discriminator

Errores típicos / trampas

1. Problemas con el balance entre reconstrucción y regularización en VAEs

El problema de overfitting es común en VAEs, especialmente si no se equilibran adecuadamente las dos partes del entrenamiento.

2. Dificultad para obtener imágenes nítidas en GANs

GANs pueden ser inestables durante el entrenamiento y generar imágenes de baja calidad o pixeladas a menudo.

3. Falta de control explícito sobre la representación en VAEs

A diferencia de los GANs, los VAEs no ofrecen un control directo sobre la representación del espacio latente.

Checklist accionable

  • Entender el balance entre reconstrucción y regularización. Utiliza técnicas como aumentar gradualmente la varianza en los VAEs.
  • Optimizar la arquitectura del discriminador en GANs para mejorar el equilibrio generador-discriminador.
  • Ajustar hiperparámetros cuidadosamente, especialmente en GANs donde incluso pequeñas variaciones pueden tener un gran impacto.

Cierre con "Siguientes pasos"

Siguientes pasos

  1. Explorar modelos de difusión: Los modelos de difusión son una alternativa interesante que combina ventajas de ambos enfoques.
  2. Investigar GANs condicionales (Conditional GANs): Estos permiten controlar la salida generada, lo que puede ser útil para aplicaciones donde se requiere control directo sobre las características del dato generado.
  3. Aprender a usar StyleGAN: Este modelo avanzado de GANs es excelente para generar imágenes realistas y con control detallado.

Entender estas diferencias fundamentales te ayudará a elegir la herramienta adecuada en función de tus necesidades, ya sea para aplicaciones donde el control explícito sobre la representación es crucial o donde se requiere una generación realista sin demasiada regularización.

Contacto

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