Grunnleggende AI
Hva er en Autoencoder?
Hvis du har lest om ukontrollerte læringsteknikker tidligere, kan du ha kommet over begrepet “autoencoder”. Autoencodere er en av de primære måtene ukontrollerte læringmodeller utvikles. Men hva er en autoencoder egentlig?
Kort sagt, opererer autoencodere ved å ta inn data, komprimere og kode dataene, og deretter rekonstruere dataene fra kodepresentasjonen. Modellen trenes til tapet er minimert og dataene er gjengitt så nøyaktig som mulig. Gjennom denne prosessen kan en autoencoder lære de viktige egenskapene til dataene. Mens det er en rask definisjon av en autoencoder, ville det være nyttig å ta en nærmere titt 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 utsteder en kopi av dataene etter å ha analysert og rekonstruert dem på en ukontrollert måte.
Dataene som flyter gjennom en autoencoder er ikke bare kartlagt rett fra inngang til utgang, det vil si at nettverket ikke bare kopierer inngangsdataene. Det finnes tre komponenter i en autoencoder: en kode-del (inngang) som komprimerer dataene, en komponent som håndterer de komprimerte dataene (eller flaskenhalssammenløpet), og en dekoder (utgang) del. Når dataene mates inn i en autoencoder, blir de kodet og deretter komprimert ned til en mindre størrelse. Nettverket trenes deretter på de kodete/komprimerte dataene og utsteder en rekonstruksjon av disse dataene.
Hvorfor ville du ønske å trenere et nettverk for å bare rekonstruere dataene som er 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 skapes som kan syntetisere lignende data, med tillegg eller fjerning av bestemte mål-egenskaper. For eksempel kunne du trenere en autoencoder på kornete bilder og deretter bruke den trenede modellen til å fjerne kornet/ støyen fra bildet.
Autoencoder Arkitektur
La oss ta en titt 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 flaskenhalssammenløp og dekoderen.
Kode-delen til autoencoderen er vanligvis et feedforward, tett koblet nettverk. Formålet med kode-lagene er å ta inngangsdataene og komprimere dem til en latent rom-representasjon, som genererer en ny representasjon av dataene med redusert dimensjonalitet.
Kode-lagene, eller flaskenhalssammenløpet, håndterer den komprimerte representasjonen av dataene. Flaskenhalssammenløpet 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-rekonstruksjon. Målet her er å bestemme hvilke aspekter av dataene som må beholdes og hvilke som kan kastes. Flaskenhalssammenløpet må balansere to forskjellige overveielser: representasjonsstørrelse (hvor kompakt representasjonen er) og variabel/egenskaps-relevans. Flaskenhalssammenløpet utfører element-vis aktivering på vektene og forvrengningene til nettverket. Flaskenhalssammenløpet kalles også noen ganger en 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 utføres 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 mye lik en enkelt lag-perceptron brukt i multilag-perceptron. Liksom vanlige feed-forward neurale nettverk, trenes autoencoderen 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 merking, 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å tapende, det vil si at utgangene til modellen vil være forringet i forhold til 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 minske etter hvert som koderen fortsetter. Samtidig er det motsatte sant i dekoderen, det vil si at antallet noder per lag bør øke etter hvert som dekoder-lagene nærmer seg det siste laget. Til slutt er tap-funksjonen til en autoencoder vanligvis enten binær kryss-entropi eller gjennomsnittlig kvadratisk feil. Binær kryss-entropi er passende for tilfeller der inngangsverdiene til dataene er i et 0-1 område.
Autoencoder Typer
Som nevnt ovenfor finnes variasjoner på den klassiske autoencoder-arkitekturen. La oss undersøke de forskjellige autoencoder-arkitektene.
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 flaskenhalssammenløp som komprimerer dataene gjennom en reduksjon av noder, er sparse autoencodere en alternativ til denne typiske driftsformen. I et sparse nettverk beholder de skjulte lagene samme størrelse som koder- og dekoder-lagene. I stedet straffes aktiveringene innenfor et gitt lag, og det blir satt opp 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 betydningsfulle aktiveringsfunksjonene beholdes og andre ignoreres, og denne begrensningen hjelper nettverket å bestemme bare de mest betydningsfulle egenskapene til inngangsdataene.
Contractive
Contractive autoencodere er designet for å være motstandsdyktige mot små variasjoner i dataene, og opprettholder en konsekvent representasjon av dataene. Dette oppnås ved å påføre en straff til tap-funksjonen. Denne reguleringsteknikken er basert på Frobenius-normen til Jacob-matrisen for inngangskoder-aktiveringene. Effekten av denne reguleringsteknikken er at modellen tvinges til å konstruere en kode der lignende innganger vil ha lignende koder.
Convolutional
Convolutional autoencodere koder inngangsdataene ved å dele dataene inn i underseksjoner og deretter konvertere disse underseksjonene til enkle signaler som summeres sammen for å skape en ny representasjon av dataene. Liksom convolution-neurale nettverk, spesialiserer en convolutional autoencoder seg i læring av bilde-data, og den bruker en filter som flyttes over hele bilde-seksjonen seksjon for seksjon. Kodene generert av kode-laget kan brukes til å rekonstruere bildet, reflektere bildet eller modifisere bildets geometri. Når filterne har blitt lært av nettverket, kan de brukes på noen tilstrekkelig like innganger for å 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 kodingen, resulterende i en kode som er en forringet versjon av de opprinnelige inngangsdataene. Denne forringede versjonen av dataene brukes til å trenere modellen, men tap-funksjonen sammenligner utgangsverdiene med de opprinnelige inngangsdataene og ikke den forringede inngangen. Målet er at nettverket skal kunne reprodusere den opprinnelige, uforringede versjonen av bildet. Ved å sammenligne den forringede dataen med den opprinnelige dataen, lærer nettverket hvilke egenskaper til dataene som er mest viktige og hvilke egenskaper som er uviktige/forringelser. Med andre ord, for at en modell skal kunne fjerne støyen fra de forringede bildene, må den ha trukket ut de viktige 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 trening-bildene/de latente attributtene. Når det trenes, skaper koderen latente fordelinger for de forskjellige egenskapene til inngangs-bildene.

Når nettverket trenes, analyseres de kodete dataene og gjenkjenningmodellen utsteder to vektorer, som trekker ut gjennomsnittet og standardavviket til bildene. En fordeling skapes basert på disse verdiene. Dette gjøres for de forskjellige latente tilstandene. Dekoderen tar deretter tilfeldige prøver fra den tilhørende fordelingen og bruker dem til å rekonstruere de opprinnelige inngangene til nettverket.
Autoencoder Anvendelser
Autoencodere kan brukes til en rekke forskjellige anvendelser, men de brukes vanligvis til oppgaver som dimensjonsreduksjon, data-støyfjerning, egenskaps-uttrekk, bilde-generering, sekvens-til-sekvens-prediksjon og anbefalings-systemer.
Data-støyfjerning er bruk av autoencodere til å fjerne korn/støy fra bilder. Liksom autoencodere kan brukes til å reparere andre typer bilde-skader, som blurrede bilder eller bilder med manglende seksjoner. Dimensjonsreduksjon kan hjelpe høy-kapasitets nettverk til å lære nyttige egenskaper til bilder, det vil si at autoencodere kan brukes til å supplere treningen av andre typer neurale nettverk. Dette er også sant for å bruke autoencodere til egenskaps-uttrekk, da autoencodere kan brukes til å identifisere egenskaper til andre trening- datasett for å trenere andre modeller.
I forhold til bilde-generering kan autoencodere brukes til å generere falske menneskelige bilder eller animerte karakterer, som har anvendelser i design av ansiktsgjenkjenningssystemer eller automatisering av visse aspekter av animasjon.
Sekvens-til-sekvens-prediksjonsmodeller kan brukes til å bestemme den tidsmessige strukturen til dataene, det vil si at en autoencoder kan brukes til å generere den neste hendelsen i en sekvens. Av denne grunn kan en autoencoder brukes til å generere videoer. Til slutt kan dype autoencodere brukes til å skape anbefalingssystemer ved å plukke opp mønster relatert til brukerinteresse, med koderen som analyserer brukerengasjementsdata og dekoderen som skaper anbefalinger som passer de etablerte mønstrene.












