Créer des données à partir de bruit aléatoire avec des réseaux antagonistes génératifs

Publié: 2022-03-11

Depuis que j'ai découvert les réseaux antagonistes génératifs (GAN), ils m'ont fasciné. Un GAN est un type de réseau de neurones capable de générer de nouvelles données à partir de zéro. Vous pouvez lui donner un peu de bruit aléatoire en entrée, et il peut produire des images réalistes de chambres à coucher, ou d'oiseaux, ou tout ce qu'il est entraîné à générer.

Une chose sur laquelle tous les scientifiques peuvent s'entendre est que nous avons besoin de plus de données.

Les GAN, qui peuvent être utilisés pour produire de nouvelles données dans des situations où les données sont limitées, peuvent s'avérer très utiles. Les données peuvent parfois être difficiles, coûteuses et chronophages à générer. Pour être utiles, cependant, les nouvelles données doivent être suffisamment réalistes pour que les informations que nous obtenons à partir des données générées s'appliquent toujours aux données réelles. Si vous entraînez un chat à chasser les souris et que vous utilisez de fausses souris, vous feriez mieux de vous assurer que les fausses souris ressemblent réellement à des souris.

Une autre façon de penser est que les GAN découvrent une structure dans les données qui leur permet de créer des données réalistes. Cela peut être utile si nous ne pouvons pas voir cette structure par nous-mêmes ou si nous ne pouvons pas l'extraire avec d'autres méthodes.

Réseaux antagonistes génératifs

Dans cet article, vous apprendrez comment les GAN peuvent être utilisés pour générer de nouvelles données. Pour que ce didacticiel reste réaliste, nous utiliserons l'ensemble de données de détection de fraude par carte de crédit de Kaggle.

Dans mes expériences, j'ai essayé d'utiliser cet ensemble de données pour voir si je pouvais obtenir un GAN pour créer des données suffisamment réalistes pour nous aider à détecter les cas frauduleux. Cet ensemble de données met en évidence le problème des données limitées : sur 285 000 transactions, seules 492 sont des fraudes. 492 cas de fraude ne constituent pas un ensemble de données volumineux sur lequel s'entraîner, en particulier lorsqu'il s'agit de tâches d'apprentissage automatique où les gens aiment disposer d'ensembles de données de plusieurs ordres de grandeur plus grands. Bien que les résultats de mon expérience n'aient pas été étonnants, j'ai beaucoup appris sur les GAN en cours de route que je suis heureux de partager.

Avant de commencer

Avant de plonger dans ce domaine des GAN, si vous souhaitez approfondir rapidement vos compétences en apprentissage automatique ou en apprentissage approfondi, vous pouvez consulter ces deux articles de blog connexes :

  • Une introduction à la théorie de l'apprentissage automatique et à son application : un didacticiel visuel avec des exemples
  • Un tutoriel d'apprentissage en profondeur : des perceptrons aux réseaux profonds

Pourquoi les GAN ?

Les réseaux antagonistes génératifs (GAN) sont une architecture de réseau neuronal qui a montré des améliorations impressionnantes par rapport aux méthodes génératives précédentes, telles que les auto-encodeurs variationnels ou les machines boltzman restreintes. Les GAN ont pu générer des images plus réalistes (par exemple, DCGAN), permettre le transfert de style entre les images (voir ici et ici), générer des images à partir de descriptions textuelles (StackGAN) et apprendre à partir d'ensembles de données plus petits via un apprentissage semi-supervisé. En raison de ces réalisations, ils suscitent beaucoup d'intérêt dans les secteurs académique et commercial.

Le directeur de la recherche sur l'IA chez Facebook, Yann LeCunn, les a même qualifiées de développement le plus excitant de l'apprentissage automatique au cours de la dernière décennie.

Les bases

Pensez à la façon dont vous apprenez. Vous essayez quelque chose, vous obtenez des commentaires. Vous ajustez votre stratégie et réessayez.

La rétroaction peut prendre la forme de critiques, de douleur ou de profit. Cela peut provenir de votre propre jugement sur la façon dont vous avez réussi. Souvent, le feedback le plus utile est le feedback d'une autre personne, car il ne s'agit pas seulement d'un chiffre ou d'une sensation, mais d'une évaluation intelligente de la manière dont vous avez exécuté la tâche.

Lorsqu'un ordinateur est formé pour une tâche, l'humain fournit généralement le retour d'information sous la forme de paramètres ou d'algorithmes ajustés. Cela fonctionne bien lorsque la tâche est bien définie, comme apprendre à multiplier deux nombres. Vous pouvez facilement et exactement dire à l'ordinateur qu'il s'est trompé.

Avec une tâche plus compliquée, telle que la création d'une image de chien, il devient plus difficile de fournir des commentaires. L'image est-elle floue, ressemble-t-elle davantage à un chat ou ressemble-t-elle à quelque chose du tout ? Des statistiques complexes pourraient être mises en œuvre, mais il serait difficile de capturer tous les détails qui font qu'une image semble réelle.

Un être humain peut donner une estimation, car nous avons beaucoup d'expérience dans l'évaluation des entrées visuelles, mais nous sommes relativement lents et nos évaluations peuvent être très subjectives. Nous pourrions plutôt former un réseau de neurones pour apprendre la tâche de discriminer entre les images réelles et générées.

Ensuite, en laissant le générateur d'images (également un réseau de neurones) et le discriminateur apprendre l'un de l'autre à tour de rôle, ils peuvent s'améliorer avec le temps. Ces deux réseaux, jouant ce jeu, sont un réseau antagoniste génératif.

Vous pouvez entendre l'inventeur des GAN, Ian Goodfellow, expliquer comment une dispute dans un bar sur ce sujet a conduit à une nuit fébrile de codage qui a abouti au premier GAN. Et oui, il reconnaît la barre dans son article. Vous pouvez en savoir plus sur les GAN sur le blog de Ian Goodfellow sur ce sujet.

Schéma du GAN

Il existe un certain nombre de défis lorsque vous travaillez avec des GAN. La formation d'un seul réseau de neurones peut être difficile en raison du nombre de choix impliqués : architecture, fonctions d'activation, méthode d'optimisation, taux d'apprentissage et taux d'abandon, pour n'en nommer que quelques-uns.

Les GAN doublent tous ces choix et ajoutent de nouvelles complexités. Le générateur et le discriminateur peuvent oublier des astuces qu'ils ont utilisées plus tôt dans leur formation. Cela peut conduire les deux réseaux à se retrouver pris dans un cycle stable de solutions qui ne s'améliorent pas avec le temps. Un réseau peut dominer l'autre réseau, de sorte qu'aucun ne peut plus apprendre. Ou, le générateur peut ne pas explorer une grande partie de l'espace de solutions possibles, juste assez pour trouver des solutions réalistes. Cette dernière situation est connue sous le nom d'effondrement de mode.

L'effondrement de mode se produit lorsque le générateur n'apprend qu'un petit sous-ensemble des modes réalistes possibles. Par exemple, si la tâche consiste à générer des images de chiens, le générateur pourrait apprendre à créer uniquement des images de petits chiens bruns. Le générateur aurait raté tous les autres modes constitués de chiens d'autres tailles ou couleurs.

De nombreuses stratégies ont été mises en œuvre pour résoudre ce problème, notamment la normalisation par lots, l'ajout d'étiquettes dans les données d'apprentissage ou la modification de la manière dont le discriminateur évalue les données générées.

Les gens ont remarqué que l'ajout d'étiquettes aux données, c'est-à-dire leur division en catégories, améliore presque toujours les performances des GAN. Au lieu d'apprendre à générer des images d'animaux de compagnie en général, il devrait être plus facile de générer des images de chats, de chiens, de poissons et de furets, par exemple.

Les percées les plus importantes dans le développement du GAN sont peut-être venues en termes de changement de la façon dont le discriminateur évalue les données, alors examinons cela de plus près.

Dans la formulation originale des GAN en 2014 par Goodfellow et al., le discriminateur génère une estimation de la probabilité qu'une image donnée soit réelle ou générée. Le discriminateur recevrait un ensemble d'images qui se composait à la fois d'images réelles et générées et il générerait une estimation pour chacune de ces entrées. L'erreur entre la sortie du discriminateur et les étiquettes réelles serait alors mesurée par la perte d'entropie croisée. La perte d'entropie croisée peut être assimilée à la métrique de distance Jensen-Shannon, et elle a été montrée au début de 2017 par Arjovsky et al. que cette métrique échouerait dans certains cas et ne pointerait pas dans la bonne direction dans d'autres cas. Ce groupe a montré que la métrique de distance de Wasserstein (également connue sous le nom de terrassement ou distance EM) fonctionnait et fonctionnait mieux dans de nombreux autres cas.

La perte d'entropie croisée est une mesure de la précision avec laquelle le discriminateur a identifié les images réelles et générées. La métrique de Wasserstein examine plutôt la distribution de chaque variable (c'est-à-dire chaque couleur de chaque pixel) dans les images réelles et générées, et détermine la distance entre les distributions pour les données réelles et générées. La métrique de Wasserstein examine la quantité d'efforts, en termes de masse multipliée par la distance, qu'il faudrait pour pousser la distribution générée dans la forme de la distribution réelle, d'où l'autre nom de "distance de terrassement". Étant donné que la métrique de Wasserstein n'évalue plus si une image est réelle ou non, mais fournit plutôt une critique de la distance entre les images générées et les images réelles, le réseau "discriminateur" est appelé réseau "critique" dans le Wasserstein. architecture.

Pour une exploration un peu plus complète des GAN, dans cet article, nous allons explorer quatre architectures différentes :

  • GAN : Le GAN original (« vanille »)
  • CGAN : une version conditionnelle du GAN d'origine qui utilise des étiquettes de classe
  • WGAN : Le Wasserstein GAN (avec pénalité de gradient)
  • WCGAN : une version conditionnelle du Wasserstein GAN

Mais jetons d'abord un coup d'œil à notre ensemble de données.

Un regard sur les données de fraude par carte de crédit

Nous travaillerons avec l'ensemble de données de détection de fraude par carte de crédit de Kaggle.

L'ensemble de données se compose d'environ 285 000 transactions, dont seulement 492 sont frauduleuses. Les données se composent de 31 caractéristiques : "temps", "montant", "classe" et 28 caractéristiques supplémentaires anonymisées. La caractéristique de classe est l'étiquette indiquant si une transaction est frauduleuse ou non, 0 indiquant normal et 1 indiquant une fraude. Toutes les données sont numériques et continues (sauf l'étiquette). L'ensemble de données ne contient aucune valeur manquante. L'ensemble de données est déjà en assez bon état pour commencer, mais je vais faire un peu plus de nettoyage, en ajustant principalement les moyennes de toutes les fonctionnalités à zéro et les écarts-types à un. J'ai décrit plus en détail mon processus de nettoyage dans le cahier ici. Pour l'instant, je vais juste montrer le résultat final:

Fonctionnalités vs graphes de classe

On peut facilement repérer des différences entre les données normales et les données sur la fraude dans ces distributions, mais il y a aussi beaucoup de chevauchements. Nous pouvons appliquer l'un des algorithmes d'apprentissage automatique les plus rapides et les plus puissants pour identifier les fonctionnalités les plus utiles pour identifier la fraude. Cet algorithme, xgboost, est un algorithme d'arbre de décision boosté par le gradient. Nous allons l'entraîner sur 70 % de l'ensemble de données et le tester sur les 30 % restants. Nous pouvons configurer l'algorithme pour qu'il continue jusqu'à ce qu'il n'améliore pas le rappel (la fraction d'échantillons frauduleux détectés) sur l'ensemble de données de test. Cela permet d'obtenir un rappel de 76 % sur l'ensemble de test, ce qui laisse clairement place à l'amélioration. Il atteint une précision de 94 %, ce qui signifie que seuls 6 % des cas de fraude prévus étaient en réalité des transactions normales. De cette analyse, nous obtenons également une liste de fonctionnalités triées selon leur utilité dans la détection des fraudes. Nous pouvons utiliser les fonctionnalités les plus importantes pour visualiser nos résultats ultérieurement.

Encore une fois, si nous disposions de plus de données sur la fraude, nous pourrions peut-être mieux la détecter. Autrement dit, nous pourrions obtenir un rappel plus élevé. Nous allons maintenant essayer de générer de nouvelles données réalistes sur les fraudes à l'aide de GAN pour nous aider à détecter les fraudes réelles.

Générer de nouvelles données de carte de crédit avec des GAN

Pour appliquer diverses architectures GAN à cet ensemble de données, je vais utiliser GAN-Sandbox, qui possède un certain nombre d'architectures GAN populaires implémentées en Python à l'aide de la bibliothèque Keras et d'un back-end TensorFlow. Tous mes résultats sont disponibles sous forme de cahier Jupyter ici. Toutes les bibliothèques nécessaires sont incluses dans l'image Kaggle/Python Docker, si vous avez besoin d'une configuration facile.

Les exemples dans GAN-Sandbox sont configurés pour le traitement d'image. Le générateur produit une image 2D avec 3 canaux de couleur pour chaque pixel, et le discriminateur/critique est configuré pour évaluer ces données. Des transformations convolutives sont utilisées entre les couches des réseaux pour tirer parti de la structure spatiale des données d'image. Chaque neurone d'une couche convolutive ne fonctionne qu'avec un petit groupe d'entrées et de sorties (par exemple, des pixels adjacents dans une image) pour permettre l'apprentissage des relations spatiales. Notre ensemble de données de carte de crédit ne possède aucune structure spatiale parmi les variables, j'ai donc converti les réseaux convolutifs en réseaux avec des couches densément connectées. Les neurones des couches densément connectées sont connectés à chaque entrée et sortie de la couche, permettant au réseau d'apprendre ses propres relations entre les entités. J'utiliserai cette configuration pour chacune des architectures.

Le premier GAN que j'évaluerai oppose le réseau générateur au réseau discriminateur, en utilisant la perte d'entropie croisée du discriminateur pour entraîner les réseaux. Il s'agit de l'architecture GAN "vanille" originale. Le deuxième GAN que j'évaluerai ajoute des étiquettes de classe aux données à la manière d'un GAN conditionnel (CGAN). Ce GAN a une autre variable dans les données, l'étiquette de classe. Le troisième GAN utilisera la métrique de distance de Wasserstein pour former les réseaux (WGAN), et le dernier utilisera les étiquettes de classe et la métrique de distance de Wasserstein (WCGAN).

Architectures GAN

Nous formerons les différents GAN à l'aide d'un ensemble de données de formation composé des 492 transactions frauduleuses. Nous pouvons ajouter des classes à l'ensemble de données de fraude pour faciliter les architectures GAN conditionnelles. J'ai exploré quelques méthodes de regroupement différentes dans le bloc-notes et j'ai opté pour une classification KMeans qui trie les données de fraude en 2 classes.

Je vais entraîner chaque GAN pendant 5000 tours et examiner les résultats en cours de route. Dans la figure 4, nous pouvons voir les données de fraude réelles et les données de fraude générées à partir des différentes architectures GAN au fur et à mesure que la formation progresse. Nous pouvons voir les données de fraude réelles divisées en 2 classes KMeans, tracées avec les 2 dimensions qui discriminent le mieux ces deux classes (caractéristiques V10 et V17 des caractéristiques transformées PCA). Les deux GAN qui n'utilisent pas les informations de classe, le GAN et le WGAN, ont leur sortie générée comme une seule classe. Les architectures conditionnelles, le CGAN et le WCGAN, affichent leurs données générées par classe. À l'étape 0, toutes les données générées montrent la distribution normale de l'entrée aléatoire envoyée aux générateurs.

Comparaison de sortie GAN

Nous pouvons voir que l'architecture GAN d'origine commence à apprendre la forme et la plage des données réelles, mais s'effondre ensuite vers une petite distribution. C'est l'effondrement de mode discuté plus tôt. Le générateur a appris une petite plage de données que le discriminateur a du mal à détecter comme fausses. L'architecture CGAN fait un peu mieux, étalant et approchant les distributions de chaque classe de données de fraude, mais ensuite l'effondrement du mode s'installe, comme on peut le voir à l'étape 5000.

Le WGAN ne subit pas l'effondrement de mode présenté par les architectures GAN et CGAN. Même sans informations de classe, il commence à supposer la distribution non normale des données de fraude réelles. L'architecture WCGAN fonctionne de manière similaire et est capable de générer des classes de données distinctes.

Nous pouvons évaluer le réalisme des données en utilisant le même algorithme xgboost utilisé précédemment pour la détection des fraudes. Il est rapide et puissant et fonctionne immédiatement sans beaucoup de réglages. Nous formerons le classificateur xgboost en utilisant la moitié des données de fraude réelles (246 échantillons) et un nombre égal d'exemples générés par le GAN. Ensuite, nous testerons le classificateur xgboost en utilisant l'autre moitié des données de fraude réelles et un ensemble différent de 246 exemples générés par GAN. Cette méthode orthogonale (au sens expérimental) nous donnera une indication de la capacité du générateur à produire des données réalistes. Avec des données générées parfaitement réalistes, l'algorithme xgboost devrait atteindre une précision de 0,50 (50 %) - en d'autres termes, ce n'est pas mieux que de deviner.

Précision

Nous pouvons voir la précision xgboost sur les données générées par le GAN diminuer d'abord, puis augmenter après l'étape de formation 1000 à mesure que l'effondrement du mode s'installe. L'architecture CGAN obtient des données un peu plus réalistes après 2000 étapes, mais ensuite l'effondrement du mode s'installe pour ce réseau comme bien. Les architectures WGAN et WCGAN obtiennent plus rapidement des données plus réalistes et continuent d'apprendre au fur et à mesure que la formation progresse. Le WCGAN ne semble pas avoir beaucoup d'avantage sur le WGAN, ce qui suggère que ces classes créées peuvent ne pas être utiles pour les architectures Wasserstein GAN.

Vous pouvez en savoir plus sur l'architecture WGAN ici et ici.

Le réseau critique dans les architectures WGAN et WCGAN apprend à calculer la distance de Wasserstein (engin de terrassement, EM) entre un ensemble de données donné et les données de fraude réelles. Idéalement, il mesurera une distance proche de zéro pour un échantillon de données de fraude réelles. Le critique, cependant, est en train d'apprendre comment effectuer ce calcul. Tant qu'il mesure une plus grande distance pour les données générées que pour les données réelles, le réseau peut s'améliorer. Nous pouvons observer comment la différence entre les distances de Wasserstein pour les données générées et réelles change au cours de la formation. S'il atteint un plateau, une formation supplémentaire peut ne pas aider. Nous pouvons voir dans la figure 6 qu'il semble y avoir d'autres améliorations à apporter à la fois au WGAN et au WCGAN sur cet ensemble de données.

Estimation de distance EM

Qu'avons-nous appris ?

Nous pouvons maintenant tester si nous sommes capables de générer de nouvelles données de fraude suffisamment réalistes pour nous aider à détecter les données de fraude réelles. Nous pouvons prendre le générateur formé qui a obtenu le score de précision le plus bas et l'utiliser pour générer des données. Pour notre ensemble de formation de base, nous utiliserons 70 % des données non frauduleuses (199 020 cas) et 100 cas de données frauduleuses (~20 % des données frauduleuses). Ensuite, nous essaierons d'ajouter différentes quantités de données de fraude réelles ou générées à cet ensemble de formation, jusqu'à 344 cas (70 % des données de fraude). Pour l'ensemble de test, nous utiliserons les 30 % restants des cas non frauduleux (85 295 cas) et des cas frauduleux (148 cas). Nous pouvons essayer d'ajouter des données générées à partir d'un GAN non formé et du GAN le mieux formé pour tester si les données générées sont meilleures que le bruit aléatoire. D'après nos tests, il semble que notre meilleure architecture était le WCGAN à l'étape de formation 4800, où il a atteint une précision xgboost de 70 % (rappelez-vous, idéalement, la précision serait de 50 %). Nous allons donc utiliser cette architecture pour générer de nouvelles données sur la fraude.

Nous pouvons voir dans la figure 7 que le rappel (la fraction d'échantillons de fraude réels identifiés avec précision dans l'ensemble de test) n'augmente pas à mesure que nous utilisons davantage de données de fraude générées pour la formation. Le classificateur xgboost est capable de conserver toutes les informations qu'il a utilisées pour identifier la fraude parmi les 100 cas réels et de ne pas être confus par les données supplémentaires générées, même en les sélectionnant parmi des centaines de milliers de cas normaux. Les données générées par le WCGAN non formé n'aident ni ne blessent, sans surprise. Mais les données générées par le WCGAN formé n'aident pas non plus. Il semble que les données ne soient pas assez réalistes. Nous pouvons voir dans la figure 7 que lorsque des données de fraude réelles sont utilisées pour compléter l'ensemble d'apprentissage, le rappel augmente considérablement. Si le WCGAN venait d'apprendre à dupliquer les exemples de formation, sans faire preuve de créativité du tout, il aurait pu atteindre des taux de rappel plus élevés, comme nous le voyons avec les données réelles.

Effet des données supplémentaires

Vers l'infini et au-delà

Bien que nous n'ayons pas été en mesure de générer des données de fraude par carte de crédit suffisamment réalistes pour nous aider à détecter une fraude réelle, nous avons à peine effleuré la surface avec ces méthodes. Nous pourrions nous entraîner plus longtemps, avec des réseaux plus grands, et régler les paramètres des architectures que nous avons essayées dans cet article. Les tendances en matière de précision xgboost et de perte de discriminateur suggèrent que davantage de formation aidera les architectures WGAN et WCGAN. Une autre option consiste à revoir le nettoyage des données que nous avons effectué, peut-être à concevoir de nouvelles variables ou à modifier si et comment nous traitons l'asymétrie des fonctionnalités. Peut-être que différents schémas de classification des données sur la fraude seraient utiles.

Nous pourrions également essayer d'autres architectures GAN. Le DRAGAN a des preuves théoriques et expérimentales montrant qu'il s'entraîne plus rapidement et de manière plus stable que les GAN de Wasserstein. Nous pourrions intégrer des méthodes qui utilisent l'apprentissage semi-supervisé, qui se sont révélées prometteuses dans l'apprentissage à partir d'ensembles de formation limités (voir « Techniques améliorées pour la formation des GAN »). Nous pourrions essayer une architecture qui nous donne des modèles compréhensibles par l'homme, afin que nous puissions mieux comprendre la structure des données (voir InfoGAN).

Nous devons également garder un œil sur les nouveaux développements dans le domaine, et enfin et surtout, nous pouvons travailler à la création de nos propres innovations dans cet espace en évolution rapide.

Vous pouvez trouver tout le code pertinent pour cet article dans ce référentiel GitHub.

En relation : Les nombreuses applications de la descente de gradient dans TensorFlow