Základy AI
Co je to Autoencoder?
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 primární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 není ztráta minimalizována 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 užitečné se na autoencodery blíže podívat a získat lepší pochopení toho, jak fungují. Tento článek se bude snažit demystifikovat autoencodery, vysvětlovat 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, že vstupní vrstvy obsahují exactly tolik informací jako výstupní vrstva. Důvod, proč vstupní vrstva a výstupní vrstva mají přesně stejné množství jednotek, je, že autoencoder se snaží 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 zmapována přímo z vstupu na výstup, což znamená, že síť nekopíruje pouze vstupní data. Existují tři komponenty autoencoderu: kódovací (vstupní) část, která komprimuje data, komponenta, která zpracovává komprimovaná data (nebo hrdlo), a dekódovací (výstupní) část. Když jsou data vložena 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 rekonstrukce těchto dat.
Proč byste chtěli trénovat síť, aby pouze rekonstruovala data, která jsou jí dána? Důvod je, že síť se naučí „esenci“, nebo nejimportnější funkce vstupních dat. Po 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 obrazech a poté použít trénovaný model k odstranění zrnění/šumu z obrazu.
Architektura Autoencoderu
Podívejme se na architekturu autoencoderu. 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)
Jako již bylo zmíněno, autoencoder lze rozdělit na tři různé komponenty: kódovací část, hrdlo a dekódovací část.
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, generovat novou reprezentaci dat, která má sníženou dimenzi.
Kódovací vrstvy, nebo hrdlo, zpracovávají komprimovanou reprezentaci dat. Hrdlo je pečlivě navrženo tak, aby určilo nejrelevantnější části pozorovaných dat, nebo jinými slovy funkce dat, které jsou nejimportnější pro rekonstrukci dat. Cílem je určit, které aspekty dat je třeba zachovat a které lze zanedbat. Hrdlo musí vyvážit dvě různé úvahy: velikost reprezentace (jak kompaktní je reprezentace) a relevanci proměnných/funkcí. Hrdlo provede element-wise aktivaci na váhách a bias síť. Hrdlo se někdy také nazývá latentní reprezentace nebo latentní proměnné.
Dekódovací vrstva je zodpovědná za převzetí komprimovaných dat a převodu je zpět do reprezentace se stejnými dimenzemi jako původní, nezměněná data. Převod je proveden s latentní prostorovou reprezentací, kterou vytvořil kódovací část.
Nejběžnější architektura autoencoderu je feed-forward architektura, se strukturou podobnou jednovrstvé perceptronu používanému v multilayer perceptronu. Stejně jako pravidelné feed-forward neuronové sítě je autoencoder trénován pomocí zpětného šíření.
Atributy Autoencoderu
Existují různé typy autoencoderů, ale všechny mají jisté vlastnosti, které je spojují.
Autoencodery se učí automaticky. Nevyžadují štítky a pokud jsou dána dostatečná data, je snadné získat autoencoder, aby dosáhl vysoké výkonnosti 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 již 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, počet uzlů na vrstvu a funkce 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ý, počet uzlů na vrstvu by měl klesat, jak kódovací část pokračuje. Naopak, v dekódovací části by měl počet uzlů na vrstvu vzrůst, jak dekódovací vrstvy postupují k finální vrstvě. Nakonec, funkce ztráty autoencoderu je obvykle buď binární křížová entropie nebo střední kvadratická chyba. Binární křížová entropie je vhodná pro instance, kde vstupní hodnoty dat jsou v rozmezí 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 typicky mají hrdlo, které komprimuje data snížením počtu uzlů, špatné autoencodery jsou alternativou k tomuto typickému operačnímu režimu. V síti se zachovají stejné velikosti jako kódovací a dekódovací vrstvy. Místo toho jsou penalizovány aktivity uvnitř dané vrstvy, aby se ztrátová funkce 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íce působivé aktivační funkce jsou uchovány a ostatní jsou ignorovány, a toto omezení pomáhá síti určit pouze nejzávažně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ě Jacobovy matice pro vstupní kódovací aktivity. Efekt 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, aby vytvořily novou reprezentaci dat. Podobně jako konvoluční neuronové sítě, konvoluční autoencoder specializuje se 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ážení obrazu nebo modifikaci geometrie obrazu. Jakmile jsou filtry naučeny sítí, lze je použít na jakékoli dostatečně podobné vstupní data k extrahování funkcí obrazu.
Denoising

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
Denoising 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 se používá k trénování modelu, ale ztrátová funkce porovnává výstupní hodnoty s původními vstupními daty, nikoli s poškozenými vstupními daty. Cílem je, aby síť mohla reprodukovat původní, nešumivé verzi obrazu. Porovnáním poškozených dat s původními daty se síť naučí, které funkce dat jsou nejimportnější a které funkce jsou nepodstatné/šum.
Variabilní
Variabilní autoencodery fungují tak, že dělají předpoklady o distribuci latentních proměnných dat. Variabilní autoencoder produkuje pravděpodobnostní distribuci pro různé funkce trénovacích obrazů/latentních atributů. Během trénování kódovací část vytváří latentní distribuce pro různé funkce vstupních obrazů.

Během trénování sítě jsou analyzována zakódovaná data a rozpoznávací model produkuje dva vektory, které vykreslují střední hodnotu a standardní odchylku obrazů. Distribuce je vytvořena na základě těchto hodnot. To se provádí pro různé latentní stavy. Dekódovací část 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 jsou obvykle používány 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ě lze autoencodery použít k opravě jiných typů poškození obrazů, jako jsou rozmazané obrázky nebo obrázky s chybějícími částmi. 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ů pro 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í tváří nebo automatizaci určitých aspektů animace.
Modely sekvenční předpovědi 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 sekvenční. Z tohoto důvodu lze autoencoder použít k generování videí. Nakonec lze hluboké autoencodery použít k vytvoření systémů doporučení tím, že se zachytí vzorce související s uživatelským zájmem, s kódovací částí, která analyzuje uživatelská data o zapojení, a dekódovací částí, která vytváří doporučení, která odpovídají zavedeným vzorcům.












