AI 101
Hvad er en Autoencoder?
Hvis du har læst om uovervågede læringsteknikker før, er du måske stødt på udtrykket "autoindkodning”. Autoencodere er en af de primære måder, hvorpå uovervågede læringsmodeller udvikles. Men hvad er en autoencoder helt præcist?
Kort fortalt fungerer autoindkodere ved at tage data ind, komprimere og indkode dataene og derefter rekonstruere dataene fra kodningsrepræsentationen. Modellen trænes indtil tabet er minimeret og dataene gengives så tæt som muligt. Gennem denne proces kan en autoencoder lære de vigtige funktioner i dataene. Selvom det er en hurtig definition af en autoencoder, ville det være en fordel at se nærmere på autoencodere og få en bedre forståelse af, hvordan de fungerer. Denne artikel vil bestræbe sig på at afmystificere autoencodere og forklare arkitekturen af autoencodere og deres applikationer.
Hvad er en Autoencoder?
Autoencodere er neurale netværk. Neurale netværk er sammensat af flere lag, og det afgørende aspekt ved en autoencoder er, at inputlagene indeholder nøjagtig lige så meget information som outputlaget. Grunden til, at inputlaget og outputlaget har nøjagtig det samme antal enheder, er, at en autoencoder sigter mod at replikere inputdataene. Den udsender en kopi af dataene efter at have analyseret dem og rekonstrueret dem på en uovervåget måde.
De data, der bevæger sig gennem en autoencoder, er ikke bare kortlagt direkte fra input til output, hvilket betyder, at netværket ikke bare kopierer inputdataene. Der er tre komponenter til en autoencoder: en kodningsdel (input), der komprimerer dataene, en komponent, der håndterer de komprimerede data (eller flaskehals) og en dekoder (output). Når data føres ind i en autoencoder, kodes de og komprimeres derefter ned til en mindre størrelse. Netværket trænes derefter på de kodede/komprimerede data, og det udsender en genskabelse af disse data.
Så hvorfor vil du træne et netværk til bare at rekonstruere de data, der gives til det? Årsagen er, at netværket lærer "essensen" eller de vigtigste funktioner i inputdataene. Efter at du har trænet netværket, kan der oprettes en model, der kan syntetisere lignende data med tilføjelse eller subtraktion af visse målfunktioner. For eksempel kan du træne en autoencoder på kornet billeder og derefter bruge den trænede model til at fjerne kornet/støjen fra billedet.
Autoencoder arkitektur
Lad os tage et kig på arkitekturen af en autoencoder. Vi vil diskutere hovedarkitekturen for en autoencoder her. Der er variationer af 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 tidligere nævnt kan en autoencoder i det væsentlige opdeles i tre forskellige komponenter: encoderen, en flaskehals og dekoderen.
Encoderdelen 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 rumrepræsentation, hvilket genererer en ny repræsentation af dataene, der har reduceret dimensionalitet.
Kodelagene, eller flaskehalsen, omhandler den komprimerede repræsentation af dataene. Flaskehalskoden er omhyggeligt designet til at bestemme de mest relevante dele af de observerede data, eller for at sige på en anden måde de funktioner i dataene, der er vigtigst for datarekonstruktion. Målet her er at bestemme, hvilke aspekter af dataene, der skal bevares, og hvilke der kan kasseres. Flaskehalskoden skal balancere to forskellige overvejelser: repræsentationsstørrelse (hvor kompakt repræsentationen er) og variabel/funktionsrelevans. Flaskehalsen udfører elementvis aktivering på netværkets vægte og skævheder. Flaskehalslaget kaldes også nogle gange for en latent repræsentation eller latente variable.
Dekoderlaget er det, der er ansvarligt for at tage de komprimerede data og konvertere dem tilbage til en repræsentation med samme dimensioner som de originale, uændrede data. Konverteringen udføres med den latente rumrepræsentation, der blev skabt af indkoderen.
Den mest grundlæggende arkitektur for en autoencoder er en feed-forward-arkitektur med en struktur, der ligner en enkeltlagsperceptron, der bruges i flerlagsperceptroner. Meget ligesom almindelige feed-forward neurale netværk trænes auto-encoderen gennem brugen af backpropagation.
Attributter af en autoencoder
Der findes forskellige typer autoencodere, men de har alle visse egenskaber, der forener dem.
Autoencodere lærer automatisk. De kræver ikke etiketter, og hvis de får nok data, er det nemt at få en autoencoder til at opnå høj ydeevne på en bestemt type inputdata.
Autoencodere er dataspecifikke. Det betyder, at de kun kan komprimere data, der i høj grad ligner data, som autoencoderen allerede er blevet trænet i. Autoencodere er også tabsgivende, hvilket betyder, at modellens output vil blive forringet i forhold til inputdataene.
Når man designer en autoencoder, skal maskinlæringsingeniører være opmærksomme på fire forskellige modelhyperparametre: kodestørrelse, lagnummer, noder pr. lag og tabsfunktion.
Kodestørrelsen bestemmer, hvor mange noder der begynder den midterste del af netværket, og færre noder komprimerer dataene mere. I en dyb autoencoder, mens antallet af lag kan være et hvilket som helst tal, som ingeniøren finder passende, bør antallet af noder i et lag falde, efterhånden som indkoderen fortsætter. I mellemtiden gælder det modsatte i dekoderen, hvilket betyder, at antallet af noder pr. lag bør stige, når dekoderlagene nærmer sig det sidste lag. Endelig er tabsfunktionen af en autoencoder typisk enten binær krydsentropi eller middelkvadratfejl. Binær krydsentropi er passende for tilfælde, hvor inputværdierne for dataene er i et 0-1-interval.
Autoencoder typer
Som nævnt ovenfor findes variationer af den klassiske autoencoder-arkitektur. Lad os undersøge de forskellige autoencoder-arkitekturer.
Sparsom

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, sparsom autoencoders er et alternativ til det typiske operationelle format. I et sparsomt netværk bevarer de skjulte lag samme størrelse som koder- og dekoderlagene. I stedet straffes aktiveringerne inden for et givet lag, hvilket sætter det op, så tabsfunktionen bedre fanger de statistiske træk ved inputdata. For at sige det på en anden måde, mens de skjulte lag i en sparsom autoencoder har flere enheder end en traditionel autoencoder, er kun en vis procentdel af dem aktive på et givet tidspunkt. De mest virkningsfulde aktiveringsfunktioner bevares, og andre ignoreres, og denne begrænsning hjælper netværket med at bestemme netop de mest fremtrædende træk ved inputdataene.
Kontraktiv
Kontraktive autoencodere er designet til at være modstandsdygtige over for små variationer i dataene og opretholder en ensartet repræsentation af dataene. Dette opnås ved at pålægge tabsfunktionen en straf. Denne regulariseringsteknik er baseret på Frobenius-normen for den jakobiske matrix for inputkoderaktiveringerne. Effekten af denne regulariseringsteknik er, at modellen er tvunget til at konstruere en kodning, hvor lignende input vil have lignende kodninger.
Convolutional
Konvolutionelle autoencodere indkode inputdata ved at opdele dataene i underafsnit og derefter konvertere disse underafsnit til simple signaler, der summeres sammen for at skabe en ny repræsentation af dataene. I lighed med konvolutionsneurale netværk er en convolutional autoencoder specialiseret i indlæring af billeddata, og den bruger et filter, der flyttes hen over hele billedet sektion for sektion. De kodninger, der genereres af kodningslaget, kan bruges til at rekonstruere billedet, afspejle billedet eller ændre billedets geometri. Når filtrene er blevet lært af netværket, kan de bruges på et hvilket som helst tilstrækkeligt ens input til at udtrække billedets funktioner.
Denoising

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Denoising autoencodere indføre støj i kodningen, hvilket resulterer i en kodning, der er en beskadiget version af de originale inputdata. Denne korrupte version af dataene bruges til at træne modellen, men tabsfunktionen sammenligner outputværdierne med det originale input og ikke det korrupte input. Målet er, at netværket vil være i stand til at gengive den originale, ikke-korrupte version af billedet. Ved at sammenligne de korrupte data med de originale data, lærer netværket, hvilke funktioner i dataene der er vigtigst, og hvilke funktioner der er uvæsentlige/korruptioner. Med andre ord, for at en model kan forringe de korrupte billeder, skal den have udtrukket de vigtige funktioner i billeddataene.
Variationel
Variationelle autoencodere opererer ved at lave antagelser om, hvordan dataens latente variable er fordelt. En variationsautoencoder producerer en sandsynlighedsfordeling for de forskellige funktioner i træningsbillederne/de latente attributter. Ved træning opretter koderen latente distributioner for de forskellige funktioner i inputbillederne.
Fordi modellen lærer funktionerne eller billederne som gaussiske distributioner i stedet for diskrete værdier, er den i stand til at blive brugt til at generere nye billeder. Den Gaussiske fordeling samples for at skabe en vektor, som føres ind i afkodningsnetværket, som gengiver et billede baseret på denne vektor af prøver. I det væsentlige lærer modellen fællestræk ved træningsbillederne og tildeler dem en vis sandsynlighed for, at de vil forekomme. Sandsynlighedsfordelingen kan derefter bruges til at reverse engineering af et billede og generere nye billeder, der ligner de originale træningsbilleder.
Når netværket trænes, analyseres de kodede data, og genkendelsesmodellen udsender to vektorer, der tegner middelværdien og standardafvigelsen af billederne. Ud fra disse værdier oprettes en fordeling. Dette gøres for de forskellige latente tilstande. Dekoderen tager derefter tilfældige prøver fra den tilsvarende distribution og bruger dem til at rekonstruere de indledende input til netværket.
Autoencoder applikationer
Autoencodere kan bruges til en bred mange forskellige applikationer, men de bruges typisk til opgaver som dimensionsreduktion, datanedbrydning, ekstraktion af funktioner, billedgenerering, forudsigelse af sekvens til sekvens og anbefalingssystemer.
Datadenoising er brugen af autoencodere til at fjerne korn/støj fra billeder. På samme måde kan autoencodere bruges til at reparere andre typer billedskader, såsom slørede billeder eller billeder, der mangler sektioner. Dimensionalitetsreduktion kan hjælpe højkapacitetsnetværk med at lære nyttige funktioner ved billeder, hvilket betyder, at autoenkoderne kan bruges til at øge træningen af andre typer neurale netværk. Dette gælder også for at bruge autoencodere til feature-ekstraktion, da autoencodere kan bruges til at identificere funktioner i andre træningsdatasæt for at træne andre modeller.
Med hensyn til billedgenerering kan autoencodere bruges til at generere falske menneskelige billeder eller animerede figurer, som har applikationer til at designe ansigtsgenkendelsessystemer eller automatisere visse aspekter af animation.
Sekvens til sekvens forudsigelsesmodeller kan bruges til at bestemme den tidsmæssige struktur af data, hvilket betyder, at en autoencoder kan bruges til at generere den næste selv i en sekvens. Af denne grund kunne en autoencoder bruges til at generere videoer. Endelig kan dybe autoencodere bruges til at skabe anbefalingssystemer ved at opfange mønstre relateret til brugerinteresse, hvor koderen analyserer brugerengagementdata, og dekoderen skaber anbefalinger, der passer til de etablerede mønstre.

