Ga naar de hoofdinhoud
BVDNET
Arnhem · websites & automatiseringBVDNET
Modellen & Architectuur

GAN (generative adversarial network)

Een GAN is een AI-techniek waarbij een vervalser en een controleur elkaar trainen, tot de vervalser beelden maakt die echt lijken, zoals foto's van mensen die niet bestaan.

Ook bekend als: generative adversarial network, GANs, generatief antagonistennetwerk

Een GAN (generative adversarial network) is een AI-techniek waarbij twee programma's elkaar trainen. De generator maakt nepvoorbeelden, zoals foto's van gezichten; de discriminator probeert ze van echte te onderscheiden. Elke ronde wordt de vervalser beter in het misleiden van de controleur, tot zijn vervalsingen er echt uitzien. GAN's maken realistische foto's van mensen die niet bestaan, die ook opduiken op nepprofielen online.

Hoe werkt het?

Ian Goodfellow en collega's introduceerden GAN's in juni 2014 (Generative Adversarial Networks). Ze vergelijken de generator met een bende valsemunters die vals geld probeert te maken, en de discriminator met de politie die dat geld probeert op te sporen. De concurrentie dwingt beide partijen beter te worden, tot de vervalsingen niet meer van echt te onderscheiden zijn.

  • De generator krijgt willekeurige ruis als invoer en maakt daar een voorbeeld van, zoals een afbeelding.
  • De discriminator krijgt echte voorbeelden uit de trainingsdata en voorbeelden van de generator, en schat per voorbeeld de kans dat het echt is.
  • Beide neurale netwerken worden om beurten getraind met backpropagation. De discriminator leert vervalsingen te herkennen; de generator leert van de feedback van de discriminator hoe hij betere maakt.

In theorie eindigt het spel als de generator de verdeling van de trainingsdata nabootst en de discriminator alleen nog kan gokken: hij geeft elk voorbeeld een kans van 1/2. Een vereenvoudigde trainingsstap in PyTorch, naar de DCGAN-tutorial, die een GAN traint op foto's van beroemdheden:

Python
1z = torch.randn(batch_size, latent_dim) # willekeurige ruis
2fake = G(z)
3# 1. discriminator: echte beelden tellen als 1, vervalsingen als 0
4d_loss = bce(D(real), ones) + bce(D(fake.detach()), zeros)
5d_opt.zero_grad(); d_loss.backward(); d_opt.step()
6# 2. generator: laat D de vervalsingen voor echt aanzien
7g_loss = bce(D(fake), ones)
8g_opt.zero_grad(); g_loss.backward(); g_opt.step()

Stap 2 volgt een tip uit het oorspronkelijke artikel: de generator maximaliseert de kans dat zijn vervalsing voor echt doorgaat, in plaats van de kans te minimaliseren dat hij wordt betrapt. Dat geeft vroeg in de training sterkere gradiënten. In GAN Lab zie je een kleine GAN trainen in de browser.

Welke GAN's zijn bekend?

  • StyleGAN (NVIDIA, december 2018) maakt gezichten en scheidt kenmerken als pose en identiteit van details als sproeten, zodat je ze apart kunt sturen. Het kwam met FFHQ, een dataset van 70.000 gezichtsfoto's van 1024×1024 pixels.
  • pix2pix (2016) leert van voorbeeldparen hoe het de ene afbeelding in de andere omzet, zoals een labelkaart in een foto of zwart-wit in kleur.
  • CycleGAN (2017) doet dat zonder paren, bijvoorbeeld paarden in zebra's veranderen.
  • SRGAN (2016) vergroot foto's vier keer met realistische details.

Waar gaat het mis?

  • Mode collapse: de generator zet veel verschillende invoer om in dezelfde uitvoer en maakt maar een paar soorten voorbeelden. Volgens de tutorial uit 2016 van Goodfellow is volledige collapse zeldzaam en gedeeltelijke collapse gewoon.
  • Geen convergentie: de training zoekt een evenwicht tussen twee spelers in plaats van de laagste waarde van één loss, en een update die de ene speler helpt, kan de vooruitgang van de andere tenietdoen. De tutorial noemt dit het grootste open probleem.
  • Geen waarschijnlijkheid: een GAN maakt voorbeelden, maar kan je niet vertellen hoe waarschijnlijk een bepaald voorbeeld is.

In 2021 lieten Dhariwal en Nichol (OpenAI) zien dat diffusion models op ImageNet betere afbeeldingen maken dan de beste GAN's (Diffusion Models Beat GANs on Image Synthesis). GAN's vangen minder van de variatie in de data en zijn vaak lastig te trainen, schreven ze, maar diffusion models zijn trager bij het genereren, omdat ze veel stappen nodig hebben om ruis te verwijderen. Bekende beeldgeneratoren sindsdien, zoals Stable Diffusion, gebruiken diffusie. Adversarial Diffusion Distillation van Stability AI (november 2023) voegt een adversarial loss toe aan een diffusion model, zodat het in één tot vier stappen een afbeelding maakt.

Voorbeeld

In februari 2019 lanceerde software-engineer Philip Wang ThisPersonDoesNotExist.com, dat bij elke keer laden een nieuw gezicht toonde, gemaakt door StyleGAN van NVIDIA (The Verge). In 2022 vonden onderzoekers van het Stanford Internet Observatory meer dan 1.000 LinkedIn-profielen met gezichten die door een GAN gemaakt leken, gebruikt om verkoopberichten te sturen; meer dan 70 bedrijven stonden als werkgever op die profielen (NPR, maart 2022). In het eerste profiel dat ze opmerkten, droeg de vrouw één oorbel, verdwenen plukken haar en kwamen ze weer terug, en stonden haar ogen precies in het midden van de afbeelding.