AI 101

Co je to Autoencoder?

mm

Pokud jste již dříve četli o technikách nesupervizovaného učení, možná jste narazili na termín „autoencoder“. Autoencodery jsou jedním z hlavních způsobů, jak jsou vyvíjeny modely nesupervizovaného učení. Ale co je to vlastně autoencoder?

Stručně, autoencodery fungují tak, že přijímají data, komprimují a kódují data a poté rekonstruují data z kódované reprezentace. Model je trénován, dokud nejsou minimalizovány ztráty a data jsou reprodukována co nejpřesněji. Díky tomuto procesu může autoencoder naučit důležité funkce dat. Ačkoli to je rychlé definice autoencoderu, bylo by výhodné se na autoencodery blíže podívat a získat lepší pochopení toho, jak fungují. Tento článek se pokusí odkrýt autoencodery, vysvětluje architekturu autoencoderů a jejich aplikace.

Co je to Autoencoder?

Autoencodery jsou neuronové sítě. Neuronové sítě se skládají z více vrstev a definujícím aspektem autoencoderu je to, že vstupní vrstvy obsahují přesně tolik informací jako výstupní vrstva. Důvod, proč vstupní vrstva a výstupní vrstva mají přesně stejné množství jednotek, je ten, že autoencoder má za cíl replikovat vstupní data. Výstupem je kopie dat po analýze a rekonstrukci v nesupervizovaném režimu.

Data, která procházejí autoencoderm, nejsou jednoduše mapována přímo z vstupu na výstup, což znamená, že síť nezkopíruje vstupní data. Existují tři komponenty autoencoderu: kódovací (vstupní) část, která komprimuje data, komponenta, která zpracovává komprimovaná data (nebo úžlabí), a dekodér (výstupní) část. Když jsou data zavedena do autoencoderu, jsou zakódována a poté komprimována na menší velikost. Síť je poté trénována na zakódovaných/komprimovaných datech a výstupem je rekreace těchto dat.

Proč byste chtěli trénovat síť, aby pouze rekonstruovala data, která jsou jí poskytnuta? Důvod je ten, že síť naučí „esenci“ nebo nejvýznamnější funkce vstupních dat. Po dokončení trénování sítě lze vytvořit model, který může syntetizovat podobná data, s přidáním nebo odebráním určitých cílových funkcí. Například můžete trénovat autoencoder na zrnitých obrázcích a poté použít trénovaný model k odstranění zrnění/šumu z obrázku.

Architektura Autoencoderu

Podívejme se na architekturu autoencoderu. Zde budeme diskutovat o hlavní architektuře autoencoderu. Existují variace této obecné architektury, které budeme diskutovat v následující sekci.

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

Jak bylo dříve zmíněno, autoencoder lze基本ně rozdělit na tři různé komponenty: kódér, úžlabí a dekódér.

Kódovací část autoencoderu je obvykle feedforward, hustě propojená síť. Účelem kódovacích vrstev je vzít vstupní data a komprimovat je do latentní prostorové reprezentace, generující novou reprezentaci dat, která má sníženou dimenzi.

Kódovací vrstvy, nebo úžlabí, zpracovávají komprimovanou reprezentaci dat. Úžlabí kódu je pečlivě navržen tak, aby určoval nejrelevantnější části pozorovaných dat, nebo jinými slovy, funkce dat, které jsou nejvýznamnější pro rekonstrukci dat. Cílem je určit, které aspekty dat je třeba zachovat a které lze odstranit. Úžlabí kódu musí vyvážit dvě různé úvahy: velikost reprezentace (jak kompaktní je reprezentace) a relevance proměnných/funkcí. Úžlabí provádí element-wise aktivaci na váhách a bias síť. Úžlabí vrstva je někdy také nazývána latentní reprezentací nebo latentními proměnnými.

Dekódérská vrstva je zodpovědná za převod komprimovaných dat zpět do reprezentace se stejnými rozměry jako původní, nezměněná data. Převod je proveden s latentní prostorovou reprezentací, která byla vytvořena kódérem.

Nejběžnější architektura autoencoderu je feed-forward architektura, se strukturou podobnou jedné vrstvě perceptronu používanému v multilayer perceptronech. Stejně jako pravidelné feed-forward neuronové sítě, autoencoder je trénován pomocí zpětného šíření.

Atributy Autoencoderu

Existují různé typy autoencoderů, ale všechny mají určité vlastnosti, které je spojují.

Autoencodery se učí automaticky. Nevyžadují štítky a pokud je poskytnuto dostatek dat, je snadné dosáhnout vysoké výkonnosti autoencoderu na konkrétním typu vstupních dat.

Autoencodery jsou specifické pro data. To znamená, že mohou komprimovat pouze data, která jsou velmi podobná datům, na kterých byl autoencoder trénován. Autoencodery jsou také ztrátové, což znamená, že výstupy modelu budou degradovány ve srovnání se vstupními daty.

Při navrhování autoencoderu musí inženýři strojového učení dbát na čtyři různé modelové hyperparametry: velikost kódu, počet vrstev, uzly na vrstvu a funkci ztráty.

Velikost kódu určuje, kolik uzlů začíná střední část sítě, a méně uzlů komprimuje data více. V hlubokém autoencoderu, zatímco počet vrstev může být libovolný, který inženýr považuje za vhodný, počet uzlů ve vrstvě by měl klesat, jak kódér pokračuje. Naopak, počet uzlů na vrstvu by měl vzrůst, jak dekódérské vrstvy se blíží konečné vrstvě. Nakonec, funkce ztráty autoencoderu je obvykle buď binární cross-entropie nebo střední kvadratická chyba. Binární cross-entropie je vhodná pro instance, kde vstupní hodnoty dat jsou v rozsahu 0 – 1.

Typy Autoencoderů

Jak bylo zmíněno výše, existují variace klasické architektury autoencoderu. Podívejme se na různé architektury autoencoderů.

Špatný

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Zatímco autoencodery obvykle mají úžlabí, které komprimuje data snížením počtu uzlů, špatné autoencodery jsou alternativou k této typické provozní formě. V špatné síti jsou skryté vrstvy stejné velikosti jako kódér a dekódér. Místo toho jsou aktivace uvnitř vrstvy penalizovány, což nastavuje ztrátovou funkci tak, aby lépe zachytila statistické funkce vstupních dat. Jinými slovy, zatímco skryté vrstvy špatného autoencoderu mají více jednotek než tradiční autoencoder, pouze určitý procentní podíl z nich je aktivní v daném okamžiku. Nejvýznamnější aktivace jsou zachovány a ostatní jsou ignorovány, a toto omezení pomáhá síti určit pouze nejvýznamnější funkce vstupních dat.

Kontrakční

Kontrakční autoencodery jsou navrženy tak, aby byly odolné proti malým variacím dat, zachovávají konzistentní reprezentaci dat. To je dosaženo aplikací penalizace na ztrátovou funkci. Tato technika regularizace je založena na Frobeniově normě Jacobianovy matice pro vstupní kódovací aktivace. Efektem této techniky regularizace je, že model je nucen konstruovat kódování, kde podobné vstupy budou mít podobná kódování.

Konvoluční

Konvoluční autoencodery kódují vstupní data rozdělením dat na podsekce a poté převodem těchto podsekcí na jednoduché signály, které jsou sečteny dohromady, aby vytvořily novou reprezentaci dat. Podobně jako konvoluční neuronové sítě, konvoluční autoencoder se specializuje na učení obrazových dat a používá filtr, který je přesunut přes celý obraz sekce po sekci. Kódování generovaná kódovací vrstvou lze použít k rekonstrukci obrazu, odrážejí obraz nebo modifikují geometrii obrazu. Jakmile jsou filtry naučeny sítí, lze je použít na libovolný dostatečně podobný vstup, aby se extrahovaly funkce obrazu.

Denoisování

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

Denoisovací autoencodery zavádějí šum do kódování, což vede k kódování, které je poškozenou verzí původních vstupních dat. Tato poškozená verze dat je použita k trénování modelu, ale ztrátová funkce porovnává výstupní hodnoty s původními vstupy a ne s poškozenými vstupy. Cílem je, aby síť mohla reprodukovat původní, nezměněnou verzi obrazu. Porovnáním poškozených dat s původními daty se síť naučí, které funkce dat jsou nejvýznamnější a které funkce jsou nezajímavé/poškození. Jinými slovy, aby model mohl odstranit šum z poškozených obrazů, musí extrahovat důležité funkce obrazových dat.

Variabilní

Variabilní autoencodery fungují tak, že dělají předpoklady o tom, jak jsou latentní proměnné dat distribuovány. Variabilní autoencoder produkuje pravděpodobnostní distribuci pro různé funkce trénovacích obrazů/latentních atributů. Při trénování kódér vytváří latentní distribuce pro různé funkce vstupních obrazů.

 

Protože model učí funkce nebo obrazy jako Gaussovské distribuce místo diskrétních hodnot, je schopen být použit k generování nových obrazů. Gaussovská distribuce je vzorkována, aby vytvořila vektor, který je zaveden do dekódovací sítě, která renderuje obraz na základě tohoto vzorku. Základní model učí společné funkce trénovacích obrazů a přiřazuje jim určitou pravděpodobnost, že se vyskytnou. Pravděpodobnostní distribuce lze poté použít k reverznímu inženýrství obrazu, generování nových obrazů, které se podobají původním trénovacím obrazům.

Při trénování sítě jsou zakódovaná data analyzována a rozpoznávací model výstupu dva vektory, které vyjadřují střední hodnotu a směrodatnou odchylku obrazů. Distribuce je vytvořena na základě těchto hodnot. To se provádí pro různé latentní stavy. Dekódér poté bere náhodné vzorky z odpovídající distribuce a používá je k rekonstrukci počátečních vstupů do sítě.

Aplikace Autoencoderů

Autoencodery lze použít pro širokou škálu aplikací, ale obvykle se používají pro úkoly, jako je redukce dimenzionality, odstranění šumu, extrakce funkcí, generování obrazů, sekvenční předpověď a systémy doporučení.

Odstranění šumu je použití autoencoderů k odstranění zrnění/šumu z obrazů. Podobně autoencodery lze použít k opravě jiných typů poškození obrazů, jako jsou rozmazané obrazy nebo obrazy s chybějícími sekci. Redukce dimenzionality může pomoci vysokokapacitním sítím naučit se užitečné funkce obrazů, což znamená, že autoencodery lze použít k doplnění trénování jiných typů neuronových sítí. To platí také pro použití autoencoderů k extrakci funkcí, protože autoencodery lze použít k identifikaci funkcí jiných trénovacích dat pro trénování jiných modelů.

V případě generování obrazů lze autoencodery použít k generování falešných lidských obrazů nebo animovaných postav, což má aplikace v navrhování systémů rozpoznávání obličejů nebo automatizaci určitých aspektů animace.

Sekvenční předpověďní modely lze použít k určení temporální struktury dat, což znamená, že autoencoder lze použít k generování dalšího události v sekvenci. Z tohoto důvodu lze autoencoder použít k generování videí. Nakonec hluboké autoencodery lze použít k vytvoření systémů doporučení výběrem vzorců souvisejících s uživatelským zájmem, přičemž kódér analyzuje uživatelská data o zapojení a dekódér vytváří doporučení, která odpovídají zavedeným vzorcům.

Blogger a programátor se specializací na Machine Learning a Deep Learning témata. Daniel doufá, že pomůže ostatním využít sílu AI pro sociální dobro.