Carlos Alberto Gómez, Ricardo Fernández y Santiago Morales.
Entrando en el mundo de las GANs: tipos de aprendizaje y Redes Neuronales
Antes de empezar a hablar sobre las GANs (Generative Adversarial Networks) existen unos conceptos básicos y términos que debemos conocer y tener claros. Por un lado, la diferencia entre dos de los principales tipos de aprendizaje de los modelos de Machine Learning: el Aprendizaje Supervisado y el Aprendizaje No Supervisado. El primero se basa en datos etiquetados y cuenta con una alta precisión y resultados fácilmente interpretables, por eso es muy utilizado en industria. Lo malo es que necesita que los datos estén previamente etiquetados (lo que puede resultar costoso o poco viable en muchos casos), y además que estos modelos supervisados no son capaces de descubrir nuevos patrones con los datos que ya tenemos. El Aprendizaje No Supervisado sin embargo utiliza datos no etiquetados y al contrario que los modelos de Aprendizaje Supervisado, es capaz de detectar patrones en los datos. Aquí entran los algoritmos de clustering, por ejemplo, para hacer agrupación de clientes en segmentos y para la detección de comportamientos similares.
Otra parte que necesitamos conocer antes de comenzar con las GANs son las Redes Neuronales. Las Redes Neuronales son un tipo de modelo computacional que enseña a las máquinas a procesar datos de una manera que está inspirada en la forma en que lo hace el cerebro humano. Consiste en un conjunto de unidades, llamadas neuronas artificiales, conectadas entre sí para transmitirse señales. La información de entrada (input) atraviesa las diferentes capas de la red neuronal (capas ocultas) donde se somete a diversas operaciones (transformaciones no lineales) produciendo unos valores de salida (output). Estos valores de salida se pueden comparar con los valores que conocemos que serían los correctos y a partir de la diferencia encontrar el error. A medida que se entrena el modelo, buscamos minimizar el error y en base a ello actualizar los pesos de la red de manera que vaya mejorando los resultados con el tiempo.
Inicio de las GANs: ¿cómo aparen y evolucionan los modelos generativos?
Una vez conocemos las diferencias entre Aprendizaje Supervisado y Aprendizaje No Supervisado, y sabemos en qué consisten las Redes Neuronales, ¿cómo se llegó a los modelos generativos?
Una primera aproximación que abrió el camino hacia estos modelos generativos fueron los Autoencoders. Este tipo de modelo cuenta con dos fases, una primera fase en la que el encoder coge un elemento (x) y lo comprime a un elemento de menor tamaño (z), y una segunda fase en la que el decoder descomprime este elemento (z) y lo transforma en un nuevo elemento (x̂) similar al de la entrada del modelo (x).
Una de las limitaciones de este tipo de arquitectura es que únicamente es capaz de imitar el elemento que se le pasa, lo que le da poca capacidad de generar datos nuevos. Para solucionar esta limitación aparecieron los Variational Autoencoders (VAEs). Estos modelos en lugar de comprimir el elemento original (x) en un único valor (z), lo que hacen es comprimirlo en una distribución de probabilidades. De esta manera, el decoder de una VAE no toma un único valor (z), sino un punto dentro de una distribución. Este factor estocástico hará que no siempre se genere la misma salida (x̂), por lo que ya podemos considerar que se están generando elementos nuevos similares a los datos que ya tenemos, pero diferentes.
A pesar de que este modelo ya permite generar nuevos elementos, sigue teniendo muchas limitaciones. Por esta razón se siguió trabajando para encontrar nuevos modelos y arquitecturas que fueran capaces de realizar esta tarea de una manera más eficiente. Es aquí donde entran en juego las GANs por su nombre en inglés Generative Adversarial Networks, en español llamadas Redes Generativas Adversariales o Antagónicas.
Las GANs: ¿qué son y cómo funcionan?
Una Generative Adversarial Network (GAN) es un modelo que está compuesto por dos Redes Neuronales, una llamada ‘Generador’ y otra llamada ‘Discriminador’. Cada una de estas redes tiene un rol específico durante los procesos de entrenamiento y ajuste. El ‘Generador’ va a tomar como entrada elementos aleatorios y va a generar elementos sintéticos, y el ‘Discriminador’ por su parte va a determinar si ese elemento sintético generado es real o falso. Este proceso es un proceso de continuo reajuste en el que el ‘Generador’ va a ir generando nuevos elementos cada vez más fidedignos y el ‘Discriminador’ cada vez va a ser más fino a la hora de determinar qué elemento es real y cuál es falso. De aquí viene justamente el nombre de Adversarial, ya que el ‘Generador’ va a tratar de engañar al ‘Discriminador’, y este último debe intentar no ser engañado por el primero.
A continuación, vemos un ejemplo. En la imagen de abajo, vemos en la parte superior el conjunto de datos reales (números escritos a mano del 0 al 9), y en la parte inferior las primeras imitaciones o elementos sintéticos del ‘Generador’. Al ser las primeras, como podemos observar son de una muy mala calidad.
Pero una vez que se empieza a entrenar y ajustar el modelo, vemos como el ‘Generador’ empieza a determinar las características de las imágenes y a generar imitaciones de mayor calidad. En algunos casos pueden verse números y en otros un garabato, pero lo que está claro es que ya se capturan los patrones diferenciadores entre los dígitos del conjunto original.
Evolución de las GANs
La primera GAN fue propuesta por Ian Goodfellow en el año 2014 en su artículo “Generative Adversarial Nets”. En él presentaba los resultados de unos modelos generativos, uno que utilizaba el Dataset CIFAR-10 (izquierda) que contiene imágenes de gatos, perros, caballos, coches, aviones, etc., y otro que utilizaba el Toronto Face Dataset (derecha). En ambos casos se entrenaron conjuntamente un ‘Generador’ y un ‘Discriminador’ y se puede ver cómo tras el entrenamiento, los resultados del modelo mejoran. Los primeros elementos de salida del modelo se pueden ver a la izquierda de ambas imágenes, y las últimas salidas del modelo a la derecha del todo.
En este artículo se demostró de manera teórica que estos modelos no sólo funcionan, sino que en la mayoría de ocasiones logran converger a un punto óptimo. La realidad es que de nuevo estos modelos tenían limitaciones, ya que en muchas ocasiones el ‘Generador’ se estancaba y ya no mejoraba la calidad de sus generaciones, y en otros casos generaba un único resultado muy bueno, pero solo uno. Para mitigar estas limitaciones se ha recurrido a diferentes variantes y modificaciones que han seguido evolucionando a lo largo de los años. Las más significativas son:
- Deep Convolutional GAN (DCGAN): cambia la estructura de las redes totalmente conectadas por Redes Convolucionales. Las redes conectadas originales toman como entrada una imagen en forma de vector, sin embargo, las Redes Convolucionales van cogiendo diferentes trozos de una imagen como entradas, trabajando así de una manera mucho más rápida y con resultados más eficientes al explotar la información espacial presente en las imágenes.
- Conditional GAN (cGAN): se añade una condición adicional tanto al ‘Generador’ como al ‘Discriminador’. Esta condición puede ser una etiqueta, un número, o en este caso una imagen (el boceto de La Gioconda o Monna Lisa). De esta manera el ‘Generador’ cogería como elemento inicial el ruido aleatorio y la condición para generar el elemento sintético, y el ‘Discrimindor’ cogería como entrada la imagen generada y la condición para determinar si esta primera es real o falsa.
- Progressive Growing GAN (PGGAN): una red que va creciendo a lo largo del tiempo. Veámoslo con un ejemplo. En un principio tanto el ‘Generador’ como el ‘Discriminador’ son expertos en imágenes de 4×4 píxeles, pero en cierto proceso del entrenamiento del modelo se añade una capa más de 8×8, tomando como entrada los datos que se tenían de 4×4. En este proceso ambos modelos se vuelven expertos en esas imágenes de 8×8. Siguiendo esta misma práctica cada vez se va aumentando más el número de píxeles en los que se especializan los modelos consiguiendo una muy buena calidad de los resultados.
Presente y futuro de los modelos generativos
Actualmente las GANs son capaces de generar nuevos elementos y contenido en diferentes formatos, como pueden ser imágenes, texto o sonido; y tiene aplicaciones en diferentes sectores como la conducción autónoma de vehículos, la generación sintética de cadenas de proteínas, la detección de anomalías en los mercados, la generación de música, etc.
A pesar de los múltiples avances teóricos, las GANs siguen siendo modelos de alta complejidad y de un entrenamiento a menudo costoso e inestable, ya que pueden empezar a fallar después de llevar bastante tiempo entrenándose. De hecho, ya existen arquitecturas recientes como los modelos de difusión que han superado a las GANs en generación de imágenes. Aun así, las GANs se siguen estudiando e intentando mejorar a día de hoy, ya que ofrecen ventajas con respecto a otros tipos de modelos, como la capacidad de generar múltiples resultados en segundos. Esperamos que os haya parecido interesante este artículo sobre las GANs. Si tenéis cualquier duda o sugerencia, podéis contactar con nosotros a través del formulario de contacto.