AI 101

Hvad er en Autoencoder?

mm

Hvis du tidligere har læst om unsupervised learning-teknikker, er du måske stødt på begrebet “autoencoder”. Autoencodere er en af de primære måder, hvorpå unsupervised learning-modeller udvikles. Men hvad er en autoencoder nøjagtig?

Kort sagt, fungerer autoencodere ved at tage imod data, komprimere og kode dataene og derefter genskabe dataene fra kodningsrepræsentationen. Modellen trænes, indtil tabet er minimiseret, og dataene genskabes så nøjagtigt som muligt. Gennem denne proces kan en autoencoder lære de vigtige funktioner i dataene. Selvom det er en kort definition af en autoencoder, ville det være nyttigt at tage en nærmere kig på autoencodere og få en bedre forståelse af, hvordan de fungerer. Denne artikel vil forsøge at afmystificere autoencodere og forklare arkitekturen af autoencodere og deres anvendelser.

Hvad er en Autoencoder?

Autoencodere er neurale netværk. Neurale netværk består af multiple lag, og det definerende aspekt af en autoencoder er, at inputlagene indeholder præcis så meget information som outputlaget. Årsagen til, at inputlaget og outputlaget har præcis samme antal enheder, er, at en autoencoder sigter mod at reproducere inputdataen. Den producerer en kopi af dataene efter at have analyseret og genskabt dem på en unsupervised måde.

Data, der flyder gennem en autoencoder, bliver ikke bare kartlagt direkte fra input til output, hvilket betyder, at netværket ikke bare kopierer inputdataene. Der er tre komponenter i en autoencoder: en kodningsdel (input), der komprimerer dataene, en komponent, der håndterer de komprimerede data (eller flaskehals), og en dekodningsdel (output). Når data indføres i en autoencoder, bliver de kodet og derefter komprimeret ned til en mindre størrelse. Netværket trænes herefter på de kodede/komprimerede data og producerer en genskabelse af disse data.

Hvorfor ville du ønske at træne et netværk til blot at genskabe de data, der gives til det? Årsagen er, at netværket lærer “essensen” eller de vigtigste funktioner i inputdataene. Efter at have trænet netværket kan en model oprettes, der kan syntetisere lignende data med tilføjelse eller fjernelse af bestemte mål-funktioner. For eksempel kunne du træne en autoencoder på grainy billeder og derefter bruge den trænede model til at fjerne grain/støj fra billedet.

Autoencoder-Arkitektur

Lad os tage et kig på arkitekturen af en autoencoder. Vi vil diskutere den primære arkitektur af en autoencoder her. Der findes variationer over denne generelle arkitektur, som vi vil diskutere i afsnittet nedenfor.

Foto: Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Som nævnt tidligere kan en autoencoder grundlæggende deles op i tre forskellige komponenter: kodningsdelen, flaskehalsen og dekodningsdelen.

Kodningsdelen af autoencoderen er typisk et feedforward, tæt forbundet netværk. Formålet med kodningslagene er at tage inputdataene og komprimere dem til en latent rum-repræsentation, der genererer en ny repræsentation af dataene med reduceret dimensionality.

Kodelagene eller flaskehalsen beskæftiger sig med den komprimerede repræsentation af dataene. Flaskehalskoden er omhyggeligt designet til at bestemme de mest relevante dele af de observerede data eller, med andre ord, funktionerne i dataene, der er mest vigtige for data-rekonstruktion. Målet her er at bestemme, hvilke aspekter af dataene der skal bevares og hvilke der kan ignoreres. Flaskehalskoden skal balancere to forskellige overvejelser: repræsentationsstørrelse (hvordan kompakt repræsentationen er) og variabel/funktionsrelevans. Flaskehalsen udfører element-vis aktivering på netværkets vægte og bias. Flaskehalslaget kaldes også nogle gange en latent repræsentation eller latent variabler.

Dekodningslaget er ansvarligt for at tage de komprimerede data og omdanne dem tilbage til en repræsentation med samme dimensioner som de originale, uændrede data. Omvandlingen udføres med den latente rum-repræsentation, der blev oprettet af kodningsdelen.

Den mest grundlæggende arkitektur af en autoencoder er en feed-forward-arkitektur med en struktur, der minder om en enkelt lag-perceptron, der bruges i multilag-perceptron. Ligesom regulære feed-forward neurale netværk trænes autoencoderen gennem brug af backpropagation.

Autoencoder-Egenskaber

Der findes forskellige typer autoencodere, men de har alle visse egenskaber, der forener dem.

Autoencodere lærer automatisk. De kræver ikke labels, og hvis de får nok data, er det let at få en autoencoder til at nå høj præstation på en bestemt type inputdata.

Autoencodere er dataspecifikke. Dette betyder, at de kun kan komprimere data, der er meget lig data, som autoencoderen allerede er trænet på. Autoencodere er også tabsgivende, hvilket betyder, at outputtet af modellen vil være nedgraderet i forhold til inputdataene.

Når man designer en autoencoder, skal maskinlæringsingeniører være opmærksomme på fire forskellige modelhyperparametre: kode-størrelse, lag-nummer, noder per lag og tab-funktion.

Kode-størrelsen bestemmer, hvor mange noder der starter i midten af netværket, og færre noder komprimerer dataene mere. I en dyb autoencoder kan antallet af lag være hvilket som helst tal, som ingeniøren finder passende, men antallet af noder i et lag skal mindske, efterhånden som kodningsdelen fortsætter. Omvendt gælder det i dekodningsdelen, hvilket betyder, at antallet af noder per lag skal øges, efterhånden som dekodningslagene nærmer sig det sidste lag. Endelig er tab-funktionen af en autoencoder typisk enten binær krydsentropi eller middelkvadratfejl. Binær krydsentropi er passende for tilfælde, hvor inputværdierne af dataene er i et område på 0-1.

Autoencoder-Typer

Som nævnt ovenfor findes der variationer over den klassiske autoencoder-arkitektur. Lad os undersøge de forskellige autoencoder-arkitekturer.

Sparse

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

mens autoencodere typisk har en flaskehals, der komprimerer dataene gennem en reduktion af noder, er sparse autoencodere en alternativ til denne typiske operationsform. I et sparsomt netværk beholder de skjulte lag samme størrelse som kodnings- og dekodningslagene. I stedet straffes aktiveringerne inden for et givet lag, så tab-funktionen bedre kan fange de statistiske funktioner af inputdataene. For at sige det på en anden måde, mens de skjulte lag i en sparse autoencoder har flere enheder end en traditionel autoencoder, er kun en vis procent af dem aktive på et givet tidspunkt. De mest betydningsfulde aktiveringsfunktioner bevares, og andre ignoreres, og denne begrænsning hjælper netværket med at bestemme kun de mest fremtrædende funktioner af inputdataene.

Contractive

Contractive autoencodere er designede til at være robuste over for små variationer i dataene og fastholde en konsekvent repræsentation af dataene. Dette opnås ved at tilføje en straf til tab-funktionen. Denne regulariserings-teknik er baseret på Frobenius-normen af Jacobian-matrixen for input-kodningsaktiveringerne. Effekten af denne regulariserings-teknik er, at modellen tvinges til at konstruere en kodning, hvor lignende input har lignende kodninger.

Convolutional

Convolutional autoencodere koder inputdata ved at splitte dataene op i undersektioner og derefter omdanne disse undersektioner til simple signaler, der summeres sammen for at skabe en ny repræsentation af dataene. Ligesom convolutionelle neurale netværk specialiserer en convolutional autoencoder sig i at lære billeddata og bruger en filter, der flyttes hen over hele billedsektionen sektion for sektion. Kodningerne, der genereres af kodningslaget, kan bruges til at genskabe billedet, reflektere billedet eller ændre billedets geometri. Når filterne er lært af netværket, kan de bruges på enhver tilstrækkeligt lignende input til at trække funktionerne af billedet ud.

Denoising

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Denoising autoencodere introducerer støj i kodningen, hvilket resulterer i en kodning, der er en korrupteret version af de originale inputdata. Denne korrupterede version af dataene bruges til at træne modellen, men tab-funktionen sammenligner outputværdierne med de originale input og ikke de korrupterede input. Målet er, at netværket vil kunne reproducere den originale, ukorrupterede version af billedet. Ved at sammenligne de korrupte data med de originale data lærer netværket, hvilke funktioner af dataene der er mest vigtige og hvilke funktioner er ukorrekte/korruptioner. Med andre ord må modellen have udtrukket de vigtige funktioner af billeddataene for at kunne fjerne støjen fra de korrupterede billeder.

Variational

Variational autoencodere fungerer ved at gøre antagelser om, hvordan de latente variabler af dataene er fordelt. En variational autoencoder producerer en sandsynlighedsfordeling for de forskellige funktioner af træningsbillederne/de latente attributter. Under træning opretter kodningsdelen latente distributioner for de forskellige funktioner af inputbillederne.

 

Fordi modellen lærer funktionerne eller billeder som Gaussiske distributioner i stedet for diskrete værdier, kan den bruges til at generere nye billeder. Den Gaussiske distribution samples for at skabe en vektor, der indføres i dekodningsnetværket, der renderer et billede baseret på denne vektor af prøver. I virkeligheden lærer modellen de fælles funktioner af træningsbillederne og tildeler dem en vis sandsynlighed for, at de vil optræde. Sandsynlighedsfordelingen kan derefter bruges til at reverse-engineere et billede og generere nye billeder, der ligner de originale træningsbilleder.

Når netværket trænes, analyseres de kodede data, og genkendelsesmodellen producerer to vektorer, der trækker middelværdien og standardafvikningen af billederne ud. En distribution oprettes herefter baseret på disse værdier. Dette gøres for de forskellige latente tilstande. Dekodningsdelen tager herefter tilfældige prøver fra den tilsvarende distribution og bruger dem til at genskabe de oprindelige input til netværket.

Autoencoder-Anvendelser

Autoencodere kan bruges til en bred række af anvendelser, men de bruges typisk til opgaver som dimensionality-reduktion, data-rensnning, funktion-udtrækning, billed-generering, sekvens-til-sekvens-prædiktionsmodeller og anbefalings-systemer.

Data-rensnning er brugen af autoencodere til at fjerne støj fra billeder. Ligeså kan autoencodere bruges til at reparere andre typer billedskader, som fx uklare billeder eller billeder med manglende sektioner. Dimensionality-reduktion kan hjælpe højkapacitetsnetværk med at lære nyttige funktioner af billeder, hvilket betyder, at autoencodere kan bruges til at supplere træningen af andre typer neurale netværk. Dette gælder også for brugen af autoencodere til funktion-udtrækning, da autoencodere kan bruges til at identificere funktioner af andre trænings-datasæt for at træne andre modeller.

I forhold til billed-generering kan autoencodere bruges til at generere falske menneske-billeder eller animerede karakterer, hvilket har anvendelser i design af ansigts-genkendelsessystemer eller automatisering af visse aspekter af animation.

Sekvens-til-sekvens-prædiktionsmodeller kan bruges til at bestemme den temporale struktur af data, hvilket betyder, at en autoencoder kan bruges til at generere det næste begivenhed i en sekvens. Af denne grund kan en autoencoder bruges til at generere videoer. Endelig kan dybe autoencodere bruges til at oprette anbefalings-systemer ved at opdage mønstre relateret til brugerinteresse, hvor kodningsdelen analyserer brugerengagement-data, og dekodningsdelen opretter anbefalinger, der passer med de etablerede mønstre.

Blogger og programmør med specialer i Machine Learning og Deep Learning emner. Daniel håber at hjælpe andre med at bruge AI's kraft til sociale formål.