Er det forskjell mellom autoencodere og encoder-dekoder i dyp læring?


Svar 1:

Slik vil jeg se disse to begrepene (uformelt). Tenk på koderen-dekoderen som en veldig generell ramme / arkitekturdesign. I denne utformingen har du en funksjon som kartlegger et inngangsrom, uansett hva det måtte være, til et annet / latent rom ("koderen"). Dekoderen er ganske enkelt den komplementære funksjonen som lager et kart fra (koders) latente rom til et annet målområde (hva er det vi ønsker å dekode fra det latente rommet). Merk ved bare å kartlegge mellomrom og koble dem gjennom et delt latent rom, kan du gjøre noe som å kartlegge en sekvens av symboler på engelsk (dvs. en engelsk setning) til en sekvens av symboler på fransk (dvs. oversettelsen av den engelske setningen til fransk). I noen nevrale oversettelsesmodeller kartlegger du en engelsk sekvens til en fast vektor (si den siste tilstanden, funnet når du har oppnådd et skilletegn, for det tilbakevendende nettverket du bruker for å behandle setningen iterativt), hvorfra du vil avkode til en fransk sekvens .

En autoencoder (eller auto-assosierer, som den klassisk ble kjent som) er et spesielt tilfelle av en koder-dekoderarkitektur - for det første er målrommet det samme som input space (dvs. engelske innganger til engelske mål) og for det andre, målet er å være lik input. Så vi vil kartlegge noe som vektorer til vektorer (legg merke til at dette fortsatt kan være en sekvens, ettersom de er tilbakevendende autokodere, men du er nå i dette tilfellet, ikke forutsier fremtiden, men bare rekonstruerer nåtiden gitt en tilstand / minne og tilstede). Nå er en autoencoder virkelig ment å gjøre auto-assosiasjon, så vi prøver egentlig å bygge en modell for å "huske" inngangen, som lar autoencoderen gjøre ting som mønster fullføring, så hvis vi gir autoencoderen en delvis korrupt inngang, det vil være i stand til å "hente" riktig mønster fra minnet.

Generelt bygger vi også autokodere fordi vi er mer interessert i å få en representasjon fremfor å lære en prediktiv modell (selv om man kan hevde at vi får ganske nyttige representasjoner fra prediktive modeller også ...).

Men novellen er enkel: en autoencoder er virkelig en spesiell forekomst av en koder-dekoder. Dette er spesielt nyttig når vi ønsker å koble fra koderen og dekoderen for å lage noe som en variativ autoencoder, som også frigjør oss fra å måtte gjøre dekoderen symmetrisk i design til koderen (dvs. koderen kan være et 2-lags konvolusjonelt nettverk) mens dekoderen kan være et 3-lags dekonvolusjonelt nettverk). I en variativ autokode blir ideen om latent plass tydeligere, fordi vi nå virkelig kartlegger inngangen (for eksempel et bilde eller dokumentvektor) til en latent variabel, hvorfra vi vil rekonstruere den opprinnelige / samme inngangen (for eksempel bildet eller dokumentvektor).

Jeg tror også mye forvirring kommer av misbruk av terminologi. I dag pleier ML-folk spesielt å blande og matche ord (noen gjør det for å få ting til å høres kjøligere ut eller finne buzzwords som vil tiltrekke lesere / innbyggere / berømmelse / ære / osv.), Men dette kan delvis skyldes re-branding av kunstige nevrale nettverk som “dyp læring” ;-) [siden alle til slutt ønsker at pengene skal fortsette å fungere]


Svar 2:

Faktisk.

En koder-dekoderarkitektur har en koderseksjon som tar en inngang og kartlegger den til et latent rom. Dekoderseksjonen tar det latente rommet og kartlegger det til en utgang. Vanligvis gir dette bedre resultater. En autoencoder tar ganske enkelt x som inngang og prøver å rekonstruere x (nå x_hat) som en utgang.

Vanligvis er brukssakene forskjellige. Autokodere vil vanligvis bli brukt i uovervåket læringssituasjoner, ettersom vi kan se, er det ikke nødvendig med noen etiketter, bare data. Koder-dekoderarkitekturer brukes ofte på en mer generell måte, da du refererte til med SegNet-papiret og mer ofte med NMT.