Existuje rozdíl mezi automatickými kodéry a kodéry-dekodéry v hlubokém učení?


Odpověď 1:

Takto vidím tyto dva termíny (neformálně). Představte si kodér-dekodér jako velmi obecný návrh rámce / architektury. V tomto návrhu máte nějakou funkci, která mapuje vstupní prostor, ať už je to jakýkoli, do jiného / latentního prostoru („kodér“). Dekodér je jednoduše doplňková funkce, která vytváří mapu z latentního prostoru (kodéru) do jiného cílového prostoru (co chceme dekódovat z latentního prostoru). Poznámka pouhým zmapováním mezer a jejich propojením prostřednictvím sdíleného latentního prostoru byste mohli udělat něco jako mapování sekvence tokenů v angličtině (tj. Anglická věta) na sekvenci tokenů ve francouzštině (tj. Překlad této anglické věty) do francouzštiny). V některých modelech neurálních překladů namapujete anglickou sekvenci na pevný vektor (řekněme poslední stav, nalezený po dosažení interpunkčního znaménka, opakující se sítě, kterou používáte k iterativnímu zpracování věty), ze které se dekódujete na francouzskou sekvenci .

Autoencoder (nebo auto-asociator, jak to bylo klasicky známé jako) je zvláštní případ architektury enkodér-dekodér - nejprve je cílový prostor stejný jako vstupní prostor (tj. Anglické vstupy do anglických cílů) a druhý, cíl má být roven vstupu. Takže bychom mapovali něco jako vektory na vektory (všimněte si, že by to stále mohla být sekvence, protože se jedná o opakující se autoenkodéry, ale nyní jste v tomto případě, nepředpovídáte budoucnost, ale jednoduše rekonstruujete přítomnost s ohledem na stav / paměť a současnost, dárek). Nyní je autoenkodér skutečně určen k auto-asociaci, takže se v podstatě pokoušíme vytvořit model, který by „vzpomněl“ na vstup, který by autoencoderu umožňoval dělat věci, jako je dokončení vzoru, takže pokud dáme našemu autoencoderu částečně poškozený vstup, bylo by možné „načíst“ správný vzor z paměti.

Obecně také stavíme autoenkodéry, protože se více zajímáme o získání reprezentace než o učení prediktivního modelu (i když lze argumentovat, že dostáváme docela užitečné reprezentace také z prediktivních modelů ...).

Ale povídka je jednoduchá: autoencoder je opravdu zvláštní příklad kodéru-dekodéru. To je zvláště užitečné, když chceme oddělit kodér a dekodér, abychom vytvořili něco jako variační autoenkodér, což nás také osvobozuje od toho, abychom museli dekodér vyrábět symetricky v designu s kodérem (tj. Kodér by mohl být dvouvrstvou konvoluční sítí) zatímco dekodér může být třívrstvá dekonvoluční síť). V variačním autoencoderu je myšlenka latentního prostoru jasnější, protože nyní skutečně mapujeme vstup (například obrázek nebo vektor dokumentu) na latentní proměnnou, ze které rekonstruujeme původní / stejný vstup (jako je obrázek) nebo dokumentový vektor).

Také si myslím, že velké zmatení pramení ze zneužití terminologie. V dnešní době mají lidé ML tendenci míchat a porovnávat slova (někteří tak dělají, aby věci zněly chladněji nebo hledaly buzzwords, která přiláká čtenáře / sponzory / slávu / slávu / atd.), Ale mohlo by to být částečně způsobeno re-brandingem umělé neuronové sítě jako „hluboké učení“ ;-) [protože nakonec chce, aby peníze pokračovaly v práci]


Odpověď 2:

Vskutku.

Architektura kodér-dekodér má sekci kodéru, která vezme vstup a mapuje jej do latentního prostoru. Sekce dekodéru vezme latentní prostor a namapuje jej na výstup. Obvykle to vede k lepším výsledkům. Autoencoder jednoduše bere x jako vstup a pokouší se rekonstruovat x (nyní x_hat) jako výstup.

Obvykle jsou případy použití odlišné. Autoenkodéry budou obecně používány v situacích bez dozoru, protože jak vidíme, nejsou vyžadována žádná označení, pouze data. Architektury kodéru-dekodéru jsou často používány obecnějším způsobem, jak jste se odkazovali na papír SegNet a častěji na NMT.