Er der forskel mellem autoencodere og encoder-dekoder i dyb læring?


Svar 1:

Sådan ser jeg disse to udtryk (uformelt). Tænk på koderen-dekoderen som et meget generelt ramme / arkitekturdesign. I dette design har du en funktion, der kortlægger et inputrum, uanset hvad det måtte være, til et andet / latent rum ("koderen"). Dekoderen er simpelthen den komplementære funktion, der skaber et kort fra (kodernes) latente rum til et andet målrum (hvad er det vi ønsker at dekode fra det latente rum). Bemærk ved blot at kortlægge mellemrum og forbinde dem gennem et delt latent rum, kan du gøre noget som at kortlægge en række tokens på engelsk (dvs. en engelsk sætning) til en række tokens på fransk (dvs. oversættelsen af ​​den engelske sætning til fransk). I nogle neurale oversættelsesmodeller kortlægger du en engelsk sekvens til en fast vektor (siger den sidste tilstand, fundet ved at nå et punktum, for det tilbagevendende netværk, du bruger til at behandle sætningen iterativt), hvorfra du afkoder til en fransk sekvens .

En autoencoder (eller auto-associerer, som den klassisk blev kendt som), er et specielt tilfælde af en koder-dekoderarkitektur - for det første er målområdet det samme som input space (dvs. engelske input til engelske mål) og for det andet, målet er at være lig med input. Så vi vil kortlægge noget som vektorer til vektorer (bemærk, at dette stadig kan være en sekvens, da de er tilbagevendende autokodere, men du er nu i dette tilfælde, ikke forudsiger fremtiden, men blot rekonstruerer nutiden med en tilstand / hukommelse og til stede). Nu er en autoencoder virkelig beregnet til at gøre auto-associering, så vi forsøger i det væsentlige at opbygge en model til at "huske" input, hvilket gør det muligt for autoencoderen at gøre ting som mønsterafslutning, så hvis vi giver vores autoencoder et delvist beskadiget input, det ville være i stand til at "hente" det korrekte mønster fra hukommelsen.

Generelt bygger vi autoencodere, fordi vi er mere interesserede i at få en repræsentation snarere end at lære en forudsigelig model (skønt man kunne hævde, at vi også får temmelig nyttige repræsentationer fra forudsigelige modeller…).

Men novellen er enkel: en autoencoder er virkelig et specielt eksempel på en koderkoder. Dette er især nyttigt, når vi ønsker at afkoble koderen og dekoderen for at skabe noget som en variativ autoencoder, som også frigør os fra at skulle gøre dekoderen symmetrisk i design til koderen (dvs. koderen kan være et 2-lags konvolutionsnetværk mens dekoderen kunne være et 3-lags dekonvolutional netværk). I en variabel autoencoder bliver ideen om latent plads mere klar, fordi vi nu virkelig kortlægger input (f.eks. Et billede eller dokumentvektor) til en latent variabel, hvorfra vi vil rekonstruere det originale / samme input (f.eks. Billedet eller dokumentvektor).

Jeg tror også, at en stor forvirring stammer fra misbrug af terminologi. I dag er ML-folk især tilbøjelige til at blande og matche ord (nogle gør det for at få ting til at lyde køligere eller finde buzzwords, der vil tiltrække læsere / funders / fame / glory / osv.), Men dette kan delvis skyldes re-branding af kunstige neurale netværk som ”dyb læring” ;-) [da alle til sidst vil have penge til at fortsætte med at arbejde]


Svar 2:

Ja.

En encoder-dekoderarkitektur har en kodersektion, der tager et input og kortlægger det til et latent rum. Dekoderafsnittet tager det latente rum og kortlægger det til et output. Normalt giver dette bedre resultater. En autoencoder tager simpelthen x som input og forsøger at rekonstruere x (nu x_hat) som en output.

Normalt er brugssager forskellige. Autoencodere vil normalt blive brugt i uovervågede indlæringssituationer, da som vi kan se, kræves der ikke etiketter, kun data. Koder-dekoderarkitekturer bruges ofte på en mere generel måde, da du refererede til med SegNet-papiret og mere almindeligt med NMT.