Connect with us

AI 101

Hva er en Autoencoder?

mm

Hvis du har lest om ueksamlede læringsteknikker tidligere, kan du ha kommet over begrepet “autoencoder”. Autoencodere er en av de primære måtene ueksamlede læringmodeller utvikles på. Men hva er en autoencoder egentlig?

Kort fortalt, fungerer autoencodere ved å ta inn data, komprimere og kode dataene, og deretter gjenskape dataene fra kode-representasjonen. Modellen trenes til tapet er minimert og dataene er gjenskapt så nøyaktig som mulig. Gjennom denne prosessen kan en autoencoder lære de viktigste egenskapene til dataene. Mens det er en rask definisjon av en autoencoder, ville det være nyttig å se nærmere på autoencodere og få en bedre forståelse av hvordan de fungerer. Denne artikkelen vil forsøke å avmystifisere autoencodere, forklare arkitekturen til autoencodere og deres anvendelser.

Hva er en Autoencoder?

Autoencodere er neurale nettverk. Neurale nettverk består av flere lag, og det avgjørende aspektet ved en autoencoder er at inngangslagene inneholder nøyaktig like mye informasjon som utgangslaget. Grunnen til at inngangslaget og utgangslaget har nøyaktig like mange enheter er at en autoencoder har som mål å replikere inngangsdataene. Den produserer en kopi av dataene etter å ha analysert og gjenskapt dem på en ueksamlet måte.

Dataene som flyter gjennom en autoencoder blir ikke bare kartlagt rett fra inngang til utgang, noe som betyr at nettverket ikke bare kopierer inngangsdataene. Det finnes tre komponenter i en autoencoder: en kode-del (inngang) som komprimerer dataene, en komponent som behandler de komprimerte dataene (eller flaskenhalsslag), og en dekoder-del (utgang) som gjenskaper dataene. Når dataene blir matet inn i en autoencoder, blir de kodet og deretter komprimert ned til en mindre størrelse. Nettverket blir deretter trenet på de kodete/komprimerte dataene, og det produserer en gjenskaping av dataene.

Hvorfor ville du ønske å trene et nettverk for bare å gjenskape dataene som blir gitt til det? Grunnen er at nettverket lærer “essensen”, eller de viktigste egenskapene til inngangsdataene. Etter at du har trenet nettverket, kan en modell bli skapt som kan syntetisere lignende data, med tillegg eller fjerning av bestemte mål-egenskaper. For eksempel kunne du trene en autoencoder på grainy bilder og deretter bruke den trenede modellen til å fjerne grain/støy fra bildet.

Autoencoder-Arkitektur

La oss se på arkitekturen til en autoencoder. Vi skal diskutere hovedarkitekturen til en autoencoder her. Det finnes variasjoner på denne generelle arkitekturen som vi skal diskutere i seksjonen under.

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

Som tidligere nevnt kan en autoencoder i hovedsak deles inn i tre forskjellige komponenter: koderen, en flaskenhalsslag og dekoderen.

Kode-delen av autoencoderen er vanligvis et feedforward, tett koblet nettverk. Formålet med kode-lagene er å ta inngangsdataene og komprimere dem inn i en latent rom-representasjon, og generere en ny representasjon av dataene som har redusert dimensjonalitet.

Kode-lagene, eller flaskenhalsslaget, behandler den komprimerte representasjonen av dataene. Flaskenhalsslaget er nøye designet for å bestemme de mest relevante delene av de observerte dataene, eller med andre ord de egenskapene til dataene som er mest viktige for data-gjenskaping. Målet her er å bestemme hvilke aspekter av dataene som må bevares og hvilke som kan forkastes. Flaskenhalsslaget må balansere to forskjellige overveielser: representasjonsstørrelse (hvordan komprimert representasjonen er) og variabel/egenskaps-relevans. Flaskenhalsslaget utfører element-vis aktivasjon på vektene og biasene til nettverket. Flaskenhalsslaget kalles også noen ganger latent representasjon eller latent variabler.

Dekoder-laget er ansvarlig for å ta den komprimerte dataen og konvertere den tilbake til en representasjon med samme dimensjoner som de opprinnelige, uendrede dataene. Konverteringen blir gjort med den latente rom-representasjonen som ble skapt av koderen.

Den mest grunnleggende arkitekturen til en autoencoder er en feed-forward-arkitektur, med en struktur som ligner på en enkelt lag-perceptron som brukes i multilag-perceptron. Liksom vanlige feed-forward neurale nettverk, blir autoencoderen trenet gjennom bruk av backpropagation.

Egenskaper til en Autoencoder

Det finnes forskjellige typer autoencodere, men de alle har bestemte egenskaper som forener dem.

Autoencodere lærer automatisk. De krever ikke labels, og hvis de får nok data, er det lett å få en autoencoder til å nå høy ytelse på en bestemt type inngangsdata.

Autoencodere er dataspesifikke. Dette betyr at de bare kan komprimere data som er svært lik data som autoencoderen allerede er trenet på. Autoencodere er også tap-forekomne, noe som betyr at utgangene til modellen vil være degradert i sammenligning med inngangsdataene.

Når du designer en autoencoder, må maskinlæringsingeniører være oppmerksomme på fire forskjellige modell-hyperparametere: kode-størrelse, lag-nummer, noder per lag og tap-funksjon.

Kode-størrelsen bestemmer hvor mange noder som starter midten av nettverket, og færre noder komprimerer dataene mer. I en dyp autoencoder, mens antallet lag kan være noe som ingeniøren finner passende, bør antallet noder i et lag øke når dekoderen nærmer seg den siste laget. Til slutt er tap-funksjonen til en autoencoder vanligvis enten binær cross-entropi eller gjennomsnittlig kvadratisk feil. Binær cross-entropi er passende for tilfeller der inngangsverdiene til dataene er i et område på 0 – 1.

Autoencoder-Typer

Som nevnt ovenfor finnes variasjoner på den klassiske autoencoder-arkitekturen. La oss se på de forskjellige 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 vanligvis har en flaskenhalsslag som komprimerer dataene gjennom en reduksjon av noder, er sparse autoencodere en alternativ til denne typiske operasjonelle formatet. I et sparse nettverk beholder de skjulte lagene samme størrelse som kode- og dekoder-lagene. I stedet blir aktivasjonene innenfor et gitt lag straffet, slik at tap-funksjonen bedre fanger de statistiske egenskapene til inngangsdataene. For å si det på en annen måte, mens de skjulte lagene i en sparse autoencoder har flere enheter enn en tradisjonell autoencoder, er bare en viss prosent av dem aktive på et gitt tidspunkt. De mest effektive aktivasjonene blir bevart og andre blir ignorert, og denne begrensningen hjelper nettverket å bestemme bare de mest fremtredende egenskapene til inngangsdataene.

Kontraktiv

Kontraktive autoencodere er designet for å være motstandsdyktige mot små variasjoner i dataene, og opprettholder en konsistent representasjon av dataene. Dette oppnås ved å påføre en straff til tap-funksjonen. Denne regulariseringsteknikken er basert på Frobenius-normen til Jacob-matrisen for inngangskode-aktivasjonene. Effekten av denne regulariseringsteknikken er at modellen blir tvunget til å konstruere en kode hvor lignende inngang vil ha lignende koder.

Convolutional

Convolutional autoencodere koder inngangsdataene ved å dele dataene opp i underseksjoner og deretter konvertere disse underseksjonene til enkle signaler som blir summert sammen for å skape en ny representasjon av dataene. Liksom convolutionelle neurale nettverk, spesialiserer en convolutional autoencoder seg i læring av bilde-data, og den bruker en filter som blir flyttet over hele bilde-seksjonen sekvensielt. Kodene som blir generert av kode-laget kan bli brukt til å gjenskape bildet, reflektere bildet eller modifisere bildets geometri. Når filterne har blitt lært av nettverket, kan de bli brukt på noen tilstrekkelig like inngang til å trekke ut egenskapene til bildet.

Denoising

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

Denoising autoencodere introduserer støy i kodningen, noe som resulterer i en kode som er en forurenset versjon av de opprinnelige inngangsdataene. Denne forurensete versjonen av dataene blir brukt til å trene modellen, men tap-funksjonen sammenligner utgangsverdiene med de opprinnelige inngangsdataene og ikke de forurensete inngangsdataene. Målet er at nettverket vil kunne produsere den opprinnelige, uforurensete versjonen av bildet. Ved å sammenligne den forurensete dataen med den opprinnelige dataen, lærer nettverket hvilke egenskaper til dataene som er mest viktige og hvilke egenskaper som er ubetydelige/forurensninger. Med andre ord, for at en modell skal kunne fjerne støyen fra de forurensete bildene, må den ha trekke ut de viktigste egenskapene til bilde-dataene.

Variational

Variational autoencodere opererer ved å gjøre antagelser om hvordan de latente variablene til dataene er fordelt. En variational autoencoder produserer en sannsynlighetsfordeling for de forskjellige egenskapene til treningbildene/de latente attributtene. Når modellen blir trenet, skaper koderen latente fordelinger for de forskjellige egenskapene til inngangsbildene.

 

Fordi modellen lærer egenskapene eller bildene som Gaussiske fordelinger i stedet for diskrete verdier, er den i stand til å bli brukt til å generere nye bilder. Den Gaussiske fordelingen blir samplet for å skape en vektor, som blir matet inn i dekodernettverket, som renderer et bilde basert på denne vektoren av samplinger. I virkeligheten lærer modellen de vanlige egenskapene til treningbildene og tilordner dem en sannsynlighet for at de vil oppstå. Sannsynlighetsfordelingen kan deretter bli brukt til å reversere ingeniør et bilde, og generere nye bilder som ligner de opprinnelige treningbildene.

Når nettverket blir trenet, blir de kodete dataene analysert og gjenkjenningmodellen produserer to vektorer, og trekker ut gjennomsnittet og standardavviket til bildene. En fordeling blir skapt basert på disse verdiene. Dette blir gjort for de forskjellige latente tilstandene. Dekoderen tar deretter tilfeldige samplinger fra den tilsvarende fordelingen og bruker dem til å gjenskape de opprinnelige inngangene til nettverket.

Autoencoder-Anvendelser

Autoencodere kan bli brukt til en rekke forskjellige anvendelser, men de blir vanligvis brukt til oppgaver som dimensjonsreduksjon, data-rensing, egenskaps-uttrekk, bilde-generering, sekvens-til-sekvens-prediksjon og anbefalingssystemer.

Data-rensing er bruken av autoencodere til å fjerne støy fra bilder. Liksom autoencodere kan bli brukt til å reparere andre typer bilde-skader, som blurrede bilder eller bilder som mangler seksjoner. Dimensjonsreduksjon kan hjelpe høy-kapasitets nettverk til å lære nyttige egenskaper til bilder, noe betyr at autoencodere kan bli brukt til å supplere treningen av andre typer neurale nettverk. Dette er også sant for å bruke autoencodere til egenskaps-uttrekk, da autoencodere kan bli brukt til å identifisere egenskaper til andre treningssammenlinger for å trene andre modeller.

I forhold til bilde-generering kan autoencodere bli brukt til å generere falske menneske-bilder eller animerte karakterer, noe som har anvendelser i design av ansiktsgjenkjenningssystemer eller automatisering av visse aspekter av animasjon.

Sekvens-til-sekvens-prediksjonsmodeller kan bli brukt til å bestemme den tidsmessige strukturen til dataene, noe betyr at en autoencoder kan bli brukt til å generere den neste hendelsen i en sekvens. Av denne grunn kan en autoencoder bli brukt til å generere videoer. Til slutt kan dype autoencodere bli brukt til å skape anbefalingssystemer ved å plukke opp mønster relatert til brukerinteresse, med koderen som analyserer bruker-engasjementsdata og dekoderen som skaper anbefalinger som passer etablerte mønster.

Blogger og programmerer med spesialområder i Machine Learning og Deep Learning emner. Daniel håper å hjelpe andre med å bruke kraften av AI for sosialt godt.