GAN tränar en maskins förståelse genom att duellera sig själv

GAN (Generative Adversarial Network) är en teknik för att få en maskin att instruera sig själv. Att vi utvecklare inte uttryckligen berättar för den hur den lär sig och vad som utmärker kunskapen. Eftersom maskinen själv har en lite större del av ansvaret att lära sig klassificeras GAN som unsupervised machine learning, till skillnad från supervised machine learning.

”a system of two neural networks contesting with each other in a zero-sum game framework. They were introduced by Ian Goodfellow et al. in 2014. This technique can generate photographs that look at least superficially authentic to human observers, having many realistic characteristics”
Generative adversarial network – Wikipedia

Bilden du ser i bloggpostens huvud är resultatet av tre timmars beräkningar. Från början hade inget av de neurala nätverken koll på någonting när det gällde bilder och någon timme senare började saker att utkristallisera sig, åtminstone om man har lite fantasi.

Användningsområden för GAN

Ett användningsområde är att generera bilder, vilket vi kommer gå igenom mer i detalj strax. Andra användningsområden är att modifiera bilder ur ett antal sammanhang, bland annat assistera konstnärer och skapa fotorealistiska bilder från teckningar.

GAN kan också generera talat ljud, du kanske sett “deep fakes” där någon känd person säger något oväntat?

Ett GAN kan också räkna ut hur en människa kan tänkas se ut efter att ha åldrats. Den lär sig mönstret för åldrande och kan sedan applicera det på en enskild person. Det finns förstås många fler möjligheter.

Hur funkar ett GAN och hur tränas det upp?

Hur går träningen till? Nedan steg är mer av en metaforisk utveckling, det är inte olika moment utan utvecklingssteg i maskinens lärande för att beskriva de steg man kan observera.

Steg 1: Börja duellera

Systemskiss över ett GAN (Generative Adversarial Network)
Systemskiss över ett GAN (Generative Adversarial Network)

Det finns som sagt två neurala nätverk i ett GAN. Det ena kallas för en Generator, nedan förkortat G, och så finns Discriminator, nedan förkortat D.

Generatorns (G) jobb är att hitta på grejer och föreslå till Discriminatorn (D). Ds jobb är att försöka skilja mellan fakta och fiktion. Det börjar med att ingen av dem kan något om någonting alls.

G har slumpmässigt brus som ingångsvärde för att skapa sina bilder att skicka till D. D matas samtidigt med korrekt information och ska försöka bedöma vad som är vad. Exempelvis kan D få bilder med svartvitt brus från G samtidigt med några bilder som föreställer hundar.

När D gissat en första gång får den facit. Säg att G påstod sig skickat bilder på hundar och att det fanns bilder på faktiska hundar i datamängden D fick så får den reda på vilka bilder som var nonsens och vilka som innehöll hundar. D lär sig på så sätt “på egen hand” genom att få tillgång till exempeldata lite om vad den tycker är karakteriserande för hundbilder.

Backpropagation ger återkoppling till det neurala nätverket

Den här återkopplingen i lärandet har du kanske hört talas om redan, det kallas för backpropagation och upptäcktes tidigt 1960-tal (och har återupptäckts många gånger sedan dess).

Backpropagation går ut på att rätta Ds uppfattning av vad som ser ut som en hund. Som du nog listat ut går backpropagation bara att använda om man har tillgång till rätt svar.

Ett delmoment under steg ett är när D får veta vilka bilder som innehöll hundar och vilka som inte gjorde det . Då uppdateras Ds nätverk av neuroner med den vetskapen. Sedan gör G ett försök till med samma bilder vilket leder till att D får befästa sin kunskap och ge G ännu sämre betyg än innan på de genererade bilderna. Men någon av bilderna kanske är mindre dålig vilket är ett tips för G hur den ska fortsätta.

Steg 2: Generatorn skapar bilder som börjar föreställa något som kan kännas igen

Några tusen omgångar senare börjar G bli bra på att skapa fejkade bilder.

D får ständigt nya bilder på hundar att titta på och lär sig på så sätt om vilken variation det finns i hur en hund kan se ut. Detta motverkar risken för overfitting – att kunskapsmodellen är allt för specialiserad på några få bilder.

Vad D lär sig berättar den också för G som därmed också blir bättre över tid på att generera förslag. D rent utav berättar vad G gjorde för fel, kanske att den förväntar sig något som liknar ögon på vardera sida om nosen.

Steg 3: Oavgjort?

Efter ett tag börjar G skapa bilder där hundarna har ögon, öron och bilden känns mer tredimensionell. Nu börjar D ha svårt att skilja på vad som är en fejkad hundbild och vad som är på riktigt.

Ja just det, det neurala nätverket i fallet med ett GAN är ett Deconvolutional Neural Network (DNN), alltså inte Convolutional Neural Network (CNN) som du kanske hört talas om tidigare. Skillnaden dem emellan är att ett DNN vänder på processen och börjar med data att utvärdera innan den kommer fram till facit (vad som skulle varit en feature map i ett CNN). I ett CNN beskriver du egenskaperna som är intressanta medan ett DNN forcerar sig fram till att upptäcka dem mer eller mindre själv.

Tankar kring att drifta insikterna från ett GAN

En tänkbar utmaning kan vara hur en sån här lärdom förvaltas över tid. Det är nämligen svårt att inte bli tvungen att börja om från början med G och D, de behöver lära sig tillsammans. Så om man ska lägga till något nytt i sitt GAN finns risken att D har ett för stort försprång mot G och inte ger den en chans att komma med tillräckligt svåra genererade bilder.

Kanske borde man fokusera på att ha extremt specialiserat GAN. Som i avsnittet i Silicon Valley S04E04 när Jian Yang byggt en app som kan skilja på varmkorv och inte varmkorv 🙂

Skulle en sådan kunna lära sig nya förmågor i efterhand? Något helt annorlunda, som pizza, eller baljväxter?

Läs mer om GAN (Generative Adversarial Network)

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *