Redes Generativas Antagónicas: Una pequeña explicación y aplicaciones

Carlos Velázquez V
MCD-UNISON
Published in
8 min readJun 15, 2022
Creación automática de personajes de anime con Redes Generativas Antagónicas. Fuente

Yann LeCun, el fundador de las Redes Neuronales Convolucionales, describió las Redes Generativas Antagónicas como “la idea más interesante de los últimos 10 años en el aprendizaje automático”.

Introducción

Las Redes Generativas Antagónicas (GAN, por sus siglas en inglés) son una potente clase de modelos generativos introducidos en el 2014 por Goodfellow y colaboradores. Los modelos generativos son una tarea de aprendizaje no supervisado que describen cómo se genera un conjunto de datos, en términos de un modelo probabilístico. El modelo generado aprende a capturar la distribución estadística de los datos de entrenamiento, lo que nos permite generar nuevos datos que podrían haberse extraído del conjunto de datos original.

Las GAN fueron inspiradas por la teoría de juegos y estas aprenden a generar datos a partir de una distribución de entrenamiento mediante un juego de dos jugadores. Las dos entidades son el Generador (G) y el Discriminador (D), ambas son son redes neuronales. Estos dos adversarios están en constante batalla durante todo el proceso de entrenamiento.

Analogía

Una analogía que se utiliza mucho con las GAN es relacionada al arte. Supongamos que hay alguien que intenta falsificar cuadros de arte (este sería el generador) y un investigador de arte el cual detecta si el arte es auténtico o falsificado (este sería el discriminador). Ambos se entrenan y están compitiendo entre sí, el generador intentando confundir al discriminador y el discriminador intentando discernir correctamente si el cuadro de arte es falso o real.

Estructura general de una GAN. Fuente

Generador

El objetivo del generador es aprender y capturar la distribución potencial en las muestras de datos reales tanto como sea posible, y generar nuevas muestras de datos que logren engañar al discriminador y las clasifique como reales. Sin embargo, el generador no tiene acceso directo a las imágenes reales, por lo que sólo aprende a través de su interacción con el discriminador.

La señal de error, a través del discriminador (saber si la imagen procede del conjunto de datos reales o del conjunto de datos falsificados) se utiliza para entrenar al generador, llevándolo a ser capaz de producir falsificaciones de mejor calidad.

La entrada del generador es un vector de ruido aleatorio z (normalmente una distribución uniforme o normal). El ruido se traslada a un nuevo espacio de datos mediante el generador G para obtener una muestra falsa, G(z) que es un vector multidimensional (por ejemplo una imagen).

Entrenamiento del generador

Es importante mencionar que en el caso de las GAN, el generador no está directamente conectado a la pérdida que estamos tratando de afectar. Esto debido a que el generador alimenta al discriminador,el cual produce la salida que queremos afectar. La función de pérdida del generador penaliza al generador por producir una imagen que la red discriminadora clasifica como falsa.

Por lo que, a grandes rasgos, primero le proporcionamos un input aleatorio al generador, el cual generará una salida (en el caso de la analogía una imagen), posteriormente el discriminador clasifica si es real o falso. Una vez realizada la clasificación calculamos la pérdida de la clasificación del discriminado. Por último, con backpropagation(a través de el discriminador y generador) obtenemos los gradientes, los cuales utilizamos para actualizar los pesos del generador

Estructura mas desarrollada de una GAN. Fuente

Discriminador

El discriminador suele ser un clasificador binario cuyo objetivo es discriminar las muestras reales de las generadas con la mayor precisión posible, este clasificador se entrena con el conjunto de datos original y las imágenes generadas por el generador.

Por lo que el discriminador actúa como una función que mapea desde los datos de la imagen a una probabilidad de que la imagen provenga de la distribución de datos reales en lugar de la distribución del generador.

Cuando el discriminador D no puede determinar si los datos provienen del conjunto de datos reales o del generador, se alcanza el estado óptimo. En este punto, se obtiene un modelo generador G, que ha aprendido la distribución de los datos reales.

Una vez que el generador es capaz de generar datos realistas, el discriminador D no es realmente necesario y por lo general uno lo descarta y se queda con el generador G.

Entrenamiento del discriminador

Como se puede ver en la imagen, el discriminador se conecta a dos funciones de pérdida. Sin embargo, durante el entrenamiento del discriminador, éste ignora la pérdida del generador y sólo utiliza la pérdida del discriminador. Por lo que, para entrenar al discriminador, primero este clasifica tanto los datos reales como los falsos del generador. La función de pérdida del discriminador lo penaliza por clasificar mal una imagen real como una falsa y viceversa. Los pesos del discriminador se actualizan mediante backpropagation de la pérdida de este, a través de la red neuronal del discriminador.

Entrenamiento de la GAN

Reflexionando acerca de lo anterior, nos encontramos con un problema, porque una GAN contiene dos redes entrenadas por separado y estas deben ser entrenadas por separado. Por lo que el entrenamiento de la GAN se realiza alternando periodos, primero los parámetros del discriminador se actualizan, mientras que los del generador son fijos, luego el generador se entrena, mientras dejamos al discriminador fijo. Estos periodos se repiten para seguir entrenándolos, hasta tener un generador y discriminador óptimo.

El generador G se considera óptimo cuando el discriminador D, está máximamente confundido y no puede distinguir las muestras reales de las falsas (da probabilidad de 0.5 para cualquier muestra independientemente si es falsa o real), entonces se considera que el generador G ha capturado la distribución de los datos reales.

Idealmente, el discriminador se entrena hasta que sea óptimo con respecto al generador actual; entonces el generador se actualiza de nuevo. Sin embargo, en la práctica, es posible que el discriminador no se entrene hasta que sea óptimo, sino que sólo se entrene durante un pequeño número de iteraciones, y que el generador se actualice simultáneamente con el discriminador.

Función de pérdida y backpropagation

Como mencionamos anteriormente, el discriminador da un valor que indica la probabilidad de que x sea una imagen real. El objetivo de este es maximizar la probabilidad de reconocer las imágenes reales como reales y las generadas como falsas. Es por esto que para medir la pérdida, se utiliza la entropía cruzada entre las distribuciones reales y las generadas.

Teniendo en cuenta el objetivo que tienen el generador y el discriminador, el proceso de optimización de los GAN es un proceso de juego minimax, donde el discriminador intenta minimizar su error de clasificación en distinguir las muestras reales de las falsas y el generador intenta maximizar el error del discriminador.

Juego minimax. Fuente

En esta función:

  • D(x) es la estimación del discriminador de la probabilidad de que el dato real (x) sea real.
  • Ex es el valor esperado sobre todas las instancias de datos reales.
  • G(z) es el output del generador cuando se le da un ruido z.
  • D(G(z)) es la estimación del discriminador de la probabilidad de que una instancia falsa sea real.
  • Ez es el valor esperado sobre todas las entradas aleatorias al generador.

Una vez que tenemos las funciones objetivo definidas, se realiza el aprendizaje mediante el descenso de gradiente alterno (A-GD, por sus siglas en inglés). Para esto, como se mencionó anteriormente fijamos los parámetros del modelo generador y realizamos una única iteración de descenso de gradiente en el discriminador utilizando las imágenes reales y las generadas. A continuación, cambiamos de lado, fijamos el discriminador y entrenamos el generador durante otra única iteración. Entrenamos ambas redes en pasos alternativos hasta que el generador produce muestras de buena calidad.

A continuación se muestran los gradientes usados para el backpropagation:

  • Discriminador
Ecuación que se maximiza para entrenar al discriminador. Fuente
  • Generador
Ecuación que se minimiza para entrenar al generador. Fuente

Aplicaciones

Las GAN se están empezando a utilizar en muchas áreas, por ejemplo, como reportan Gui y colaboradores, en el 2020 se publicaron aproximadamente 28.500 artículos relacionados con las GAN, lo que supone aproximadamente 78 artículos al día o más de tres por hora.

Algunas de las áreas en las que se ha tenido impacto son las siguientes:

Generación de rostros

Las GAN permiten generar imágenes de rostros humanos altamente realistas, las cuales son visualmente difíciles de discernir de los rostros humanos reales.

Un ejemplo de esta aplicación es el equipo de NVIDIA logró utilizar las GAN con el dataset de CELEBA-HQ para poder generar rostros, como se muestra en el ejemplo a continuación.

Rostros generados con una GAN, utilizando el dataset de CELEBA-HQ. Fuente

Farmacología

Otra área donde las GAN están siendo utilizadas es en el descubrimiento de fármacos, Maziarka y colaboradores diseñaron un modelo basado en GAN que, dada una molécula, genera una estructuralmente similar con un valor optimizado de la propiedad considerada (por ejemplo PlogP).

Generación de estructuras moleculares con una GAN. Fuente

Ciberseguridad

Las GAN también se han usado para generar muestras de malware que permitan evadir los modelos de detección de malware basados en aprendizaje automático, tal como es en el caso de MalGAN, en el cual se demuestra que es capaz de reducir la tasa de detección a casi cero. A continuación se demuestra su arquitectura.

Arquitectura de MalGAN para la generación de malware. Fuente

Referencias

Generative Deep Learning — https://www.oreilly.com/library/view/generative-deep-learning/9781492041931/ch01.html

Generative Adversarial Networks: Introduction and Outlook — https://sci-hub.se/10.1109/JAS.2017.7510583

Generative Adversarial Networks — https://developers.google.com/machine-learning/gan/gan_structure

Recent Progress on Generative Adversarial Networks (GANs): A Survey — https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8667290

Generative Adversarial Networks: An Overview — https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8253599

A review of generative adversarial networks and its application in cybersecurity — https://sci-hub.se/https://link.springer.com/article/10.1007/s10462-019-09717-4

Understanding GAN Loss Functions — https://neptune.ai/blog/gan-loss-functions

GAN — What is Generative Adversarial Networks GAN? — https://jonathan-hui.medium.com/gan-whats-generative-adversarial-networks-and-its-application-f39ed278ef09

--

--

Carlos Velázquez V
MCD-UNISON

Químico, Estudiante de la Maestría en Ciencia de Datos.