Erstellen Sie Daten aus Random Noise mit Generative Adversarial Networks
Veröffentlicht: 2022-03-11Seit ich von Generative Adversarial Networks (GANs) erfahren habe, bin ich von ihnen fasziniert. Ein GAN ist eine Art neuronales Netzwerk, das in der Lage ist, neue Daten von Grund auf neu zu generieren. Sie können es mit ein wenig zufälligem Rauschen als Eingabe füttern, und es kann realistische Bilder von Schlafzimmern oder Vögeln oder was auch immer es erzeugen soll, erzeugen.
In einer Sache sind sich alle Wissenschaftler einig: Wir brauchen mehr Daten.
GANs, die verwendet werden können, um neue Daten in Situationen mit begrenzten Daten zu produzieren, können sich als sehr nützlich erweisen. Die Generierung von Daten kann manchmal schwierig, teuer und zeitaufwändig sein. Um nützlich zu sein, müssen die neuen Daten jedoch realistisch genug sein, dass alle Erkenntnisse, die wir aus den generierten Daten gewinnen, immer noch auf echte Daten zutreffen. Wenn Sie einer Katze beibringen, Mäuse zu jagen, und Sie falsche Mäuse verwenden, sollten Sie besser sicherstellen, dass die falschen Mäuse tatsächlich wie Mäuse aussehen.
Eine andere Denkweise ist, dass die GANs eine Struktur in den Daten entdecken, die es ihnen ermöglicht, realistische Daten zu erstellen. Dies kann nützlich sein, wenn wir diese Struktur nicht selbst sehen oder mit anderen Methoden nicht herausziehen können.
In diesem Artikel erfahren Sie, wie mit GANs neue Daten generiert werden können. Um dieses Tutorial realistisch zu halten, verwenden wir das Dataset zur Erkennung von Kreditkartenbetrug von Kaggle.
In meinen Experimenten habe ich versucht, diesen Datensatz zu verwenden, um zu sehen, ob ich ein GAN dazu bringen kann, Daten zu erstellen, die realistisch genug sind, um uns bei der Erkennung von Betrugsfällen zu helfen. Dieser Datensatz hebt das begrenzte Datenproblem hervor: Von 285.000 Transaktionen sind nur 492 Betrug. 492 Betrugsfälle sind kein großer Datensatz, mit dem man trainieren kann, insbesondere wenn es um Aufgaben des maschinellen Lernens geht, bei denen die Menschen gerne Datensätze haben, die um mehrere Größenordnungen größer sind. Obwohl die Ergebnisse meines Experiments nicht erstaunlich waren, habe ich auf dem Weg viel über GANs gelernt, das ich gerne teilen möchte.
Bevor du anfängst
Bevor wir uns mit diesem Bereich der GANs befassen, können Sie, wenn Sie Ihre Fähigkeiten im Bereich Machine Learning oder Deep Learning schnell auffrischen möchten, einen Blick auf diese beiden verwandten Blog-Posts werfen:
- Eine Einführung in die Theorie des maschinellen Lernens und ihre Anwendung: Ein visuelles Tutorial mit Beispielen
- Ein Deep-Learning-Tutorial: Von Perceptrons zu Deep Networks
Warum GANs?
Generative Adversarial Networks (GANs) sind eine neuronale Netzwerkarchitektur, die beeindruckende Verbesserungen gegenüber früheren generativen Methoden wie Variations-Autoencodern oder eingeschränkten Boltzman-Maschinen gezeigt hat. GANs waren in der Lage, realistischere Bilder zu generieren (z. B. DCGAN), Stilübertragungen zwischen Bildern zu ermöglichen (siehe hier und hier), Bilder aus Textbeschreibungen zu generieren (StackGAN) und durch halbüberwachtes Lernen aus kleineren Datensätzen zu lernen. Aufgrund dieser Leistungen stoßen sie sowohl im akademischen als auch im kommerziellen Bereich auf großes Interesse.
Der Director of AI Research bei Facebook, Yann LeCunn, hat sie sogar als die aufregendste Entwicklung des maschinellen Lernens im letzten Jahrzehnt bezeichnet.
Die Grundlagen
Denken Sie darüber nach, wie Sie lernen. Du probierst etwas aus, du bekommst Feedback. Sie passen Ihre Strategie an und versuchen es erneut.
Das Feedback kann in Form von Kritik, Schmerz oder Gewinn kommen. Es kann aus Ihrer eigenen Einschätzung kommen, wie gut Sie abgeschnitten haben. Das nützlichste Feedback ist oft das Feedback einer anderen Person, denn es ist nicht nur eine Zahl oder Empfindung, sondern eine intelligente Einschätzung, wie gut Sie die Aufgabe erledigt haben.
Wenn ein Computer für eine Aufgabe trainiert wird, liefert der Mensch in der Regel das Feedback in Form von angepassten Parametern oder Algorithmen. Das funktioniert gut, wenn die Aufgabe gut definiert ist, wie z. B. zu lernen, zwei Zahlen zu multiplizieren. Sie können dem Computer einfach und genau sagen, was falsch war.
Bei einer komplizierteren Aufgabe, wie z. B. dem Erstellen eines Hundebildes, wird es schwieriger, Feedback zu geben. Ist das Bild verschwommen, sieht es eher wie eine Katze aus oder sieht es überhaupt wie irgendetwas aus? Komplexe Statistiken könnten implementiert werden, aber es wäre schwierig, alle Details zu erfassen, die ein Bild echt erscheinen lassen.
Ein Mensch kann eine gewisse Einschätzung abgeben, da wir viel Erfahrung mit der Bewertung visueller Eingaben haben, aber wir sind relativ langsam und unsere Bewertungen können sehr subjektiv sein. Wir könnten stattdessen ein neuronales Netzwerk darauf trainieren, die Aufgabe zu lernen, zwischen realen und generierten Bildern zu unterscheiden.
Dann können sie sich mit der Zeit verbessern, indem sie den Bildgenerator (ebenfalls ein neuronales Netzwerk) und den Diskriminator abwechselnd voneinander lernen lassen. Diese beiden Netzwerke, die dieses Spiel spielen, sind ein generatives gegnerisches Netzwerk.
Sie können den Erfinder von GANs, Ian Goodfellow, darüber sprechen hören, wie ein Streit in einer Bar zu diesem Thema zu einer fieberhaften Nacht des Programmierens führte, die zum ersten GAN führte. Und ja, er erkennt die Bar in seiner Zeitung an. Weitere Informationen zu GANs finden Sie im Blog von Ian Goodfellow zu diesem Thema.
Bei der Arbeit mit GANs gibt es eine Reihe von Herausforderungen. Das Trainieren eines einzelnen neuronalen Netzes kann aufgrund der Anzahl der beteiligten Optionen schwierig sein: Architektur, Aktivierungsfunktionen, Optimierungsverfahren, Lernrate und Abbruchrate, um nur einige zu nennen.
GANs verdoppeln all diese Auswahlmöglichkeiten und fügen neue Komplexitäten hinzu. Sowohl der Generator als auch der Diskriminator können Tricks vergessen, die sie früher in ihrem Training verwendet haben. Dies kann dazu führen, dass die beiden Netzwerke in einen stabilen Kreislauf von Lösungen geraten, die sich im Laufe der Zeit nicht verbessern. Ein Netzwerk kann das andere Netzwerk überwältigen, sodass keines mehr lernen kann. Oder der Generator untersucht möglicherweise nicht viel des möglichen Lösungsraums, sondern nur genug davon, um realistische Lösungen zu finden. Diese letzte Situation ist als Moduskollaps bekannt.
Mode Collapse liegt vor, wenn der Generator nur eine kleine Teilmenge der möglichen realistischen Moden lernt. Wenn die Aufgabe beispielsweise darin besteht, Bilder von Hunden zu erzeugen, könnte der Generator lernen, nur Bilder von kleinen braunen Hunden zu erzeugen. Der Generator hätte alle anderen Modi verpasst, die aus Hunden anderer Größe oder Farbe bestehen.
Viele Strategien wurden implementiert, um dies anzugehen, einschließlich Stapelnormalisierung, Hinzufügen von Labels in den Trainingsdaten oder durch Ändern der Art und Weise, wie der Diskriminator die generierten Daten beurteilt.
Es wurde festgestellt, dass das Hinzufügen von Labels zu den Daten – das heißt, die Aufteilung in Kategorien – fast immer die Leistung von GANs verbessert. Anstatt zu lernen, Bilder von Haustieren im Allgemeinen zu erstellen, sollte es einfacher sein, beispielsweise Bilder von Katzen, Hunden, Fischen und Frettchen zu erstellen.
Die vielleicht bedeutendsten Durchbrüche in der GAN-Entwicklung wurden in Bezug auf die Änderung der Art und Weise erzielt, wie der Diskriminator Daten auswertet. Schauen wir uns das also genauer an.
In der ursprünglichen Formulierung von GANs im Jahr 2014 von Goodfellow et al. generiert der Diskriminator eine Schätzung der Wahrscheinlichkeit, dass ein bestimmtes Bild echt war oder generiert wurde. Dem Diskriminator würde ein Satz von Bildern zugeführt werden, der sowohl aus realen als auch aus erzeugten Bildern besteht, und er würde eine Schätzung für jede dieser Eingaben erzeugen. Der Fehler zwischen der Diskriminatorausgabe und den tatsächlichen Markierungen würde dann durch Kreuzentropieverlust gemessen. Der Kreuzentropieverlust kann mit der Jensen-Shannon-Distanzmetrik gleichgesetzt werden und wurde Anfang 2017 von Arjovsky et al. dass diese Metrik in einigen Fällen versagen und in anderen Fällen nicht in die richtige Richtung weisen würde. Diese Gruppe zeigte, dass die Wasserstein-Distanzmetrik (auch bekannt als Erdbewegungs- oder EM-Distanz) in vielen weiteren Fällen funktionierte und besser funktionierte.
Der Kreuzentropieverlust ist ein Maß dafür, wie genau der Diskriminator reale und erzeugte Bilder identifiziert hat. Die Wasserstein-Metrik betrachtet stattdessen die Verteilung jeder Variablen (dh jede Farbe jedes Pixels) in den realen und generierten Bildern und bestimmt, wie weit die Verteilungen für reale und generierte Daten voneinander entfernt sind. Die Wasserstein-Metrik untersucht, wie viel Aufwand in Bezug auf Masse mal Entfernung erforderlich wäre, um die generierte Verteilung in die Form der realen Verteilung zu bringen, daher der alternative Name „Earth Mover Distance“. Da die Wasserstein-Metrik nicht mehr bewertet, ob ein Bild echt ist oder nicht, sondern Kritik darüber liefert, wie weit die generierten Bilder von den realen Bildern entfernt sind, wird das „Diskriminator“-Netzwerk im Wasserstein als „Kritik“-Netzwerk bezeichnet die Architektur.
Für eine etwas umfassendere Untersuchung von GANs werden wir in diesem Artikel vier verschiedene Architekturen untersuchen:
- GAN: Das ursprüngliche („Vanille“) GAN
- CGAN: Eine bedingte Version des ursprünglichen GAN, die Klassenbezeichnungen verwendet
- WGAN: Die Wasserstein GAN (mit Steigungsstrafe)
- WCGAN: Eine bedingte Version des Wasserstein GAN
Aber werfen wir zuerst einen Blick auf unseren Datensatz.
Ein Blick auf Kreditkartenbetrugsdaten
Wir werden mit dem Dataset zur Erkennung von Kreditkartenbetrug von Kaggle arbeiten.
Der Datensatz besteht aus ~285.000 Transaktionen, von denen nur 492 betrügerisch sind. Die Daten bestehen aus 31 Merkmalen: „Zeit“, „Menge“, „Klasse“ und 28 weiteren, anonymisierten Merkmalen. Das Klassenmerkmal ist das Etikett, das anzeigt, ob eine Transaktion betrügerisch ist oder nicht, wobei 0 normal und 1 Betrug anzeigt. Alle Daten sind numerisch und fortlaufend (außer dem Etikett). Der Datensatz enthält keine fehlenden Werte. Der Datensatz ist für den Anfang bereits in ziemlich gutem Zustand, aber ich werde noch ein wenig mehr aufräumen, hauptsächlich indem ich nur die Mittelwerte aller Merkmale auf Null und die Standardabweichungen auf Eins anpasse. Ich habe meinen Reinigungsprozess hier im Notizbuch näher beschrieben. Im Moment zeige ich nur das Endergebnis:
Man kann leicht Unterschiede zwischen den normalen und Betrugsdaten in diesen Verteilungen erkennen, aber es gibt auch viele Überschneidungen. Wir können einen der schnelleren und leistungsstärkeren maschinellen Lernalgorithmen anwenden, um die nützlichsten Funktionen zur Erkennung von Betrug zu identifizieren. Dieser Algorithmus, xgboost, ist ein gradientenverstärkter Entscheidungsbaumalgorithmus. Wir trainieren es mit 70 % des Datensatzes und testen es mit den restlichen 30 %. Wir können den Algorithmus so einrichten, dass er fortfährt, bis er den Abruf (den Anteil der erkannten Betrugsproben) im Testdatensatz nicht mehr verbessert. Damit werden 76 % Recall am Test-Set erreicht, was deutlich Raum für Verbesserungen lässt. Es erreicht zwar eine Genauigkeit von 94 %, was bedeutet, dass nur 6 % der prognostizierten Betrugsfälle tatsächlich normale Transaktionen waren. Aus dieser Analyse erhalten wir auch eine Liste von Funktionen, sortiert nach ihrer Nützlichkeit bei der Betrugserkennung. Wir können die wichtigsten Funktionen verwenden, um unsere Ergebnisse später zu visualisieren.

Auch hier gilt: Wenn wir mehr Betrugsdaten hätten, könnten wir sie möglicherweise besser erkennen. Das heißt, wir könnten einen höheren Recall erreichen. Wir werden nun versuchen, mithilfe von GANs neue, realistische Betrugsdaten zu generieren, die uns dabei helfen, tatsächlichen Betrug zu erkennen.
Generieren neuer Kreditkartendaten mit GANs
Um verschiedene GAN-Architekturen auf diesen Datensatz anzuwenden, werde ich GAN-Sandbox verwenden, die eine Reihe beliebter GAN-Architekturen in Python mit der Keras-Bibliothek und einem TensorFlow-Back-End implementiert hat. Alle meine Ergebnisse sind hier als Jupyter-Notebook verfügbar. Alle erforderlichen Bibliotheken sind im Docker-Image von Kaggle/Python enthalten, wenn Sie eine einfache Einrichtung benötigen.
Die Beispiele in GAN-Sandbox sind für die Bildverarbeitung eingerichtet. Der Generator erzeugt ein 2D-Bild mit 3 Farbkanälen für jedes Pixel, und der Diskriminator/Kritik ist so konfiguriert, dass er solche Daten auswertet. Faltungstransformationen werden zwischen Schichten der Netzwerke verwendet, um die räumliche Struktur von Bilddaten auszunutzen. Jedes Neuron in einer Faltungsschicht arbeitet nur mit einer kleinen Gruppe von Ein- und Ausgängen (z. B. benachbarte Pixel in einem Bild), um das Erlernen räumlicher Beziehungen zu ermöglichen. Unserem Kreditkartendatensatz fehlt jegliche räumliche Struktur unter den Variablen, daher habe ich die Faltungsnetzwerke in Netzwerke mit dicht verbundenen Schichten konvertiert. Die Neuronen in dicht verbundenen Schichten sind mit jedem Ein- und Ausgang der Schicht verbunden, wodurch das Netzwerk seine eigenen Beziehungen zwischen den Merkmalen lernen kann. Ich werde dieses Setup für jede der Architekturen verwenden.
Das erste GAN, das ich evaluieren werde, stellt das Generatornetzwerk gegen das Diskriminatornetzwerk und nutzt den Kreuzentropieverlust des Diskriminators, um die Netzwerke zu trainieren. Dies ist die ursprüngliche „Vanille“-GAN-Architektur. Das zweite GAN, das ich auswerten werde, fügt den Daten Klassenbezeichnungen in der Art eines bedingten GAN (CGAN) hinzu. Dieses GAN hat eine weitere Variable in den Daten, die Klassenbezeichnung. Das dritte GAN verwendet die Wasserstein-Distanzmetrik zum Trainieren der Netzwerke (WGAN), und das letzte verwendet die Klassenbezeichnungen und die Wasserstein-Distanzmetrik (WCGAN).
Wir trainieren die verschiedenen GANs mit einem Trainingsdatensatz, der aus allen 492 betrügerischen Transaktionen besteht. Wir können dem Betrugsdatensatz Klassen hinzufügen, um die bedingten GAN-Architekturen zu vereinfachen. Ich habe einige verschiedene Clustering-Methoden im Notebook untersucht und mich für eine KMeans-Klassifizierung entschieden, die die Betrugsdaten in zwei Klassen sortiert.
Ich werde jeden GAN für 5000 Runden trainieren und die Ergebnisse auf dem Weg untersuchen. In Abbildung 4 sehen wir die tatsächlichen Betrugsdaten und die generierten Betrugsdaten aus den verschiedenen GAN-Architekturen im Verlauf des Trainings. Wir können die tatsächlichen Betrugsdaten sehen, die in die 2 KMeans-Klassen unterteilt sind, dargestellt mit den 2 Dimensionen, die diese beiden Klassen am besten unterscheiden (Merkmale V10 und V17 von den PCA-transformierten Merkmalen). Die beiden GANs, die keine Klasseninformationen verwenden, GAN und WGAN, haben ihre generierte Ausgabe alle als eine Klasse. Die bedingten Architekturen CGAN und WCGAN zeigen ihre generierten Daten nach Klasse. Bei Schritt 0 zeigen alle generierten Daten die normale Verteilung der zufälligen Eingabe, die den Generatoren zugeführt wird.
Wir können sehen, dass die ursprüngliche GAN-Architektur beginnt, die Form und den Bereich der tatsächlichen Daten zu lernen, dann aber in Richtung einer kleinen Verteilung zusammenbricht. Dies ist der früher diskutierte Modenkollaps. Der Generator hat eine kleine Reihe von Daten gelernt, die der Diskriminator nur schwer als Fälschung erkennen kann. Die CGAN-Architektur funktioniert etwas besser, indem sie sich ausbreitet und sich den Verteilungen jeder Klasse von Betrugsdaten annähert, aber dann setzt der Moduskollaps ein, wie bei Schritt 5000 zu sehen ist.
Das WGAN erfährt nicht den Modenkollaps, den die GAN- und CGAN-Architekturen zeigen. Selbst ohne Klasseninformationen beginnt es, die nicht normale Verteilung der tatsächlichen Betrugsdaten anzunehmen. Die WCGAN-Architektur verhält sich ähnlich und ist in der Lage, die getrennten Datenklassen zu erzeugen.
Wir können bewerten, wie realistisch die Daten aussehen, indem wir den gleichen xgboost-Algorithmus verwenden, der zuvor für die Betrugserkennung verwendet wurde. Es ist schnell und leistungsstark und funktioniert ohne viel Tuning von der Stange. Wir trainieren den xgboost-Klassifikator mit der Hälfte der tatsächlichen Betrugsdaten (246 Stichproben) und einer gleichen Anzahl von GAN-generierten Beispielen. Dann testen wir den xgboost-Klassifikator mit der anderen Hälfte der tatsächlichen Betrugsdaten und einem anderen Satz von 246 von GAN generierten Beispielen. Diese orthogonale Methode (im experimentellen Sinne) gibt uns einen Hinweis darauf, wie erfolgreich der Generator bei der Erzeugung realistischer Daten ist. Mit absolut realistisch generierten Daten sollte der xgboost-Algorithmus eine Genauigkeit von 0,50 (50 %) erreichen – mit anderen Worten, er ist nicht besser als zu raten.
Wir können sehen, dass die xgboost-Genauigkeit der von GAN generierten Daten zunächst abnimmt und dann nach dem Trainingsschritt 1000 zunimmt, wenn der Moduseinbruch einsetzt. Die CGAN-Architektur erzielt etwas realistischere Daten nach 2000 Schritten, aber dann setzt der Moduseinbruch für dieses Netzwerk ein Gut. Die WGAN- und WCGAN-Architekturen erzielen schneller realistischere Daten und lernen weiter, während das Training fortschreitet. Das WCGAN scheint keinen großen Vorteil gegenüber dem WGAN zu haben, was darauf hindeutet, dass diese erstellten Klassen für die Wasserstein-GAN-Architekturen möglicherweise nicht nützlich sind.
Hier und hier erfahren Sie mehr über die WGAN-Architektur.
Das Kritikernetzwerk in den WGAN- und WCGAN-Architekturen lernt, die Wasserstein-Distanz (Earth-mover, EM) zwischen einem bestimmten Datensatz und den tatsächlichen Betrugsdaten zu berechnen. Idealerweise misst es für eine Stichprobe tatsächlicher Betrugsdaten einen Abstand nahe Null. Der Kritiker ist jedoch dabei, zu lernen, wie man diese Berechnung durchführt. Solange für generierte Daten eine größere Entfernung gemessen wird als für echte Daten, kann sich das Netzwerk verbessern. Wir können beobachten, wie sich die Differenz zwischen Wassersteindistanzen für generierte und reale Daten im Laufe des Trainings verändert. Wenn es zu einem Plateau kommt, hilft möglicherweise kein weiteres Training. Wir können in Abbildung 6 sehen, dass bei diesem Datensatz sowohl für WGAN als auch für WCGAN eine weitere Verbesserung erforderlich zu sein scheint.
Was haben wir gelernt?
Jetzt können wir testen, ob wir in der Lage sind, neue Betrugsdaten zu generieren, die realistisch genug sind, um uns dabei zu helfen, tatsächliche Betrugsdaten zu erkennen. Wir können den trainierten Generator nehmen, der die niedrigste Genauigkeitsbewertung erzielt hat, und ihn zum Generieren von Daten verwenden. Für unser grundlegendes Trainingsset verwenden wir 70 % der Nichtbetrugsdaten (199.020 Fälle) und 100 Fälle der Betrugsdaten (~20 % der Betrugsdaten). Dann versuchen wir, diesem Trainingssatz unterschiedliche Mengen echter oder generierter Betrugsdaten hinzuzufügen, bis zu 344 Fälle (70 % der Betrugsdaten). Für den Testsatz verwenden wir die anderen 30 % der Nicht-Betrugsfälle (85.295 Fälle) und Betrugsfälle (148 Fälle). Wir können versuchen, generierte Daten von einem untrainierten GAN und von dem am besten trainierten GAN hinzuzufügen, um zu testen, ob die generierten Daten besser sind als zufälliges Rauschen. Aus unseren Tests geht hervor, dass unsere beste Architektur das WCGAN bei Trainingsschritt 4800 war, wo es eine xgboost-Genauigkeit von 70 % erreichte (denken Sie daran, dass die Genauigkeit im Idealfall 50 % betragen würde). Wir werden diese Architektur also verwenden, um neue Betrugsdaten zu generieren.
Wir können in Abbildung 7 sehen, dass die Erinnerung (der Anteil der tatsächlichen Betrugsproben, die im Testsatz genau identifiziert wurden) nicht zunimmt, wenn wir mehr generierte Betrugsdaten für das Training verwenden. Der xgboost-Klassifikator ist in der Lage, alle Informationen zu speichern, die er verwendet hat, um Betrug aus den 100 echten Fällen zu identifizieren, und wird nicht durch die zusätzlich generierten Daten verwirrt, selbst wenn er sie aus Hunderttausenden von normalen Fällen heraussucht. Die generierten Daten des ungeschulten WCGAN helfen oder schaden nicht, wenig überraschend. Aber auch die generierten Daten des trainierten WCGAN helfen nicht weiter. Es scheint, dass die Daten nicht realistisch genug sind. Wir können in Abbildung 7 sehen, dass, wenn tatsächliche Betrugsdaten verwendet werden, um das Trainingsset zu ergänzen, der Rückruf signifikant zunimmt. Wenn der WCGAN nur gelernt hätte, die Trainingsbeispiele zu duplizieren, ohne überhaupt kreativ zu werden, hätte er höhere Erinnerungsraten erzielen können, wie wir mit den realen Daten sehen.
Bis zur Unendlichkeit und weiter
Obwohl wir nicht in der Lage waren, Kreditkartenbetrugsdaten zu generieren, die realistisch genug sind, um tatsächlichen Betrug aufzudecken, haben wir mit diesen Methoden kaum an der Oberfläche gekratzt. Wir könnten länger mit größeren Netzwerken trainieren und die Parameter für die Architekturen, die wir in diesem Artikel ausprobiert haben, optimieren. Die Trends in xgboost-Genauigkeit und Diskriminatorverlust deuten darauf hin, dass mehr Training den WGAN- und WCGAN-Architekturen helfen wird. Eine andere Möglichkeit besteht darin, die von uns durchgeführte Datenbereinigung zu überdenken, vielleicht einige neue Variablen zu entwickeln oder zu ändern, ob und wie wir Schiefe in Features angehen. Vielleicht würden unterschiedliche Klassifikationsschemata der Betrugsdaten helfen.
Wir könnten auch andere GAN-Architekturen ausprobieren. Der DRAGAN hat theoretische und experimentelle Beweise dafür, dass er schneller und stabiler trainiert als die Wasserstein GANs. Wir könnten Methoden integrieren, die halbüberwachtes Lernen nutzen, das sich beim Lernen aus begrenzten Trainingssets als vielversprechend erwiesen hat (siehe „Verbesserte Techniken für das Training von GANs“). Wir könnten eine Architektur ausprobieren, die uns für Menschen verständliche Modelle liefert, damit wir die Struktur der Daten vielleicht besser verstehen (siehe InfoGAN).
Wir sollten auch nach neuen Entwicklungen auf diesem Gebiet Ausschau halten, und nicht zuletzt können wir daran arbeiten, unsere eigenen Innovationen in diesem sich schnell entwickelnden Bereich zu schaffen.
Den gesamten relevanten Code für diesen Artikel finden Sie in diesem GitHub-Repository.