{"id":180239,"date":"2023-07-16T21:48:58","date_gmt":"2023-07-16T20:48:58","guid":{"rendered":"https:\/\/liora.io\/de\/?p=180239"},"modified":"2026-02-06T06:33:04","modified_gmt":"2026-02-06T05:33:04","slug":"deep-convolutional-gan-was-ist-das","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/deep-convolutional-gan-was-ist-das","title":{"rendered":"Deep Convolutional GAN: Was ist das?"},"content":{"rendered":"<h3>Neuronale Netze sind in der Welt der Daten mittlerweile allgegenw\u00e4rtig, aber wenn es ein innovatives Konzept gibt, das in den letzten Jahren aufgekommen ist, dann sind es GANs. Diese Netze, die durch Konfrontation lernen, sind besonders effizient, und wenn dieses Konzept mit dem neuesten Stand der Bildverarbeitungstechniken kombiniert wird, erh\u00e4lt man das, was wir in diesem Artikel behandeln werden, die DCGANs oder Deep Convolutional Generative Adversarial Networks (Deep Convolutional Generative Adversarial Networks).<\/h3>\n<h3>Was ist das GAN-Konzept?<\/h3>\n<p>Zur Erinnerung: Das Konzept der <a href=\"https:\/\/liora.io\/de\/generative-antagonistische-netzwerke-oder-gan-was-ist-das\">GANs<\/a> besteht darin, dass zwei Netzwerke, der Generator (G) und der Discriminator (D), gegeneinander antreten. Der Generator lernt, ein realistisches Bild (\u00e4hnlich wie in einem Datensatz) zu erzeugen, das vom Diskriminator, der bereits Bilder aus dem Datensatz gesehen hat, beurteilt wird. Wenn das <strong>D-Netz<\/strong> falsch ist, muss es aus seinem Fehler lernen, wenn das D-Netz richtig liegt, muss das G-Netz sich verbessern.<\/p>\n<p>Das Lernen erfolgt \u00fcber die Loss Functions der beiden Netzwerke, wie bei traditionellen Netzwerken.<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"439\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Discriminateur.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Discriminateur.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Discriminateur-300x165.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Discriminateur-768x422.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\"><figcaption><\/figcaption><\/figure>\n<p>Wenn du mehr dar\u00fcber erfahren m\u00f6chtest, haben wir einen Artikel \u00fcber das Konzept der<strong> GANs und ihre Verwendung.<\/strong><\/p>\n<p>Schon bald wurden die Grenzen dieser Methode deutlich: Die erzeugten Bilder waren nicht realistisch genug, insbesondere wenn man versuchte, die Qualit\u00e4t oder die Feinheit der Bilder zu erh\u00f6hen. Diese Grenze liegt in der Struktur der Generator- und Diskriminator-Netzwerke selbst begr\u00fcndet. Einfache, dichte Netzwerke (feed-forward oder fully connected) erlauben es nicht, alle <a href=\"https:\/\/liora.io\/de\/gesichtserkennung-entschluesselung-ihrer-funktionsweise\">Besonderheiten eines Bildes optimal zu nutzen<\/a>. Dazu m\u00fcssen komplexere Netzwerke verwendet werden, die als <a href=\"https:\/\/liora.io\/de\/convolutional-neural-network-2\">Convolutional Neural Networks (CNNs oder ConvNets)<\/a> bezeichnet werden.<\/p>\n<p>Bevor wir auf die Details der <strong>DCGAN-Implementierung<\/strong> eingehen, ist es notwendig, die Schl\u00fcsselkonzepte zu verstehen, aus denen sich<strong> CNNs<\/strong> zusammensetzen. Insbesondere die Convolution Layer. Wenn du mit diesen nicht vertraut bist, kannst du sie in einem unserer Artikel nachlesen.<\/p>\n<h3>Wie baut man den Diskriminator?<\/h3>\n<p>In unserem <strong>DCGAN<\/strong> muss das Diskriminatornetzwerk aus einem echten oder falschen Bild eine Klassifizierung erstellen. Man k\u00f6nnte also auf ein klassisches <strong>CNN<\/strong> vom Typ LeNet zur\u00fcckgreifen, aber die Entwickler der DCGAN-Architektur haben festgestellt, dass einige spezifische Parameter interessanter sind.<\/p>\n<p><strong>Downsampling:<\/strong> Um die Gr\u00f6\u00dfe unserer Faltungsschichten schrittweise zu reduzieren und \u00dcberlernen zu vermeiden, ist es \u00fcblich, Pooling-Schichten zu verwenden. Hier haben sich Faltungsschichten mit Stride als effektiver erwiesen, d.h. der Faltungsfilter wird jedes Mal um mehr als ein Feld verschoben:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"244\" height=\"259\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/no_padding_no_strides.gif\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"294\" height=\"288\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/no_padding_strides2.gif\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>Batch Normalization:<\/strong> Diese Normalisierung der Gewichte nach jeder Faltungsschicht (also pro Stride) erm\u00f6glicht ein stabileres und schnelleres Lernen des Netzes, daher ist es nicht notwendig, Bias in unseren verschiedenen Schichten zu verwenden!<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>Activation Function:<\/strong> Die ReLU-Funktion schien im Rahmen des Trainings des Discriminators in einen Zustand zu konvergieren, in dem alle Gewichte des Netzes inaktiv waren. Daher verwenden wir eine Variante dieser Funktion, die LeakyReLU genannt wird.<\/li>\n<\/ul>\n<h3>Aufbau des Generators<\/h3>\n<p>Die Rolle des Generatornetzwerks besteht darin, von einem zuf\u00e4lligen Vektor zu einem Bild zu gelangen, das den Diskriminator t\u00e4uschen kann. Daher m\u00fcssen wir neue Techniken verwenden, die wir als umgekehrtes Faltungsnetzwerk beschreiben k\u00f6nnen:<\/p>\n<p><strong>Upsampling:<\/strong> Um die Dimension unseres Vektors zu einem Bild zu vergr\u00f6\u00dfern, m\u00fcssen wir sogenannte transponierte Faltungen verwenden, wie unten dargestellt:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"344\" height=\"387\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/no_padding_no_strides_transposed.gif\" alt=\"\" loading=\"lazy\"><figcaption><\/figcaption><\/figure>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>Batch Normalization:<\/strong> Hier wird die gleiche Logik wie beim Discriminator angewandt.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><strong>Activation Function:<\/strong> Hier wird in allen Ebenen die ReLU-Funktion verwendet, au\u00dfer in der letzten, wo eine tanh-Funktion verwendet wird, weil es effizienter ist, normalisierte Bilder als Input f\u00fcr den Discriminator zu verwenden!<\/li>\n<\/ul>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nMehr \u00fcber Deep Learning lernen<br \/>\n<\/a><\/p>\n<p>Hier sind mehrere Illustrationen von Aktivierungsfunktionen:<\/p>\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"439\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/GANS.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/GANS.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/GANS-300x165.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/GANS-768x422.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\"><figcaption><\/figcaption><\/figure>\n<p>Au\u00dferdem machen die besonderen Konstruktionen der Discriminators und Generators die dichten Schichten, die man normalerweise in <a href=\"https:\/\/liora.io\/de\/convolutional-neural-network-2\">CNNs<\/a> findet, \u00fcberfl\u00fcssig.<\/p>\n<h3>Training oder Trainingsloop<\/h3>\n<p>Wenn du bis hierher gut aufgepasst hast, wirst du bemerkt haben, dass es einen wichtigen Schritt gibt, den wir noch nicht erw\u00e4hnt haben, n\u00e4mlich die Trainingsschleife oder Trainingsphase. Wenn du bereits mit dem Training von neuronalen Netzen vertraut bist, wei\u00dft du, dass es eine fast unendliche Anzahl von Hyperparametern gibt, die getestet werden m\u00fcssen. Diese Problematik ist beim Training von DCGANs logischerweise doppelt so pr\u00e4sent, weshalb es \u00fcblich ist, Parameter zu verwenden, die empirisch als wirksam erwiesen sind, insbesondere von den Autoren des Papiers.<\/p>\n<p>Wir werden hier lediglich die Grundz\u00fcge vorstellen:<\/p>\n<ul>\n<li><strong>Initialisierung:<\/strong> Alle Gewichte werden nach einer bestimmten Gau\u00dfschen Verteilung initialisiert, um Konvergenzprobleme w\u00e4hrend des Lernens zu vermeiden.<\/li>\n<li><strong>Gradientenabstieg:<\/strong> Dieser erfolgt stochastisch \u00fcber Mini-Batch, aus demselben Grund wie die Initialisierung: Es stabilisiert das Training.<\/li>\n<li><strong>Optimizer:<\/strong> Es wird der Adam Optimizer verwendet, der eine kontinuierliche Aktualisierung der Lernrate erm\u00f6glicht.<\/li>\n<li><strong>Spezifische Einstellungen<\/strong> f\u00fcr das Momentum \u03b21 und die Initialisierung der Lernrate werden verwendet, um das Training zu stabilisieren.<\/li>\n<\/ul>\n<p>Es wurden viele technische Details angesprochen, dennoch sind dies Parameter, die immer h\u00e4ufiger im <a href=\"https:\/\/liora.io\/de\/deep-learning-oder-tiefes-lernen-was-ist-das-denn\">Deep Learning<\/a> verwendet werden. Zum Beispiel werden transponierte oder Stride-Faltungen in vielen Deep-Learning-Anwendungen wie Image Inpainting, semantischer Segmentierung oder<strong> Super Resolution<\/strong> von Bildern verwendet. Ebenso ist der Adam-Optimizer ein sehr robuster Optimizer, der im Deep Learning allgegenw\u00e4rtig ist.<\/p>\n<p>Die &#8222;Einfachheit&#8220; des<strong> DCGAN<\/strong> tr\u00e4gt zu seinem Erfolg bei. Allerdings wurde ein gewisser Engpass erreicht: Die Erh\u00f6hung der Komplexit\u00e4t des Generators f\u00fchrt nicht unbedingt zu einer besseren Bildqualit\u00e4t. Aus diesem Grund gab es in letzter Zeit viele Verbesserungen: cGANs, styleGANs, cycleGANs usw..<\/p>\n<p>Du kannst die <strong>GANs, DCGANs<\/strong> und die Verbesserungen, die seither an diesen Netzwerken vorgenommen wurden, im Modul <strong>&#8222;Generative Adversarial Network&#8220;<\/strong> unseres Kurses Deep Learning for Computer Vision finden.<\/p>\n<p><a href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\"><br \/>\nEntdecke unseren Deep Learning Kurs<br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neuronale Netze sind in der Welt der Daten mittlerweile allgegenw\u00e4rtig, aber wenn es ein innovatives Konzept gibt, das in den letzten Jahren aufgekommen ist, dann sind es GANs. Diese Netze, die durch Konfrontation lernen, sind besonders effizient, und wenn dieses Konzept mit dem neuesten Stand der Bildverarbeitungstechniken kombiniert wird, erh\u00e4lt man das, was wir in [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":180241,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-180239","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=180239"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180239\/revisions"}],"predecessor-version":[{"id":217369,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/180239\/revisions\/217369"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/180241"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=180239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=180239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}