GANs (Redes Generativas Adversarias)

GANs

Vimos la IA generativa, ¡ahora veamos cómo realmente se genera!

FUENTE DE LA IMAGEN: POR EL AUTOR

INTRODUCCIÓN:

GANs, redes generativas adversarias, primero entendamos qué son las GANs. Ya he escrito un blog sobre la IA generativa donde discutimos muchos tipos de IA, la emoción de la IA y por qué la IA está en tendencia en todos los sectores como la salud, las finanzas, el comercio, el marketing y muchos más. Pero ¿cómo esta IA es capaz de generar todas esas imágenes similares, vistas fascinantes con colores intrigantes y sinfonías que son tan agradables de escuchar y mucho más? Las GANs son una parte del mundo del aprendizaje profundo y fueron introducidas por Ian Goodfellow y sus colaboradores en 2014, después de eso las GANs han captado rápidamente la atención de muchos investigadores, lo que ha resultado en mucha investigación y también ha ayudado a redefinir los límites de la creatividad y la inteligencia artificial en el mundo de la IA

1.1 ¿QUÉ SON LAS GANs Y CÓMO FUNCIONAN?

Entonces, ¿alguno de ustedes ha oído hablar de datos sintéticos? Sí, entonces fantástico. No hay problema si la respuesta es no. Los datos sintéticos son datos que no son genuinos, sino que son fabricados por algoritmos cuando no se dispone de datos reales. Incluso puedes pensar en los datos sintéticos como un conjunto de datos falso. Pero, por supuesto, ¿cómo se produce? ¿cuál es el procedimiento? ¿Dijiste el algoritmo? ¿Qué exactamente es el algoritmo? La respuesta sería, las GANs, sí, un componente de los modelos de aprendizaje profundo utilizados para tareas generativas, crea virtualmente cualquier cosa falsa, desde películas deepfake hasta fotos similares a la realidad hasta conjuntos de datos falsos de cualquier cosa.

FUENTE DE LA IMAGEN: https://developers.google.com/machine-learning/gan/gan_structure

Las GANs están compuestas por dos redes neuronales principales:

  1. EL GENERADOR

2. EL DISCRIMINADOR:

GENERADOR:

La red del generador toma ruido aleatorio como entrada, considera lo aleatorio como datos falsos completamente aleatorios y luego intenta transformarlo en datos que se asemejen a los datos originales o a su distribución objetivo. Consideremos el ejemplo de las imágenes. Al tratar con un conjunto de datos de imágenes, esta red intenta producir imágenes que se parezcan exactamente al conjunto de datos original que hemos dado como entrada, pero son completamente generadas, es decir, falsas. Entonces, en esencia, esta red aprende a mapear vectores de ruido a muestras de datos modificando sus parámetros utilizando retropropagación y descenso de gradiente.

DISCRIMINADOR:

La red del discriminador, por otro lado, funciona como un clasificador, intentando diferenciar entre datos reales del conjunto de datos original y datos falsos generados por el generador. Aprende a dar datos verdaderos con alta probabilidad y datos falsos con bajas probabilidades.

FUENTE DE LA IMAGEN: https://i0.wp.com/neptune.ai/wp-content/uploads/2022/10/fig2-Generator-and-Discriminator.png?ssl=1

El entrenamiento de las GANs comprende una batalla de ida y vuelta entre estas dos redes. Así es cómo funciona:

FASE DE ENTRENAMIENTO:

  • El generador genera datos falsos a partir de ruido aleatorio.
  • El discriminador evalúa y asigna una probabilidad tanto a los datos reales como a los datos falsos.
  • El objetivo del discriminador es mejorar su precisión de clasificación aprendiendo a discriminar entre datos verdaderos y datos falsos.
  • El objetivo del generador es generar datos lo suficientemente convincentes como para “engañar” al discriminador. Modifica sus ajustes para proporcionar datos que el discriminador sea más probable que reconozca como reales.

FASE DE COMPETICIÓN:

  • El Generador produce datos ficticios frescos.
  • El Discriminador compara los datos falsos frescos con los datos reales.
  • La capacidad de clasificación aumentada del Discriminador puede permitirle distinguir mejor los nuevos datos falsos.
  • El Generador modifica sus parámetros para crear resultados más convincentes.

Este procedimiento iterativo se repite hasta que el Generador genere datos que sean indistinguibles de los datos reales o se cumpla un requisito de detención.

El éxito de las GANs depende de encontrar un equilibrio entre el Generador y el Discriminador, donde el Generador se vuelva bueno en la producción de datos realistas y el Discriminador se vuelva excelente en discriminar entre datos genuinos y falsos. Capturando patrones sutiles y distribuciones de datos de entrenamiento, las GANs han mostrado resultados sobresalientes en una variedad de disciplinas como la generación de imágenes, transferencia de estilo, aumento de datos y más.

Aquí tienes el video más genial sobre toda la matemática detrás de la arquitectura de las GANs, explicada de manera simple y eficiente. Míralo si estás interesado: https://youtu.be/Gib_kiXgnvA

Sumérgete en el dinámico mundo de las Redes Generativas Adversarias (GANs) y las redes neuronales profundas a través de PROJECT PRO. Además de explicaciones teóricas, esta plataforma proporciona una experiencia de aprendizaje inmersiva que incluye comprensión y aplicación práctica.

No eres simplemente un estudiante pasivo con PROJECT PRO; te conviertes en un participante activo en la creación y ajuste fino de las GANs y las redes neuronales profundas. Serás guiado en cada etapa del desarrollo, desde la conceptualización de arquitecturas de modelos hasta la codificación y el uso de conjuntos de datos reales. Ya sea que estés interesado en la creación de imágenes, el aumento de datos u otras aplicaciones de GANs, PROJECT PRO tiene las herramientas y recursos para ayudarte a convertir tus ideas en proyectos del mundo real. Con esta plataforma de aprendizaje interactiva, podrás mejorar tus habilidades, explorar a tu propio ritmo y hacer realidad tus ideas creativas.

Visítalos ahora: https://bit.ly/3OlIGoF

2. VENTAJAS DE LAS GANs:

FUENTE: https://giphy.com/

Ahora que hemos aprendido sobre el funcionamiento interno de las Redes Generativas Adversarias (GANs), veamos los beneficios particulares que tienen en comparación con otros enfoques de redes neuronales profundas. Estos beneficios se extienden más allá de la generación de imágenes, el aumento de datos y la alteración de imágenes, demostrando la capacidad única de las GANs para empujar los límites de la inteligencia artificial y las aplicaciones creativas.

2.1 GENERACIÓN DE IMÁGENES DE ALTA CALIDAD:

Una de las increíbles capacidades de las GANs es su capacidad para crear imágenes de alta calidad que se asemejan estrechamente a fotografías reales. La red del Generador crea imágenes con un realismo asombroso al aprender los patrones y estructuras complejas de un conjunto de datos. Esto tiene un enorme potencial en disciplinas como el arte, el diseño y el entretenimiento, permitiendo la producción de imágenes realistas que empujan los límites de la imaginación.

2.2 AUMENTO DE DATOS Y SÍNTESIS:

Las GANs desempeñan un papel fundamental en mejorar la eficiencia de los modelos de aprendizaje automático al crear datos sintéticos. Este método, conocido como aumento de datos, implica la creación de instancias adicionales que aumentan la variedad del conjunto de datos de entrenamiento. Las GANs destacan en esta área al proporcionar datos que representan de manera precisa la distribución original. Esto es especialmente útil cuando los datos son escasos, ya que ayuda a la generalización y el rendimiento del modelo.

2.3 TRANSFERENCIA DE ESTILO Y TRADUCCIÓN DE IMAGEN A IMAGEN

Las GANs tienen la capacidad única de cambiar el estilo o contenido de las imágenes, lo que lleva a aplicaciones como la transferencia de estilo y la traducción de imágenes a imágenes. En la transferencia de estilo, las GANs pueden transferir el estilo creativo de una imagen a otra manteniendo su contenido. En la traducción de imágenes a imágenes, las GANs ayudan a traducir imágenes de un dominio a otro, como traducir imágenes satelitales en mapas o fotos en blanco y negro en imágenes en color. Esta flexibilidad abre oportunidades para la expresión creativa y soluciones prácticas en diversos sectores.

La fortaleza de las GANs radica en su capacidad para abordar estos desafíos con creatividad y elegancia, convirtiéndolas en una fuerza impulsora en la creación del futuro de la inteligencia artificial y las tecnologías creativas.

USOS REALES DE LAS GANs:

FUENTE: https://giphy.com/

Después de dominar los fundamentos de las GANs, veamos las muchas aplicaciones del mundo real donde sus habilidades brillan. Las GANs han creado piezas intrigantes en arte y diseño, como el “Retrato de Edmond de Belamy,” que se subastó como arte generado por inteligencia artificial. Las GANs son utilizadas por marcas de moda conocidas como Nike para crear diseños distintivos, mientras que en el ámbito de la salud, las GANs generan imágenes médicas sintéticas, mejorando el entrenamiento de IA de diagnóstico en tiempo real.

NVIDIA replica varios escenarios de conducción en el campo de los vehículos autónomos, acelerando las mejoras en los autos sin conductor. Los arquitectos utilizan las GANs para visualizar diseños de interiores, mientras que los entornos inmersivos generados por GANs se utilizan para mejorar los videojuegos. Las sugerencias de moda personalizadas impulsadas por GANs mejoran la experiencia de compra, mientras que la restauración de imágenes, el descubrimiento de medicamentos y otros sectores están siendo redefinidos. Las GANs son los catalizadores que convierten la visión en realidad en el arte, la tecnología y otros campos.

JUGUEMOS CON GAN UN POCO: (CÓDIGO PARA GENERAR IMÁGENES)

Este código del modelo GAN demuestra cómo construir, entrenar y visualizar los resultados de una Red Generativa Adversaria (GAN) utilizando TensorFlow y Keras. Vamos a revisar los componentes clave del código paso a paso:

FUENTE: https://giphy.com/

Paso 1: Preparar y Descargar el Conjunto de Datos:

Para comenzar, el código descarga y extrae el conjunto de datos CelebA. La colección está compuesta por fotos de rostros de celebridades. Las fotos han sido importadas y se están preprocesando. Se han normalizado en el rango [-1, 1].

import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersimport matplotlib.pyplot as pltimport osimport gdownfrom zipfile import ZipFile

os.makedirs("celeba_gan")url = "https://drive.google.com/uc?id=1O7m1010EJjLE5QxLZiM9Fpjs7Oj6e684"output = "celeba_gan/data.zip"gdown.download(url, output, quiet=True)with ZipFile("celeba_gan/data.zip", "r") as zipobj:    zipobj.extractall("celeba_gan")

dataset = keras.utils.image_dataset_from_directory(    "celeba_gan", label_mode=None, image_size=(64, 64), batch_size=32)dataset = dataset.map(lambda x: x / 255.0)

for x in dataset:    plt.axis("off")    plt.imshow((x.numpy() * 255).astype("int32")[0])    break
FUENTE: POR AUTOR (Esta sería la imagen de salida que obtendremos después de ejecutar el código anterior)

Paso 2: Definición del Modelo del Discriminador:

Se utiliza una secuencia de capas convolucionales con activaciones LeakyReLU para crear el modelo del discriminador. El discriminador intenta determinar si una imagen de entrada es genuina o fabricada (manufacturada).

discriminator = keras.Sequential(    [        keras.Input(shape=(64, 64, 3)),        layers.Conv2D(64, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Conv2D(128, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Conv2D(128, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Flatten(),        layers.Dropout(0.2),        layers.Dense(1, activation="sigmoid"),    ],    name="discriminator",)discriminator.summary()

Paso 3: Creación de un Modelo Generador:

Para producir imágenes, el modelo generador acepta vectores latentes aleatorios como entrada y gradualmente los aumenta de tamaño. Comienza con una capa densa y luego transforma la salida en un tensor 4D.

Se utilizan capas de convolución transpuesta para aumentar el tamaño de los datos y producir una imagen que imita las imágenes reales del conjunto de datos.

latent_dim = 128generator = keras.Sequential(    [        keras.Input(shape=(latent_dim,)),        layers.Dense(8 * 8 * 128),        layers.Reshape((8, 8, 128)),        layers.Conv2DTranspose(128, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Conv2DTranspose(256, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Conv2DTranspose(512, kernel_size=4, strides=2, padding="same"),        layers.LeakyReLU(alpha=0.2),        layers.Conv2D(3, kernel_size=5, padding="same", activation="sigmoid"),    ],    name="generator",)generator.summary()

Paso 4: El Modelo GAN se define de la siguiente manera:

El discriminador y generador se combinan en la clase GAN.

Incluye un método train_step para realizar un solo paso de entrenamiento tanto en el discriminador como en el generador.

El discriminador se entrena para distinguir entre imágenes reales y falsas, mientras que el generador se entrena para crear imágenes que engañen al discriminador.

Durante el entrenamiento, se inyecta ruido aleatorio en las etiquetas para mejorar la estabilidad.

class GAN(keras.Model):    def __init__(self, discriminator, generator, latent_dim):        super().__init__()        self.discriminator = discriminator        self.generator = generator        self.latent_dim = latent_dim    def compile(self, d_optimizer, g_optimizer, loss_fn):        super().compile()        self.d_optimizer = d_optimizer        self.g_optimizer = g_optimizer        self.loss_fn = loss_fn        self.d_loss_metric = keras.metrics.Mean(name="d_loss")        self.g_loss_metric = keras.metrics.Mean(name="g_loss")    @property    def metrics(self):        return [self.d_loss_metric, self.g_loss_metric]    def train_step(self, real_images):        # Muestrea puntos aleatorios en el espacio latente        batch_size = tf.shape(real_images)[0]        random_latent_vectors = tf.random.normal(shape=(batch_size, self.latent_dim))        # Los decodifica para obtener imágenes falsas        generated_images = self.generator(random_latent_vectors)        # Las combina con imágenes reales        combined_images = tf.concat([generated_images, real_images], axis=0)        # Ensambla las etiquetas que discriminan entre imágenes reales y falsas        labels = tf.concat(            [tf.ones((batch_size, 1)), tf.zeros((batch_size, 1))], axis=0        )        # Agrega ruido aleatorio a las etiquetas - ¡truco importante!        labels += 0.05 * tf.random.uniform(tf.shape(labels))        # Entrena el discriminador        with tf.GradientTape() as tape:            predictions = self.discriminator(combined_images)            d_loss = self.loss_fn(labels, predictions)        grads = tape.gradient(d_loss, self.discriminator.trainable_weights)        self.d_optimizer.apply_gradients(            zip(grads, self.discriminator.trainable_weights)        )        # Muestrea puntos aleatorios en el espacio latente        random_latent_vectors = tf.random.normal(shape=(batch_size, self.latent_dim))        # Ensambla etiquetas que dicen "todas las imágenes son reales"        misleading_labels = tf.zeros((batch_size, 1))        # Entrena el generador (¡nota que *no* debemos actualizar los pesos        # del discriminador)!        with tf.GradientTape() as tape:            predictions = self.discriminator(self.generator(random_latent_vectors))            g_loss = self.loss_fn(misleading_labels, predictions)        grads = tape.gradient(g_loss, self.generator.trainable_weights)        self.g_optimizer.apply_gradients(zip(grads, self.generator.trainable_weights))        # Actualiza las métricas        self.d_loss_metric.update_state(d_loss)        self.g_loss_metric.update_state(g_loss)        return {            "d_loss": self.d_loss_metric.result(),            "g_loss": self.g_loss_metric.result(),        }

Paso 5: Callback personalizado de visualización:

Al concluir cada época, la clase GANMonitor crea y registra una pequeña cantidad de imágenes generadas. Estas gráficas ilustran el desarrollo del generador durante el entrenamiento.

class GANMonitor(keras.callbacks.Callback):    def __init__(self, num_img=3, latent_dim=128):        self.num_img = num_img        self.latent_dim = latent_dim    def on_epoch_end(self, epoch, logs=None):        random_latent_vectors = tf.random.normal(shape=(self.num_img, self.latent_dim))        generated_images = self.model.generator(random_latent_vectors)        generated_images *= 255        generated_images.numpy()        for i in range(self.num_img):            img = keras.utils.array_to_img(generated_images[i])            img.save("generated_img_%03d_%d.png" % (epoch, i))

Paso 6: Compilación y Entrenamiento:

El modelo GAN se compila con pérdida de entropía cruzada binaria y optimizadores Adam tanto para el discriminador como para el generador. El método gan.fit se utiliza para entrenar el modelo. Se utiliza el conjunto de datos de imágenes de caras de celebridades para el entrenamiento.

El callback GANMonitor se utiliza para guardar las imágenes generadas después de cada época.

Paso 7: Bucle de Entrenamiento y Visualización:

Durante el entrenamiento, el GAN alterna entre la actualización del discriminador y el generador.

El discriminador tiene como objetivo clasificar correctamente las imágenes reales y generadas, mientras que el generador tiene como objetivo crear imágenes que puedan engañar al discriminador. Las imágenes generadas se guardan después de cada época utilizando el callback GANMonitor.

REFERENCIA DE CÓDIGO: https://keras.io/examples/generative/dcgan_overriding_train_step/

FUENTE: https://keras.io/examples/generative/dcgan_overriding_train_step/ (Esta es la imagen de salida con 30 épocas y la calidad aumentará con un número mayor de épocas)

No olvides seguirnos en las redes sociales y compartir tus opiniones. Únete a nuestra comunidad de entusiastas de la IA y sigamos empujando los límites de la IA generativa juntos. ¡Juntos podemos lograr grandes cosas!🔐❤️

Únete a nuestro grupo de LinkedIn sobre ciencia de datos y ciberseguridad. Encontrarás los últimos blogs, contenido exclusivo y entusiastas compañeros.🔥

ENLACE PARA EL GRUPO: https://www.linkedin.com/groups/9378874/

FUENTE: https://giphy.com/

SÍGUENOS PARA DIVERTIDOS BLOGS Y ARTÍCULOS DE CIENCIA DE DATOS: 💙

CORREO ELECTRÓNICO: [email protected]

LINKEDIN: https://www.linkedin.com/company/dsmcs/

INSTAGRAM: https://www.instagram.com/datasciencemeetscybersecurity/?hl=en

GITHUB: https://github.com/Vidhi1290

TWITTER: https://twitter.com/VidhiWaghela

VoAGI: https://medium.com/@datasciencemeetscybersecurity-

SITIO WEB: https://www.datasciencemeetscybersecurity.com/

— EQUIPO DATA SCIENCE MEETS CYBER SECURITY 💙❤️

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Aprendizaje Automático

Rompiendo barreras en el diseño de proteínas con un nuevo modelo de IA que comprende interacciones con cualquier tipo de molécula.

Después de la revolución iniciada por AlphaFold de Deepmind en biología estructural, el campo estrechamente relaciona...

Inteligencia Artificial

La IA está haciendo que la política sea más fácil, más barata y más peligrosa

Los votantes ya están viendo materiales de campaña generados por IA, y probablemente no lo saben.

Inteligencia Artificial

La IA escribió un proyecto de ley de vivienda. Los críticos dicen que no es inteligente

Un asambleísta de Queens utilizó un programa de inteligencia artificial para identificar vacíos en la ley de Nueva Yo...