Hvad er forskellen mellem CNN, GAN, autoencodere og VAE?


Svar 1:

CNNs

Disse står for indviklede neurale netværk. Dette er en speciel type neuralt netværk, der er designet til data med rumlig struktur. For eksempel er billeder, der har en naturlig rumlig rækkefølge, perfekte til CNN'er. Konvolutionelle neurale netværk er sammensat af mange "filtre", som konvolverer eller glider hen over dataene og producerer en aktivering ved hver diaseposition. Disse aktiveringer producerer et "funktionskort", der repræsenterer hvor meget dataene i det område aktiverede filteret (som kun er et neuron). F.eks. Siger vi, at vi har et filter, der er trænet til at genkende ansigter, disse kan være funktionen, som det udsender:

(Dette billede er fra papiret Forstå neurale netværk gennem dyb visualisering, http: //yosinski.com/media/papers ..., godt papir, anbefaler bestemt at læse det)

Det, der er specielt ved indviklede neurale netværk, er, at de er rumligt ufravigelige, hvilket betyder, at uanset hvor en fremtrædende del af billedet dukker op, vil det blive opdaget af netværket. Dette skyldes, at filtervægtene ikke ændres i forskellige dele af billedet - da filteret glider hen over billedet, vægtes hver del af billedet det samme.

Denne rumlige invariansegenskab for et CNN gælder ikke kun for 2d-billeder, men også til 3D-video (http: //www.cs.cmu.edu/~rahuls/pu ...), og endda 1D-timeseries. CNN'er er også blevet betragtet som en type pseudo-tilbagevendende neuralt netværk, da filteret kan glide over tidspunkter i stedet for sektioner af dataene, hvilket giver det mulighed for at tage sine beslutninger baseret på datapunkter i fortiden (og potentielt også i fremtiden ).

GAN

GAN'er står for Generative Adversarial Networks. Dette er en type generativ model, fordi de lærer at kopiere datafordelingen af ​​de data, du giver dem, og derfor kan generere nye billeder, der ligner ens.

Årsagen til, at et GAN kaldes ”modstander”, er fordi det involverer to konkurrerende netværk (modstandere), der prøver at overgå hinanden.

(Dette billede er fra https: //blog.slinuxer.com/2016/1 ..., jeg har lige fået det af Google Billeder)

I det væsentlige sammenlignes en GAN ofte med analogien fra en politimand (diskriminator) og en varemærkeforfalskning (generator). Forfalskeren har i begyndelsen ingen idé om, hvordan rigtige penge ser ud, så det genererer nogle tilfældige penge, der ser helt falske ud. Heldigvis for forfalskeren har politimanden ingen idé om, hvordan ægte penge ser ud heller.

Vi har dog eksempler på reelle kontanter. Så politiafdelingen begynder at lære politimanden, hvordan reelle kontanter ser ud, og hvordan diskriminatorens falske kontanter ser ud, og får ham til at fortælle de falske og rigtige kontanter fra hinanden. Politimanden er dog super doven og lærer næppe næppe nok til at kende forskellen mellem falske og rigtige kontanter.

Derefter øver forfalskeren endnu mere og lærer at tjene penge, der bare er lidt mere realistiske, og ender med at narre politimanden (da han virkelig er doven og lærte en rigtig dårlig klassifikator).

Cyklussen gentages i nogen tid, indtil (ideelt) politimanden ikke kan fortælle forskellen mellem de falske kontanter og de reelle kontanter, da de falske kontanter ligner nøjagtigt de rigtige kontanter. Når dette er gjort, kan vi bare bruge generatoren til at skabe falske kontanter for evigt.

Lad os udvide dette til billeder. Generatoren er et neuralt netværk, der indtager en vektor af tilfældige variabler, Z, og producerer et billede,

II

.

Diskriminatoren er også et neuralt netværk, der tager et billede ind,

II

, og producerer et enkelt output

pp

, afgør sandsynligheden for, at billedet er reelt. Hvornår

p=1p = 1

, diskriminerende mener meget stærkt, at billedet er reelt, og hvornår

p=0p = 0

, diskriminerende mener meget stærkt, at billedet er falsk.

Diskriminatoren får et generatorbillede, som vi vil betegne

igeneratori_{generator}

, og læres at billedet er falsk. Mere konkret udtrykker diskrimineringen maksimering

log(1pgenerator)log(1 - p_{generator})

. Diskriminatoren får derefter et rigtigt billede,

ireali_{real}

, og læres, at billedet er reelt, eller at det maksimerer

log(preal)log(p_{real})

. Generatoren prøver at gøre det nøjagtige modsat og prøver at få diskriminereren til at maksimere sandsynligheden for, at det mener, at det falske billede er reelt, så generatoren prøver at maksimere

log(pgenerator)log(p_{generator})

. Når vi træner sådan et stykke tid, begynder vi at se nogle ret realistiske fotos:

De to øverste fotos genereres fotos (undtagen dem i gult) af henholdsvis MNIST-cifre og ansigter. Disse fungerer ypperligt, da tal og ansigter begge har meget praktiske og stabile strukturer (de er altid centreret, næser er typisk på et sted, øjne typisk på et andet). Når vi udvider til billeder fra den virkelige verden, finder vi imidlertid ud, at datafordelingen af ​​disse billeder i den virkelige verden er alt for kompliceret til at modellere, og vi har ofte ikke nok data til at producere gode generative billeder. Det er stadig temmelig imponerende, og du skal læse papiret: https: //papers.nips.cc/paper/542 ...

Bilkodere

Disse er temmelig enkle, alt hvad de gør er at tage et input og gengive input så tæt som muligt. Hvis jeg indtaster et foto på cifferet "1", skal autoencoderen udstede det nøjagtige samme foto.

Dette virker let og meningsløst, men har nogle interessante egenskaber. Vi har typisk ikke bare et input og et outputlag, for netværket kan da bare kopiere pixels fra input til output, hvilket er helt nytteløst. Vi vil normalt have et enkelt (eller flere) skjult lag mellem input- og output-lagene, der fungerer som flaskehalslag.

Flaskehalse kan komme på flere forskellige måder, men jeg vil bare fokusere på den nemmeste: at have færre skjulte neuroner.

Hvis neuronerne i det skjulte lag er mindre end antallet af pixels i inputbilledet, skal netværket “komprimere” de data, det ser.

(Billede fra blog.keras.io).

Denne komprimering betyder, at kun de mest fremtrædende træk ved billedet kan forblive - alt andet er unødvendigt. Hvilke funktioner der nogensinde kan kode for mest information om dataene er kodet i de skjulte neuroner.

Dette gør autoencodere (i teorien) nyttige, fordi hvis vi er lavt på overvågede træningsdata, kan vi bare fodre en autoencoder med en masse umærkede data, og det vil lære nyttige funktioner. Vi kan derefter sætte disse funktioner i et stærkere neuralt netværk og få det til at træne på det lille overvågede datasæt. På trods af at det overvågede datasæt er lille, ville det (teoretisk) stadig lære godt, fordi det blev startet af autoencoderen.

Desværre var autoencodere ikke alt, hvad de blev hyped op til, og denne form for træning (kaldet foruddannelse) bruges sjældent sammen med autoencodere.

Vaes

VAE'er står for Variational Autoencoders. Med dens navn kan du sandsynligvis fortælle, at en VAE ligner temmelig en autoencoder, og det er teknisk set, men med et stort twist.

Mens en autoencoder bare skal gengive sin input, er en variationsk autoencoder nødt til at gengive sin output, samtidig med at den holder skjulte neuroner til en bestemt fordeling. Hvad det betyder, er, at netværkets output skal vænne sig til de skjulte neuroner, der udsendes baseret på en distribution, og så vi kan generere nye billeder bare ved at samle fra den distribution og indtaste dem i netværkets skjulte lag.

Lad os som et eksempel lade som om vores målfordeling er en normal fordeling med et gennemsnit på 0 og en varians på 1. Når vi indtaster et billede i VAE, udsender de skjulte noder ikke værdier, der vil blive direkte brugt af output , men i stedet udsender midler og afvigelser. Hver af disse skjulte knuder fungerer som sin egen gaussiske distribution. Vi angiver de skjulte nodeværdier som

hmeanh_{mean}

og

hvarianceh_{variance}

. Derefter sampler vi værdier fra en faktisk normal distribution, som vi kalder

zz

, som har samme størrelse som det skjulte lag. Vi vil derefter flere

zz

elementvis med

hvarianceh_{variance}

andaddelementwisewithhmean.Thisallowsthenetworktoshiftthenormaldistributionandchangeitsvariance.Thisishowitencodesinformation.Aftertheelementwiseadditionandmultiplication,weareleftwithwhatwecallalatentvector.Wefeedthislatentvectorintotheoutputlayer,andtheoutputlayerattemptstoproduceacopyoftheinput.Thelossoftheautoencoder,istominimizeboththereconstructionloss(howsimilartheautoencodersoutputwastoitsinput),anditslatentloss(howcloseitshiddennodesweretoanormaldistribution).Thesmallerthelatentloss,thelessinformationcanbeencoded,andthereforethereconstructionlossgoesup.Asaresult,theVAEislockedinatradeoffbetweenthelatentlossandthereconstructionloss.Ifthelatentlossissmall,ournovelgeneratedimageswilllookalotliketheimagesattraintime,buttheywillbothlookreallybad.Ifthereconstructionlossissmall,thenthereconstructedimagesattraintimewilllookreallynice,butournovelgeneratedimageswilllooknothinglikethereconstructedimages.Obviouslywewantboth,soitsimportanttofindaniceequilibrium. and add elementwise with h_{mean}. This allows the network to shift the normal distribution and change its variance. This is how it encodes information. After the elementwise addition and multiplication, we are left with what we call a latent vector. We feed this latent vector into the output layer, and the output layer attempts to produce a copy of the input. The loss of the autoencoder, is to minimize both the reconstruction loss (how similar the autoencoder’s output was to its input), and its latent loss (how close its hidden nodes were to a normal distribution). The smaller the latent loss, the less information can be encoded, and therefore the reconstruction loss goes up. As a result, the VAE is locked in a trade-off between the latent loss and the reconstruction loss. If the latent loss is small, our novel generated images will look a lot like the images at train time, but they will both look really bad. If the reconstruction loss is small, then the reconstructed images at train time will look really nice, but our novel generated images will look nothing like the reconstructed images. Obviously we want both, so it’s important to find a nice equilibrium.

Disse forklaringer er ikke så godt konstrueret og er kun beregnet til at give en generel idé om disse arkitekturer, så det ville være meget mere fordelagtigt at læse de artikler, jeg har knyttet til i svaret. De er virkelig gode!