AI 101
Wat is een Generative Adversarial Network (GAN)?

Generative Adversarial Networks (GANs) zijn typen neurale netwerkarchitecturen die in staat zijn om nieuwe gegevens te genereren die overeenkomen met de geleerde patronen. GANs kunnen worden gebruikt om afbeeldingen van menselijke gezichten of andere objecten te genereren, om tekst-naar-afbeelding-vertaling uit te voeren, om één type afbeelding naar een ander om te zetten en om de resolutie van afbeeldingen te verbeteren (superresolutie) onder andere toepassingen. Omdat GANs volledig nieuwe gegevens kunnen genereren, staan ze aan de basis van veel state-of-the-art AI-systemen, -toepassingen en -onderzoek. Maar hoe werken GANs precies? Laten we onderzoeken hoe GANs functioneren en kijken we naar enkele van hun primaire gebruiken.
Definiëren van generatieve modellen en GANs
Een GAN is een voorbeeld van een generatief model. De meeste AI-modellen kunnen worden onderverdeeld in een van twee categorieën: begeleide en onbegeleide modellen. Begeleide leermodellen worden meestal gebruikt om te discrimineren tussen verschillende categorieën invoer, om te classificeren. In tegenstelling tot onbegeleide modellen, die meestal worden gebruikt om de verdeling van gegevens samen te vatten, vaak door een normale verdeling van de gegevens te leren. Omdat ze de verdeling van een gegevensset leren, kunnen ze steekproeven trekken uit deze geleerde verdeling en nieuwe gegevens genereren.
Verschillende generatieve modellen hebben verschillende methoden voor het genereren van gegevens en het berekenen van kansverdelingen. Bijvoorbeeld, het Naive Bayes-model werkt door een kansverdeling voor de verschillende invoerfuncties en de generatieve klasse te berekenen. Wanneer het Naive Bayes-model een voorspelling doet, berekent het de meest waarschijnlijke klasse door de kans van de verschillende variabelen te nemen en ze samen te voegen. Andere niet-diepe leermodellen zijn Gaussian Mixture Models en Latent Dirichlet Allocation (LDA). Diepe leermodellen zijn Restricted Boltzmann Machines (RBMs), Variational Autoencoders (VAEs) en natuurlijk GANs.
Generatieve Adversarial Networks werden voor het eerst voorgesteld door Ian Goodfellow in 2014, en ze werden verbeterd door Alec Redford en andere onderzoekers in 2015, wat leidde tot een gestandaardiseerde architectuur voor GANs. GANs zijn eigenlijk twee verschillende netwerken die samen zijn verbonden. GANs bestaan uit twee helften: een generatiemodel en een discriminatiemodel, ook wel de generator en discriminator genoemd.
De GAN-architectuur
Generatieve Adversarial Networks zijn opgebouwd uit een generatiemodel en een discriminatiemodel die samen zijn verbonden. De taak van het generatiemodel is om nieuwe voorbeelden van gegevens te creëren op basis van de patronen die het model heeft geleerd uit de trainingsgegevens. De taak van het discriminatiemodel is om afbeeldingen (aannemend dat het is getraind op afbeeldingen) te analyseren en te bepalen of de afbeeldingen gegenereerd/nep zijn of echt.

De twee modellen zijn tegen elkaar uitgespeeld, getraind in een speltheoretische stijl. Het doel van het generatiemodel is om afbeeldingen te produceren die zijn tegenstander – het discriminatiemodel – misleiden. Ondertussen is de taak van het discriminatiemodel om zijn tegenstander, het generatiemodel, te overwinnen en de nep-afbeeldingen te vangen die het generatiemodel produceert. Het feit dat de modellen tegen elkaar worden uitgespeeld, resulteert in een wapenwedloop waarin beide modellen worden verbeterd. Het discriminatiemodel krijgt feedback over welke afbeeldingen echt waren en welke afbeeldingen door het generatiemodel zijn geproduceerd, terwijl het generatiemodel informatie krijgt over welke van zijn afbeeldingen door het discriminatiemodel zijn gemarkeerd als vals. Beide modellen worden verbeterd tijdens de training, met als doel een generatiemodel te trainen dat nep-gegevens kan produceren die vrijwel niet te onderscheiden zijn van echte, echte gegevens.
Zodra een normale verdeling van gegevens is gemaakt tijdens de training, kan het generatiemodel worden gebruikt. Het generatiemodel wordt eerst gevoed met een willekeurige vector, die het transformeert op basis van de normale verdeling. Met andere woorden, de vector zaait de generatie. Wanneer het model is getraind, zal de vectorruimte een gecomprimeerde versie zijn, of een weergave, van de verdeling van de gegevens. De gecomprimeerde versie van de gegevensverdeling wordt latent space of latent variabelen genoemd. Later kan het GAN-model de latent space-weergave nemen en punten trekken uit deze weergave, die kunnen worden gegeven aan het generatiemodel en gebruikt om nieuwe gegevens te genereren die zeer vergelijkbaar zijn met de trainingsgegevens.
Het discriminatiemodel wordt gevoed met voorbeelden uit het hele trainingsdomein, dat bestaat uit zowel echte als gegenereerde gegevensvoorbeelden. De echte voorbeelden worden opgenomen in de trainingsdataset, terwijl de nep-gegevens worden geproduceerd door het generatiemodel. Het proces van trainen van het discriminatiemodel is exact hetzelfde als het trainen van een basis, binaire classificatiemodel.
GAN-trainingsproces
Laten we naar het hele trainingsproces kijken voor een hypothetische afbeeldinggeneratietaken.
Om te beginnen, wordt de GAN getraind met echte, echte afbeeldingen als onderdeel van de trainingsdataset. Dit zet het discriminatiemodel in staat om te onderscheiden tussen gegenereerde afbeeldingen en echte afbeeldingen. Het produceert ook de gegevensverdeling die de generator zal gebruiken om nieuwe gegevens te produceren.
De generator neemt een vector van willekeurige numerieke gegevens en transformeert deze op basis van de normale verdeling, waardoor een afbeelding wordt gegenereerd. Deze gegenereerde afbeeldingen, samen met enkele echte afbeeldingen uit de trainingsdataset, worden gevoed in het discriminatiemodel. Het discriminatiemodel zal een waarschijnlijke voorspelling doen over de aard van de afbeeldingen die het ontvangt, waardoor een waarde tussen 0 en 1 wordt gegenereerd, waarbij 1 meestal echte afbeeldingen zijn en 0 nep-afbeeldingen zijn.

Er is een dubbele feedbacklus in het spel, omdat het grond-discriminatiemodel de grondwaarheid van de afbeeldingen wordt gevoed, terwijl de generator feedback krijgt over zijn prestaties van het discriminatiemodel.
De generatieve en discriminatieve modellen spelen een nulsomspel met elkaar. Een nulsomspel is een spel waarin de winst van de ene partij ten koste gaat van de andere partij (de som is nul). Wanneer het discriminatiemodel erin slaagt om succesvol te onderscheiden tussen echte en nep-voorbeelden, worden er geen wijzigingen aangebracht in de parameters van het discriminatiemodel. Echter, grote updates worden gemaakt aan de parameters van het model wanneer het er niet in slaagt om te onderscheiden tussen echte en nep-afbeeldingen. Het omgekeerde is waar voor het generatiemodel, het wordt gestraft (en de parameters worden bijgewerkt) wanneer het er niet in slaagt om het discriminatiemodel te misleiden, maar anders worden de parameters ongewijzigd gelaten (of het wordt beloond).
Ideaal gesproken kan de generator zijn prestaties verbeteren tot een punt waarop het discriminatiemodel niet kan onderscheiden tussen de nep- en echte afbeeldingen. Dit betekent dat het discriminatiemodel altijd waarschijnlijkheden van 50% voor echte en nep-afbeeldingen zal renderen, wat betekent dat de gegenereerde afbeeldingen niet te onderscheiden zouden moeten zijn van de echte afbeeldingen. In de praktijk zullen GANs deze punt meestal niet bereiken. Echter, het generatiemodel hoeft geen perfect gelijksoortige afbeeldingen te creëren om nog steeds bruikbaar te zijn voor de vele taken waarvoor GANs worden gebruikt.
GAN-toepassingen
GANs hebben een aantal verschillende toepassingen, meestal draaiend om de generatie van afbeeldingen en componenten van afbeeldingen. GANs worden meestal gebruikt in taken waarvoor de vereiste afbeeldingsgegevens ontbreken of beperkt zijn, als een methode om de vereiste gegevens te genereren. Laten we enkele van de meest voorkomende gebruiksscenario’s voor GANs onderzoeken.
Nieuwe voorbeelden genereren voor datasets
GANs kunnen worden gebruikt om nieuwe voorbeelden te genereren voor eenvoudige afbeeldingsdatasets. Als u slechts een handvol trainingsvoorbeelden heeft en er meer nodig heeft, kunnen GANs worden gebruikt om nieuwe trainingsgegevens te genereren voor een afbeeldingsclassificator, waardoor nieuwe trainingsvoorbeelden op verschillende oriëntaties en hoeken kunnen worden gegenereerd.
Unieke menselijke gezichten genereren

De vrouw in deze foto bestaat niet. De afbeelding is gegenereerd door StyleGAN. Foto: Owlsmcgee via Wikimedia Commons, Public Domain (https://commons.wikimedia.org/wiki/File:Woman_1.jpg)
Wanneer voldoende getraind, kunnen GANs worden gebruikt om extreem realistische afbeeldingen van menselijke gezichten te genereren. Deze gegenereerde afbeeldingen kunnen worden gebruikt om te helpen bij het trainen van gezichtsherkenningssystemen.
Afbeelding-naar-afbeelding-vertaling
GANs blinken uit in afbeeldingvertaling. GANs kunnen worden gebruikt om zwart-wit-afbeeldingen te kleuren, schetsen of tekeningen om te zetten in fotografische afbeeldingen, of om afbeeldingen van dag naar nacht om te zetten.
Tekst-naar-afbeelding-vertaling
Tekst-naar-afbeelding-vertaling is mogelijk door het gebruik van GANs. Wanneer een tekst die een afbeelding beschrijft en de bijbehorende afbeelding wordt gegeven, kan een GAN worden getraind om een nieuwe afbeelding te creëren wanneer een beschrijving van de gewenste afbeelding wordt gegeven.
Afbeeldingen bewerken en repareren
GANs kunnen worden gebruikt om bestaande foto’s te bewerken. GANs kunnen elementen zoals regen of sneeuw verwijderen uit een afbeelding, maar ze kunnen ook worden gebruikt om oude, beschadigde afbeeldingen of beschadigde afbeeldingen te repareren.
Superresolutie
Superresolutie is het proces van een lage-resolutie-afbeelding nemen en meer pixels toevoegen aan de afbeelding, waardoor de resolutie van die afbeelding wordt verbeterd. GANs kunnen worden getraind om een afbeelding te nemen en een hogeresolutie-versie van die afbeelding te genereren.






