Techblog: This Person Does Not Exist – hoe werkt het?

Deze persoon bestaat niet. Bron: ThisPersonDoesNotExist.com

Hij was recentelijk in het nieuws: de site This Person Does Not Exist. De website doet niets anders dan het laten zien van een gezicht. Op het moment dat je de website ververst, dan wordt een nieuw gezicht getoond. En een nieuwe. En een nieuwe. Enzovoort. Het is misschien een wat rare titel voor een site, maar niets is minder waar. We lezen in het vakje rechts onderin de site namelijk het volgende: produced by a (…) network. Huh, iemand die niet bestaat? Jazeker, laat het goed op je inwerken … iedere persoon die je op die website ziet, bestaat niet.

In deze techblog duiken we in het diepe en gaan we kijken hoe dat nu eigenlijk kan. Daarbij zul je zien dat we met een spelletje te maken gaan krijgen van een machine learning-techniek die ook wel GAN wordt genoemd – een generative adversarial network. We nemen een kijkje in de toch relatief korte bestaansgeschiedenis van deze denkwijze van machine learning. Daarbij nemen we een korte afslag de speltheorie in. Vervolgens kijken we naar het specifieke geval van This Person Does Not Exist en de bouwblokken waaruit de machine learning van die website bestaat.

Klinkt moeilijk? Valt wel mee op het moment dat je er even goed voor gaat zitten. En wees niet bang, we gaan ons best doen om de techniek in zo simpel mogelijk Nederlands te beschrijven. We horen graag of dat is gelukt!

Speltheorie en zero-sum games

Het kan gebeuren dat je een spel speelt waar er maar één buit te verdelen is over alle spelers. Schaken en tennis zijn perfecte voorbeelden van zo’n spel: de één wint, dus de ander verliest. Of het is, in het geval van schaken, gelijkspel. Als je de winst voor alle spelers in die situaties zou noteren en van elkaar af zou trekken, dan zou je het volgende krijgen:

Gamers opgelet: concepten uit de speltheorie zijn uiterst bruikbaar voor machine learning. Fotograaf: Alexas_Fotos, Pixabay License.
  • 1-0: Speler 1 (+1 winst), speler 2 (-1 winst) = samen 0 winst;
  • 0-1: Speler 1 (-1 winst), speler 2 (+1 winst) = samen 0 winst;
  • Gelijkspel: Speler 1 (½ winst), speler 2 (½ winst) = samen 0 winst.

In alle gevallen kom je bij dergelijke spellen op een som van nul uit. Het zal je dan ook niet verbazen dat een dergelijk spel een nulsomspel wordt genoemd, of ook wel een zero-sum game. Het is één van de belangrijkste elementen uit een wiskundig vakgebied dat de speltheorie wordt genoemd, want naast spelletjes zoals schaken kan het ook worden toegepast op complexere systemen. Helaas is oorlog, om maar een voorbeeld te geven, veelal ook een zero-sum game.

Generative adversarial networks

Goed, laten we doorgaan met waar deze blog eigenlijk mee begon: de website This Person Does Not Exist. We hebben gezien wat een zero-sum game is, maar nu komt de toepassing ervan in het gebied van machine learning. De website is namelijk gemaakt met een techniek die ook wel een generative adversarial network (GAN) wordt genoemd. Die moeten we opbreken in meerdere elementen willen we weten waar die voor staat:

  • Generative: het maakt iets;
  • Adversarial: iets strijdt tegen elkaar in een soort spel;
  • Network: twee neural networks, in dit geval.

Kortom: een GAN zijn dus twee neurale netwerken die, door tegen elkaar te spelen en elkaar proberen te laten verliezen, iets maken.

En dat ‘iets’ is inmiddels een heel ruim begrip. Nadat in 2014 de eerste moderne toepassingen van GAN’s op de radar kwamen, zijn er netwerken ontwikkeld die foto’s kunnen produceren van interieur, schoenen, tassen en kledingstukken. Maar ook zijn dergelijke netwerken inmiddels in staat om video’s vooruit te spoelen. Dat wil bijvoorbeeld zeggen: ik upload 10 seconden aan video en het model voorspelt de volgende twee. Nog één: in 2017 werd er een werk gepubliceerd waarin de ontwikkeling werd beschreven van GAN’s die huidige foto’s konden verouderen. De toepassing daarvan kan bijvoorbeeld liggen in het verouderen van foto’s van kinderen die ooit vermist zijn geraakt, maar wiens vermissingszaak nooit is opgelost.

GAN’s zijn dus een nieuwe techniek in het arsenaal van een machine learning-techneut die een hele nieuwe reeks toepassingen mogelijk maken. Niet enkel meer voorspellend vermogen proberen in te bouwen op basis van data, maar een stuk creativiteit inbouwen dus!

Maar hoe werkt zo’n GAN dan precies?

De werking ervan zie je hier schematisch weergegeven.

Het begint allemaal bij een zogeheten vector van ruis. Een vector zou je eigenlijk ook wel kunnen zien als een soort lijst. In machine learning wordt data in negen van de tien gevallen omgezet in getallen. Een vector van ruis zou je daarom kunnen zien als een lijst van willekeurige getallen. Die vector, oftewel de lijst, wordt in het eerste neurale netwerk gestopt, dat ook wel het generator netwerk wordt genoemd. Deze generator is in staat om van een boel ruis, laag voor laag, een steeds grotere en nauwkeurigere afbeelding te maken. Maar het gaat dan wel om een neppe afbeelding!

Die neppe afbeelding wordt in het tweede neurale netwerk ingevoerd, de discriminator. Dat netwerk is getraind middels echte afbeeldingen en is in staat om het omgekeerde te doen: een afbeelding opbreken in allerlei losse componenten en op zijn beurt bepalen tot welke categorie de afbeelding behoort. In het geval van een GAN gaat het om de categorieën nep en echt. In zekere zin kun je de generator dus zien als de boef en de discriminator als de politieagent, die de boef op heterdaad moet betrappen.

Het trainen van GAN’s

Hoe goed dat betrappen op heterdaad lukt, dat weten we natuurlijk op het moment dat we een epoch – een ronde – aan training voltooien. Voor iedere sample uit de validatieset, waar een voorspelling nep of echt voor beschikbaar is (in de vorm van een getal, bijvoorbeeld 0.6747474729 voor een afbeelding die meer echt dan nep is), wordt bepaald hoe groot de afwijking met de echte waarde is. Op het moment dat die voorbeeldafbeelding bijvoorbeeld maar voor 0.37 echt is, dan is de afwijking – oftewel de loss – zo’n 0.3.

Net als bij ieder ander neuraal netwerk kan deze loss value vervolgens gebruikt worden om het model te trainen. Hij is te complex om hier uit te leggen, maar met een uiterst elegante wiskundige techniek wordt als het ware de kortste route van de bergtop (de hoogste loss) naar het dal (de laagst mogelijke loss) gezocht. Op basis van één trainingsronde kan de route worden aangepast in zowel de generator als de discriminator en kan een nieuwe ronde training beginnen.

Misschien kun je je voorstellen dat hetgeen de generator produceert afhankelijk is van de discriminator. Bij ieder machine learning-model is het doel namelijk het maximaliseren van de winst; dat betekent dus het minimaliseren van de loss. Op het moment dat de discriminator steeds beter weet te voorspellen of een afbeelding nep of echt is (en dus in een hogere loss weet te voorzien), dan moet de generator steeds beter worden om nog met de oplichterij weg te komen (en de loss dus weer lager te maken). De discriminator wordt echter steeds beter in het voorspellen van echte afbeeldingen, die wij in het model hebben gestopt. Foto’s van gezichten bijvoorbeeld, of schoenen. Op het moment dat de generator dus bij wil blijven bij de discriminator, betekent dat dus dat de generator zichzelf steeds beter moet maken in het genereren van afbeeldingen die op de echte lijken.

En het recente gevolg van dergelijke ontwikkelingen binnen GAN’s is dus de amper van echt te onderscheiden verzameling foto’s van ThisPersonDoesNotExist. Het verklaart ook waarom we spreken over een adversarial network, waarin twee neurale netwerken een zero-sum game tegen elkaar spelen: wat de één wint aan loss, verliest de ander.

Fotograaf: David Cassolato, Pexels License.

Het unieke van This Person Does Not Exist

Toch houdt het verhaal daar niet op. Generative adversarial networks kunnen dus in een soort boef-en-agent-verhouding tot heel interessante eindresultaten komen. Maar This Person Does Not Exist had een ander doel: aantonen dat er extreem nauwkeurige, maar tegelijkertijd ook behoorlijk grote (1024 x 1024 pixels en groter) afbeeldingen kunnen worden gemaakt, met toch enige snelheid.

En dat is waar GAN’s tot op heden nog niet enorm goed in waren. De GAN’s van het begin werkten in principe wel, maar waren dus inderdaad niet extreem nauwkeurig (met vage afbeeldingen als resultaat) of konden slechts kleine afbeeldingen maken. In 2018 kwam het AI research team van NVIDIA met een oplossing: het ProGAN-netwerk, dat zijn generator network op een bijzondere manier inrichtte. Het bouwt de afbeelding namelijk laag voor laag op, waarbij de lagen bovendien steeds groter en nauwkeuriger worden. Zo is de eerste laag 4 bij 4 pixels, de tweede 8 bij 8, enzovoort. Het prettige bij die techniek is dat iedere nieuwe laag van de voorgaande kan leren: het hoeft niet alles zelf meer uit te vinden. En zoals we allemaal weten is doorbouwen op iets dat al bestaat veel makkelijker dan out of the blue iets beginnen. ProGAN was dus een kleine doorbraak in het veld van de generative adversarial networks.

Maar dan zijn we er nog steeds niet. De GAN waarmee This Person Does Not Exist is gemaakt heet namelijk StyleGAN. Het is een upgrade van ProGAN waarbij verschillende dingen zijn toegevoegd, waardoor onderzoekers meer controle krijgen over het netwerk. Daarmee kunnen ze onder andere de generator en discriminator beter van elkaar scheiden, waardoor de afhankelijkheid van de generator op de trainingset minder wordt. Dat kan bijvoorbeeld discriminatie tegengaan bij het maken van afbeeldingen. Desondanks blijft het scheiden van deze data lastig, waardoor generative adversarial networks de komende jaren waarschijnlijk nog veel interessante ontwikkelingen zullen ondergaan!

Kortom, met GAN’s wordt via de introductie van creativiteit in machine learning een hele nieuwe weg ingeslagen. We zijn enorm benieuwd naar de nieuwe toepassingsgebieden die de komende jaren zullen ontstaan en houden u graag op de hoogte. Heeft u een idee over hoe we creatieve AI kunnen toepassen binnen uw business? De ☕ staat klaar in Deventer! Neem gerust contact met ons op.