Eine kurze Einführung in Generative Adversarial Networks

Keine Kommentare

Am 25. Oktober 2018 wurde im weltberühmten Auktionshaus Christie’s in New York das Bild von Edmond de Belamy für 423.500$ verkauft. Das Besondere an diesem Bild? Der Künstler hinter Edmonds Gemälde ist keine reale Person, sondern eine künstliche Intelligenz des Pariser Kollektivs Obvious; und das Bild ist entstanden aus einem sogenannten Generative Adversarial Network. Es ist das erste Mal, dass ein Werk aus dem maschinellen Lernen unter den Hammer eines so bedeutenden Auktionshauses gekommen ist.

Edmond de Belamy, Copyright Christies/Obvious
Gemälde „Edmond de Belamy“. Quelle/Copyright: Obvious

Anlässlich dieses Ereignisses möchten wir an dieser Stelle einmal erklären, wie Edmond de Belamy und seine Familie entstanden sind. Dafür beschreiben wir zunächst die allgemeine Idee von generativen Netzwerken, bevor wir eine einfache Implementation mit Keras und Tensorflow vorstellen und schließlich noch einen Ausblick darauf geben, wofür diese Modelle verwendet werden können.

Was ist ein Generatives Netzwerk?

Bei dem Algorithmus, der von Obvious genutzt wurde, um die Bilder der Familie de Belamy zu erzeugen, handelt es sich wie bereits erwähnt um ein Generative Adversarial Network (GAN, zu deutsch etwa Erzeugendes Gegnerisches Netzwerk). GAN ist eine besondere Architektur von Neuronalen Netzen, in der zwei Netzwerke im Gegenspiel zueinander agieren und so voneinander lernen. GANs wurden erstmals 2014 von Ian Goodfellow und seinen Kollegen vorgestellt und erleben seitdem große Beliebtheit in der Forschungsgemeinschaft.

Um das Prinzip von Generativen Modellen zu erklären, wollen wir uns zunächst einer Analogie bedienen. In unserer Geschichte gibt es drei Akteure:

  • Gabi ist Kunstfälscherin. Ihr größtes Ziel ist es, eines ihrer gefälschten Gemälde im Auktionshaus Miller’s versteigern zu lassen.
  • Diana ist Praktikantin bei Miller’s. Ihr Job ist es, gefälschte Gemälde auszusortieren.
  • Olivia ist die Chefeinkäuferin bei Miller’s. Sie ist unfehlbar und weiß genau, welche Bilder authentisch sind und welche nicht. Olivia steht aber kurz vor der Pension und möchte Diana daher anlernen.

Gabi und Diana sind zu Beginn unserer Geschichte noch sehr unerfahren, doch entwickeln sie ihre jeweiligen Fähigkeiten im Laufe der Zeit immer weiter. Dabei läuft der Lernprozess in Zyklen ab. Zu Beginn eines jeden Zyklus fertigt Gabi einige Kunstfälschungen an und reicht diese bei Miller’s ein. Dort gelangen sie, zusammen mit echten Gemälden, zu Diana, die erkennen soll, welche Bilder echt sind und welche nicht. Diana schreibt ihre Einschätzung zu jedem Bild auf und schickt sie an Gabi und Olivia. Olivia kann mit ihrer Erfahrung Dianas Einschätzungen berichtigen, wodurch sie Schlussfolgerungen ziehen kann und in Zukunft Fälschungen besser erkennt. Gabi wiederum sieht, wie ihre Fälschungen beim Auktionshaus angekommen sind und versucht, davon ausgehend bessere Fälschungen zu malen. Damit beginnt der nächste Zyklus.

Anhand dieser kurzen Veranschaulichung wird die Idee von GANs deutlich. Es existieren zwei Neuronale Netze, die gegeneinander spielen und aus den Resultaten des jeweils anderen Netzes lernen. Das erste Netz, der Generator, erhält als Eingabe ein zufälliges Signal und erzeugt daraus ein Bild. Dieses bildet gemeinsam mit Instanzen des Trainingsdatensatzes, also echten Bildern, den Input des zweiten Netzes, dem Diskriminator. Die Aufgabe des Diskriminators ist, zu entscheiden, welche Bilder aus dem Trainingsdatensatz und welche vom Generator stammen. Der Diskriminator lernt aus seinen Vermutungen, da ihm anschließend ein Orakel den Ground Truth, also die wahre Herkunft der Bilder, vermittelt. Wie der Lernprozess in den Netzen selbst stattfindet, wurde zum Beispiel hier erklärt.

Was bedeutet die Signatur in Edmonds Portrait?

Das Portrait von Edmond de Belamy trägt, wie es bei Gemälden üblich ist, die Signatur des Künstlers. Doch wie soll ein Algorithmus signieren? Obvious entschied sich für Folgendes:

Signature on Edmond de Belamy | Source: Christies, Obvious
Signatur von „Edmond de Belamy“. Quelle/Copyright: Obvious

Diese Formel beschreibt ein GAN aus mathematischer und spieltheoretischer Sicht. Hier handelt es sich um ein typisches Minimax-Spiel, bei dem zwei Gegenspieler die jeweils optimale Strategie verfolgen und so letzten Endes im Nash-Gleichgewicht landen. Wenn wir uns die Gleichung näher ansehen, erkennen wir unsere Akteure wieder: Den Diskriminator D und Generator G. Der Diskriminator versucht, seine eigene Leistung zu maximieren, ausgedrückt durch die Kreuzentropie E(log(D(x)). Der Generator auf der anderen Seite verfolgt aber eine Minimierungsstrategie: Er möchte die Leistung des Diskriminators auf seinen eigenen Bildern minimieren (erneut ausgedrückt durch die Kreuzentropie E(1 - log(D(G(z))))).

Ein einfaches GAN mit Keras und Tensorflow

Im Folgenden möchten wir zeigen, wie man mit Keras und Tensorflow selbst ein einfaches Generatives Modell implementieren kann, das handschriftliche Ziffern lernt und nachbildet. Die Implementation orientiert sich dabei an der ursprünglichen Version von Ian Goodfellow, und berücksichtigt nicht die zahlreichen Verbesserungsstrategien, die seitdem erschienen sind. Der Code ist vollständig auch als IPython (Jupyter) Notebook verfügbar.

Im ersten Schritt laden wir unseren Datensatz in unser Notebook. Wir verwenden hierfür den MNIST-Datensatz, der sehr häufig als Demonstration für GANs verwendet wird. Wir berechnen die Auflösung der Bilder und normalisieren sie, sodass sie im Intervall [0, 1] liegen. Dadurch verbessert sich die Stabilität des Lernprozesses.



Drei Beispielbilder aus dem MNIST-Datensatz.

Als nächstes definieren wir unseren Diskriminator. Er erhält als Eingabe ein Bild, das wir über drei verdeckte Schichten verkleinern. Als Aktivierungsfunktion zwischen den Schichten verwenden wir die Leaky Rectified Linear Units, die uns eine schwache Aktivierung für negative Werte und eine lineare Aktivierung für positive Werte liefert. Die Ausgabeschicht enthält nur einen einzelnen Knoten, der die Information darüber enthalten wird, ob das Bild aus dem Trainingsdatensatz stammt oder vom Generator.


Wir definieren nun unseren Generator. Er bekommt als Input ein zufälliges Rauschsignal. Über drei verdeckte Schichten erhöhen wir die Auflösung des Signals, bis wir in der letzten Schicht die gewünschte Auflösung der MNIST-Bilder erhalten.


Für unseren Trainingsprozess ist es sinnvoll, jeweils nur ein Netz gleichzeitig zu trainieren. Daher werden wir in jeder Epoche zuerst den Diskriminator und dann den Generator trainieren. Für den Generator kompilieren wir uns hierfür ein kombiniertes Modell, in dem der Diskriminator nicht trainierbar ist. Als Optimierer verwenden wir Adam, eine Variante des stochastischen Gradientenabstiegsverfahrens, und die binäre Kreuzentropie als Fehlerfunktion.


Wir trainieren in Minibatches, also immer mit einer Untermenge des Trainingsdatensatz. Die Hälfte unserer Batches besteht aus echten Bildern, die andere Hälfte aus generierten Bildern.


Hier sind einige Bilder, die unser so trainierter Generator erzeugt hat:

Auch wenn einige Bilder noch nicht ganz überzeugen mögen, kann man mit dieser einfachen Implementierung das Potential von Generativen Modellen erkennen.

Wie kann ich mein Modell verbessern?

Mit dieser Frage beschäftigen sich zahlreiche Forschungsgruppen. Seit der ursprünglichen Publikation von Ian Goodfellow sind über 5000 Arbeiten veröffentlicht worden, die Ansätze für bessere Ergebnisse von GANs vorschlagen, oder neue Anwendungen erproben. Eine populäre Verbesserung ist etwa die Verwendung von Batch Normalization, da sich oftmals der Generator in einem lokalen Minimum festgesetzt und nur noch ähnliche Bilder erzeugt hat. Mit dem gleichen Ziel wurde auch die Minibatch Discrimination eingeführt, bei der der Diskriminator mehrere Bilder gleichzeitig präsentiert bekommt.

In einem anderen Ansatz wird vorgeschlagen, den Generator und Diskriminator mit einer geringen Bildauflösung zu initialisieren und im Laufe des Trainings schrittweise zu erhöhen. Zuletzt hat auch die Erhöhung der Netzwerkparameter und Größe der Minibatches für sehr gute Ergebnisse gesorgt.

Was sind mögliche Anwendungen von GANs?

Auf den ersten Blick scheint es sich bei GANs nur um eine (intelligente) Spielerei zu handeln, um mehr oder weniger realitätsnahe Bilder zu erzeugen. Doch GANs können auch ganz praktische Anwendungen haben. Hier seien drei Beispiele aufgeführt:

In vielen Krimiserien nehmen die Ermittler das verrauschte Bild einer Überwachungskamera und erhöhen auf scheinbar magische Weise dessen Auflösung, wodurch sie wichtige Infos, wie etwa das Autokennzeichen erkennen können. Was bislang Fiktion war, könnte bald tatsächlich eingesetzt werden, denn Christian Ledig und Kollegen stellten SRGAN vor, was die Auflösung von Bildern deutlich erhöhen kann.

Superresolution durch SRGAN, Copyright Christies/Obvious
Quelle: Tensorlayer / SRGAN

Unzählige (Video-)Kameraaufnahmen des frühen 20. Jahrhunderts existieren nur in Schwarz-Weißer-Farbe. Die nachträgliche Einfärbung erfolgt nur selten, da sie manuell durchgeführt werden muss, was aufwändig und teuer ist. Das GAN von Kamyar Nazeri und Kollegen lernt, Graustufen-Bilder einzufärben.

Image Colorization with GANs | Source: ImageLab
V.l.n.r.: Graustufe, Original, SRGAN. Quelle: ImagingLab

Auch die Modeindustrie könnte vom Einsatz Generativer Netzwerke profitieren. So gibt es bereits erfolgreiche Versuche, neue Kleidungsstile zu entwickeln oder Models neu einzukleiden, um so teuren Fotoshootings zu entgehen.

Fazit

In diesem Artikel haben wir uns mit der grundlegenden Idee von Generative Adversarial Networks beschäftigt. Diese stellen eine besondere Form von Neuronalen Netzen dar, bei denen zwei Teilnetze durch ein Minimax-Spiel versuchen, sich gegenseitig auszutricksen. Dadurch erlangt eines der beiden Netze die Fähigkeit, neuartige Bilder zu erzeugen. Der Einstieg in GANs ist nicht kompliziert, wie wir mit unserer simplen Implementierung selbst erfahren konnten. Auch wenn das volle Potential der Netzwerke noch nicht ausgereizt zu sein scheint, zeigt sich schon jetzt eine hohe Relevanz für verschiedenste Anwendungsfelder.

Wenn Sie mehr über künstliche Intelligenz erfahren möchten, finden Sie weitere Informationen auf unserer Webseite.

Tim Sabsch

Tim arbeitet seit 2018 als Data Scientist bei codecentric in Münster. Er interessiert sich insbesondere für die Interpretierbarkeit von Künstlicher Intelligenz.

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.