Cree datos a partir de ruido aleatorio con redes adversarias generativas

Publicado: 2022-03-11

Desde que descubrí las redes antagónicas generativas (GAN), me han fascinado. Una GAN es un tipo de red neuronal que puede generar nuevos datos desde cero. Puede alimentarlo con un poco de ruido aleatorio como entrada, y puede producir imágenes realistas de dormitorios, pájaros o lo que sea que esté capacitado para generar.

Una cosa en la que todos los científicos pueden estar de acuerdo es que necesitamos más datos.

Las GAN, que se pueden usar para producir nuevos datos en situaciones de datos limitados, pueden resultar realmente útiles. A veces, la generación de datos puede ser difícil, costosa y lenta. Sin embargo, para ser útiles, los nuevos datos deben ser lo suficientemente realistas como para que cualquier información que obtengamos de los datos generados se aplique a los datos reales. Si estás entrenando a un gato para cazar ratones y estás usando ratones falsos, será mejor que te asegures de que los ratones falsos realmente se vean como ratones.

Otra forma de pensar al respecto es que las GAN están descubriendo una estructura en los datos que les permite generar datos realistas. Esto puede ser útil si no podemos ver esa estructura por nuestra cuenta o no podemos extraerla con otros métodos.

Redes adversarias generativas

En este artículo, aprenderá cómo se pueden usar las GAN para generar nuevos datos. Para que este tutorial sea realista, utilizaremos el conjunto de datos de detección de fraude con tarjetas de crédito de Kaggle.

En mis experimentos, traté de usar este conjunto de datos para ver si podía obtener una GAN para crear datos lo suficientemente realistas como para ayudarnos a detectar casos fraudulentos. Este conjunto de datos destaca el problema de datos limitados: de 285,000 transacciones, solo 492 son fraude. 492 casos de fraude no es un gran conjunto de datos para capacitarse, especialmente cuando se trata de tareas de aprendizaje automático en las que a las personas les gusta tener conjuntos de datos varios órdenes de magnitud más grandes. Aunque los resultados de mi experimento no fueron sorprendentes, aprendí mucho sobre las GAN en el camino que estoy feliz de compartir.

Antes de que empieces

Antes de profundizar en este ámbito de las GAN, si desea repasar rápidamente sus habilidades de aprendizaje automático o aprendizaje profundo, puede echar un vistazo a estas dos publicaciones de blog relacionadas:

  • Una introducción a la teoría del aprendizaje automático y su aplicación: un tutorial visual con ejemplos
  • Un tutorial de aprendizaje profundo: de perceptrones a redes profundas

¿Por qué GAN?

Las redes antagónicas generativas (GAN) son una arquitectura de red neuronal que ha mostrado mejoras impresionantes con respecto a los métodos generativos anteriores, como los codificadores automáticos variacionales o las máquinas Boltzman restringidas. Las GAN han podido generar imágenes más realistas (p. ej., DCGAN), permitir la transferencia de estilo entre imágenes (ver aquí y aquí), generar imágenes a partir de descripciones de texto (StackGAN) y aprender de conjuntos de datos más pequeños a través del aprendizaje semisupervisado. Debido a estos logros, están generando mucho interés tanto en el sector académico como en el comercial.

El director de investigación de IA en Facebook, Yann LeCunn, incluso los ha llamado el desarrollo más emocionante en aprendizaje automático en la última década.

Los basicos

Piensa en cómo aprendes. Pruebas algo, obtienes algunos comentarios. Ajustas tu estrategia y vuelves a intentarlo.

La retroalimentación puede venir en forma de crítica, dolor o beneficio. Puede provenir de su propio juicio de qué tan bien lo hizo. A menudo, la retroalimentación más útil es la que proviene de otra persona, porque no es solo un número o una sensación, sino una evaluación inteligente de qué tan bien realizó la tarea.

Cuando una computadora está capacitada para una tarea, el ser humano generalmente proporciona la retroalimentación en forma de parámetros o algoritmos ajustados. Esto funciona bien cuando la tarea está bien definida, como aprender a multiplicar dos números. Puede decirle a la computadora de manera fácil y exacta cómo se equivocó.

Con una tarea más complicada, como crear una imagen de un perro, se vuelve más difícil proporcionar comentarios. ¿La imagen está borrosa, se parece más a un gato o se parece a algo? Se podrían implementar estadísticas complejas, pero sería difícil capturar todos los detalles que hacen que una imagen parezca real.

Un ser humano puede dar alguna estimación, porque tenemos mucha experiencia evaluando entradas visuales, pero somos relativamente lentos y nuestras evaluaciones pueden ser muy subjetivas. En cambio, podríamos entrenar una red neuronal para aprender la tarea de discriminar entre imágenes reales y generadas.

Luego, al permitir que el generador de imágenes (también una red neuronal) y el discriminador se turnen para aprender el uno del otro, pueden mejorar con el tiempo. Estas dos redes, jugando este juego, son una red adversaria generativa.

Puede escuchar al inventor de las GAN, Ian Goodfellow, hablar sobre cómo una discusión en un bar sobre este tema condujo a una febril noche de codificación que resultó en la primera GAN. Y sí, reconoce la barra en su papel. Puede obtener más información sobre las GAN en el blog de Ian Goodfellow sobre este tema.

Diagrama de GAN

Hay una serie de desafíos cuando se trabaja con GAN. Entrenar una sola red neuronal puede ser difícil debido a la cantidad de opciones involucradas: arquitectura, funciones de activación, método de optimización, tasa de aprendizaje y tasa de abandono, por nombrar solo algunas.

Las GAN duplican todas esas opciones y agregan nuevas complejidades. Tanto el generador como el discriminador pueden olvidar trucos que usaron anteriormente en su entrenamiento. Esto puede hacer que las dos redes queden atrapadas en un ciclo estable de soluciones que no mejoran con el tiempo. Una red puede dominar a la otra red, de modo que ninguna pueda aprender más. O bien, es posible que el generador no explore gran parte del espacio de soluciones posibles, solo lo suficiente para encontrar soluciones realistas. Esta última situación se conoce como colapso de modo.

El colapso del modo es cuando el generador solo aprende un pequeño subconjunto de los posibles modos realistas. Por ejemplo, si la tarea es generar imágenes de perros, el generador podría aprender a crear solo imágenes de pequeños perros marrones. El generador habría pasado por alto todos los otros modos que consisten en perros de otros tamaños o colores.

Se han implementado muchas estrategias para abordar esto, incluida la normalización por lotes, agregar etiquetas en los datos de entrenamiento o cambiar la forma en que el discriminador juzga los datos generados.

La gente ha notado que agregar etiquetas a los datos, es decir, dividirlos en categorías, casi siempre mejora el rendimiento de las GAN. En lugar de aprender a generar imágenes de mascotas en general, debería ser más fácil generar imágenes de gatos, perros, peces y hurones, por ejemplo.

Quizás los avances más significativos en el desarrollo de GAN se produjeron en términos de cambiar la forma en que el discriminador evalúa los datos, así que echemos un vistazo más de cerca.

En la formulación original de GAN en 2014 por Goodfellow et al., el discriminador genera una estimación de la probabilidad de que una imagen dada sea real o generada. Al discriminador se le proporcionaría un conjunto de imágenes que consistía tanto en imágenes reales como generadas y generaría una estimación para cada una de estas entradas. El error entre la salida del discriminador y las etiquetas reales se mediría entonces por la pérdida de entropía cruzada. La pérdida de entropía cruzada se puede equiparar a la métrica de distancia de Jensen-Shannon, y Arjovsky et al. lo demostraron a principios de 2017. que esta métrica fallaría en algunos casos y no apuntaría en la dirección correcta en otros casos. Este grupo demostró que la métrica de distancia de Wasserstein (también conocida como distancia EM o del movimiento de la tierra) funcionó y funcionó mejor en muchos más casos.

La pérdida de entropía cruzada es una medida de la precisión con la que el discriminador identificó imágenes reales y generadas. En cambio, la métrica de Wasserstein analiza la distribución de cada variable (es decir, cada color de cada píxel) en las imágenes reales y generadas, y determina qué tan separadas están las distribuciones para los datos reales y generados. La métrica de Wasserstein analiza cuánto esfuerzo, en términos de masa por distancia, se necesitaría para llevar la distribución generada a la forma de la distribución real, de ahí el nombre alternativo "distancia del movimiento de la tierra". Debido a que la métrica de Wasserstein ya no evalúa si una imagen es real o no, sino que proporciona una crítica de qué tan lejos están las imágenes generadas de las imágenes reales, la red "discriminadora" se conoce como la red "crítica" en Wasserstein. arquitectura.

Para una exploración un poco más completa de las GAN, en este artículo exploraremos cuatro arquitecturas diferentes:

  • GAN: El GAN ​​original ("vainilla")
  • CGAN: una versión condicional del GAN ​​original que utiliza etiquetas de clase
  • WGAN: Wasserstein GAN (con penalización por gradiente)
  • WCGAN: una versión condicional de Wasserstein GAN

Pero echemos un vistazo primero a nuestro conjunto de datos.

Una mirada a los datos de fraude de tarjetas de crédito

Trabajaremos con el conjunto de datos de detección de fraude de tarjetas de crédito de Kaggle.

El conjunto de datos consta de ~285 000 transacciones, de las cuales solo 492 son fraudulentas. Los datos consisten en 31 características: "tiempo", "cantidad", "clase" y 28 características anonimizadas adicionales. La característica de clase es la etiqueta que indica si una transacción es fraudulenta o no, donde 0 indica normal y 1 indica fraude. Todos los datos son numéricos y continuos (excepto la etiqueta). El conjunto de datos no tiene valores faltantes. Para empezar, el conjunto de datos ya está en muy buena forma, pero haré un poco más de limpieza, principalmente ajustando las medias de todas las características a cero y las desviaciones estándar a uno. He descrito más mi proceso de limpieza en el cuaderno aquí. Por ahora solo mostraré el resultado final:

Características frente a gráficos de clase

Uno puede detectar fácilmente las diferencias entre los datos normales y de fraude en estas distribuciones, pero también hay mucha superposición. Podemos aplicar uno de los algoritmos de aprendizaje automático más rápidos y potentes para identificar las características más útiles para identificar el fraude. Este algoritmo, xgboost, es un algoritmo de árbol de decisión potenciado por gradiente. Lo entrenaremos en el 70 % del conjunto de datos y lo probaremos en el 30 % restante. Podemos configurar el algoritmo para que continúe hasta que no mejore la recuperación (la fracción de muestras de fraude detectadas) en el conjunto de datos de prueba. Esto logra un 76 % de recuperación en el conjunto de prueba, lo que claramente deja espacio para mejorar. Logra una precisión del 94 %, lo que significa que solo el 6 % de los casos de fraude previstos eran en realidad transacciones normales. A partir de este análisis, también obtenemos una lista de características ordenadas por su utilidad para detectar fraudes. Podemos usar las características más importantes para ayudar a visualizar nuestros resultados más adelante.

Nuevamente, si tuviéramos más datos de fraude, podríamos detectarlo mejor. Es decir, podríamos lograr un mayor recuerdo. Ahora intentaremos generar datos de fraude nuevos y realistas utilizando GAN para ayudarnos a detectar el fraude real.

Generación de nuevos datos de tarjetas de crédito con GAN

Para aplicar varias arquitecturas GAN a este conjunto de datos, usaré GAN-Sandbox, que tiene varias arquitecturas GAN populares implementadas en Python usando la biblioteca Keras y un back-end de TensorFlow. Todos mis resultados están disponibles como un cuaderno Jupyter aquí. Todas las bibliotecas necesarias están incluidas en la imagen de Kaggle/Python Docker, si necesita una configuración sencilla.

Los ejemplos en GAN-Sandbox están configurados para el procesamiento de imágenes. El generador produce una imagen 2D con 3 canales de color para cada píxel y el discriminador/crítico está configurado para evaluar dichos datos. Las transformaciones convolucionales se utilizan entre las capas de las redes para aprovechar la estructura espacial de los datos de imagen. Cada neurona en una capa convolucional solo funciona con un pequeño grupo de entradas y salidas (p. ej., píxeles adyacentes en una imagen) para permitir el aprendizaje de las relaciones espaciales. Nuestro conjunto de datos de tarjetas de crédito carece de estructura espacial entre las variables, por lo que he convertido las redes convolucionales en redes con capas densamente conectadas. Las neuronas en capas densamente conectadas están conectadas a cada entrada y salida de la capa, lo que permite que la red aprenda sus propias relaciones entre las características. Usaré esta configuración para cada una de las arquitecturas.

La primera GAN que evaluaré enfrenta a la red del generador con la red del discriminador, haciendo uso de la pérdida de entropía cruzada del discriminador para entrenar las redes. Esta es la arquitectura GAN original, "vainilla". El segundo GAN que evaluaré agrega etiquetas de clase a los datos a la manera de un GAN condicional (CGAN). Esta GAN tiene una variable más en los datos, la etiqueta de clase. La tercera GAN usará la métrica de distancia de Wasserstein para entrenar las redes (WGAN), y la última usará las etiquetas de clase y la métrica de distancia de Wasserstein (WCGAN).

arquitecturas GAN

Entrenaremos las diversas GAN utilizando un conjunto de datos de entrenamiento que consta de las 492 transacciones fraudulentas. Podemos agregar clases al conjunto de datos de fraude para facilitar las arquitecturas GAN condicionales. Exploré algunos métodos de agrupamiento diferentes en el cuaderno y opté por una clasificación KMeans que ordena los datos de fraude en 2 clases.

Entrenaré a cada GAN durante 5000 rondas y examinaré los resultados en el camino. En la Figura 4, podemos ver los datos de fraude reales y los datos de fraude generados por las diferentes arquitecturas GAN a medida que avanza el entrenamiento. Podemos ver los datos de fraude reales divididos en las clases de 2 KMeans, trazados con las 2 dimensiones que mejor discriminan estas dos clases (características V10 y V17 de las características transformadas de PCA). Las dos GAN que no utilizan información de clase, GAN y WGAN, tienen su salida generada como una sola clase. Las arquitecturas condicionales, CGAN y WCGAN, muestran sus datos generados por clase. En el paso 0, todos los datos generados muestran la distribución normal de la entrada aleatoria alimentada a los generadores.

Comparación de salida GAN

Podemos ver que la arquitectura GAN original comienza a aprender la forma y el rango de los datos reales, pero luego colapsa hacia una pequeña distribución. Este es el colapso de modo discutido anteriormente. El generador ha aprendido una pequeña gama de datos que el discriminador tiene dificultades para detectar como falsos. La arquitectura CGAN lo hace un poco mejor, extendiéndose y acercándose a las distribuciones de cada clase de datos de fraude, pero luego se produce el colapso del modo, como se puede ver en el paso 5000.

La WGAN no experimenta el colapso de modo exhibido por las arquitecturas GAN y CGAN. Incluso sin información de clase, comienza a asumir la distribución no normal de los datos de fraude reales. La arquitectura WCGAN funciona de manera similar y puede generar clases de datos separadas.

Podemos evaluar qué tan realistas se ven los datos usando el mismo algoritmo xgboost que se usó anteriormente para la detección de fraudes. Es rápido y potente y funciona listo para usar sin mucha afinación. Entrenaremos el clasificador xgboost utilizando la mitad de los datos de fraude reales (246 muestras) y una cantidad igual de ejemplos generados por GAN. Luego, probaremos el clasificador xgboost utilizando la otra mitad de los datos de fraude reales y un conjunto diferente de ejemplos generados por 246 GAN. Este método ortogonal (en el sentido experimental) nos dará alguna indicación del éxito del generador en la producción de datos realistas. Con datos generados perfectamente realistas, el algoritmo xgboost debería lograr una precisión de 0,50 (50 %); en otras palabras, no es mejor que adivinar.

Exactitud

Podemos ver que la precisión de xgboost en los datos generados por GAN disminuye al principio y luego aumenta después del paso de entrenamiento 1000 a medida que se establece el colapso del modo. La arquitectura CGAN logra datos algo más realistas después de 2000 pasos, pero luego se establece el colapso del modo para esta red como bien. Las arquitecturas WGAN y WCGAN logran datos más realistas más rápido y continúan aprendiendo a medida que avanza el entrenamiento. El WCGAN no parece tener mucha ventaja sobre el WGAN, lo que sugiere que estas clases creadas pueden no ser útiles para las arquitecturas GAN de Wasserstein.

Puede obtener más información sobre la arquitectura WGAN aquí y aquí.

La red crítica en las arquitecturas WGAN y WCGAN está aprendiendo a calcular la distancia Wasserstein (Earth-mover, EM) entre un conjunto de datos dado y los datos reales de fraude. Idealmente, medirá una distancia cercana a cero para una muestra de datos de fraude reales. El crítico, sin embargo, está en proceso de aprender cómo realizar este cálculo. Siempre que mida una distancia mayor para los datos generados que para los datos reales, la red puede mejorar. Podemos observar cómo cambia la diferencia entre las distancias de Wasserstein para los datos reales y generados a lo largo del entrenamiento. Si se estanca, es posible que el entrenamiento adicional no ayude. Podemos ver en la figura 6 que parece haber más mejoras tanto para WGAN como para WCGAN en este conjunto de datos.

estimación de distancia EM

¿Qué aprendimos?

Ahora podemos probar si podemos generar nuevos datos de fraude lo suficientemente realistas como para ayudarnos a detectar datos de fraude reales. Podemos tomar el generador entrenado que logró el puntaje de precisión más bajo y usarlo para generar datos. Para nuestro conjunto de entrenamiento básico, utilizaremos el 70 % de los datos que no son de fraude (199 020 casos) y 100 casos de datos de fraude (~20 % de los datos de fraude). Luego, intentaremos agregar diferentes cantidades de datos de fraude reales o generados a este conjunto de capacitación, hasta 344 casos (70% de los datos de fraude). Para el conjunto de prueba, usaremos el otro 30% de los casos sin fraude (85,295 casos) y casos de fraude (148 casos). Podemos intentar agregar datos generados de una GAN no entrenada y de la GAN mejor entrenada para probar si los datos generados son mejores que el ruido aleatorio. De nuestras pruebas, parece que nuestra mejor arquitectura fue la WCGAN en el paso de entrenamiento 4800, donde logró una precisión de xgboost del 70 % (recuerde que, idealmente, la precisión sería del 50 %). Así que usaremos esta arquitectura para generar nuevos datos de fraude.

Podemos ver en la figura 7 que la recuperación (la fracción de muestras de fraude reales identificadas con precisión en el conjunto de prueba) no aumenta a medida que usamos más datos de fraude generados para la capacitación. El clasificador xgboost puede retener toda la información que utilizó para identificar el fraude de los 100 casos reales y no confundirse con los datos adicionales generados, incluso cuando los selecciona entre cientos de miles de casos normales. Como era de esperar, los datos generados por el WCGAN no capacitado no ayudan ni perjudican. Pero los datos generados por el WCGAN capacitado tampoco ayudan. Parece que los datos no son lo suficientemente realistas. Podemos ver en la figura 7 que cuando se utilizan datos de fraude reales para complementar el conjunto de entrenamiento, la recuperación aumenta significativamente. Si el WCGAN hubiera aprendido a duplicar los ejemplos de capacitación, sin ser creativo en absoluto, podría haber logrado tasas de recuperación más altas, como vemos con los datos reales.

Efecto de datos adicionales

Hasta el infinito y más allá

Si bien no pudimos generar datos de fraude de tarjetas de crédito lo suficientemente realistas como para ayudarnos a detectar el fraude real, apenas hemos arañado la superficie con estos métodos. Podríamos entrenar durante más tiempo, con redes más grandes y ajustar los parámetros para las arquitecturas que probamos en este artículo. Las tendencias en la precisión de xgboost y la pérdida del discriminador sugieren que una mayor capacitación ayudará a las arquitecturas WGAN y WCGAN. Otra opción es revisar la limpieza de datos que realizamos, tal vez diseñar algunas variables nuevas o cambiar si abordamos la asimetría en las funciones y cómo lo hacemos. Tal vez ayudarían diferentes esquemas de clasificación de los datos de fraude.

También podríamos probar otras arquitecturas GAN. El DRAGAN tiene evidencia teórica y experimental que muestra que entrena más rápido y de manera más estable que los Wasserstein GAN. Podríamos integrar métodos que hagan uso del aprendizaje semisupervisado, que se ha mostrado prometedor en el aprendizaje de conjuntos de entrenamiento limitados (consulte "Técnicas mejoradas para entrenar GAN"). Podríamos probar una arquitectura que nos brinde modelos comprensibles para los humanos, de modo que podamos comprender mejor la estructura de los datos (consulte InfoGAN).

También debemos estar atentos a los nuevos desarrollos en el campo y, por último, pero no menos importante, podemos trabajar en la creación de nuestras propias innovaciones en este espacio en rápido desarrollo.

Puede encontrar todo el código relevante para este artículo en este repositorio de GitHub.

Relacionado: Las muchas aplicaciones del descenso de gradiente en TensorFlow