Hluboké generativní modely

Generativní model je výkonný způsob učení jakéhokoli druhu distribuce dat pomocí učení bez dohledu a během několika málo let dosáhl obrovského úspěchu. Cílem všech typů generativních modelů je naučit se skutečné rozložení dat trénovací množiny tak, aby bylo možné generovat nové datové body s určitými odchylkami. Ne vždy je však možné naučit se přesné rozdělení našich dat buď implicitně, nebo explicitně, a proto se snažíme modelovat rozdělení, které je co nejpodobnější skutečnému rozdělení dat. K tomu můžeme využít sílu neuronových sítí a naučit se funkci, která dokáže modelové rozdělení přiblížit skutečnému rozdělení.

Dva z nejčastěji používaných a nejúčinnějších přístupů jsou variační autoenkodéry (VAE) a generativní adverzní sítě (GAN). Cílem VAE je maximalizace dolní hranice logaritmické pravděpodobnosti dat a cílem GAN je dosažení rovnováhy mezi generátorem a diskriminátorem. V tomto blogpostu budu vysvětlovat fungování VAE a GAN a intuici, která za nimi stojí.

Variační autoenkodér

Předpokládám, že čtenář je již obeznámen s fungováním vanilla autoenkodéru. Víme, že pomocí autoenkodéru můžeme vstupní obraz zakódovat do mnohem menší rozměrové reprezentace, která může uchovávat latentní informace o rozložení vstupních dat. Ve vanilla autoenkodéru však lze zakódovaný vektor mapovat na odpovídající vstup pouze pomocí dekodéru. Rozhodně jej nelze použít ke generování podobných obrázků s určitou variabilitou.

Pro dosažení tohoto cíle se model musí naučit pravděpodobnostní rozdělení trénovacích dat. VAE je jedním z nejoblíbenějších přístupů k učení komplikovaného rozdělení dat, jako jsou obrázky, pomocí neuronových sítí bez dohledu. Jedná se o pravděpodobnostní grafický model, který má kořeny v bayesovské inferenci, tj. cílem modelu je naučit se základní pravděpodobnostní rozdělení trénovacích dat, aby mohl z tohoto naučeného rozdělení snadno vzorkovat nová data. Podstatou je naučit se nízkorozměrnou latentní reprezentaci trénovacích dat, tzv. latentní proměnné (proměnné, které nejsou přímo pozorovány, ale jsou spíše odvozeny prostřednictvím matematického modelu), o nichž předpokládáme, že vygenerovaly naše skutečná trénovací data. Tyto latentní proměnné mohou uchovávat užitečné informace o typu výstupu, který má model generovat. Pravděpodobnostní rozdělení latentních proměnných z se označuje P(z). Jako priorita pro učení rozdělení P(z) je zvoleno Gaussovo rozdělení, aby bylo možné v době inference snadno vzorkovat nové datové body.

Nyní je primárním cílem modelovat data s určitými parametry, které maximalizují pravděpodobnost trénovacích dat X. Stručně řečeno, předpokládáme, že nízkorozměrný latentní vektor vygeneroval naše data x (x ∈ X) a tento latentní vektor můžeme mapovat na data x pomocí deterministické funkce f(z;θ) parametrizované pomocí theta, kterou musíme vyhodnotit (viz obr. 1). V rámci tohoto generativního procesu je naším cílem maximalizovat pravděpodobnost každého údaje v X, která je dána jako,

Pө(X) = ∫Pө(X, z)dz = ∫Pө(X|z)Pө(z)dz (1)

Zde f(z;θ)nahrazeno rozdělením Pө(X|z).

Obr. 1. Latentní vektor mapovaný na rozdělení dat pomocí parametru ө

Intuice tohoto odhadu maximální věrohodnosti spočívá v tom, že pokud model může generovat trénovací vzorky z těchto latentních proměnných, pak může také generovat podobné vzorky s určitými odchylkami. Jinými slovy, pokud z P(z) vybereme velký počet latentních proměnných a z těchto proměnných vygenerujeme x, pak by vygenerované x mělo odpovídat rozdělení dat Pdata(x). Nyní máme dvě otázky, na které musíme odpovědět. Jak zachytit rozdělení latentních proměnných a jak integrovat rovnici 1 přes všechny dimenze z?“

Je zřejmé, že ruční zadávání příslušných informací, které chceme zakódovat do latentního vektoru pro generování výstupního obrazu, je zdlouhavý úkol. Spíše se při výpočtu z spoléháme na neuronové sítě jen s předpokladem, že tento latentní vektor lze dobře aproximovat jako normální rozdělení, abychom mohli v době inference snadno vzorkovat. Máme-li normální rozdělení z v n-rozměrném prostoru, pak je vždy možné vygenerovat libovolný druh rozdělení pomocí dostatečně složité funkce a inverzní funkci této funkce lze použít k učení samotných latentních proměnných.

V rovnici 1 se integrace provádí přes všechny rozměry z, a proto je neřešitelná. Lze ji však vypočítat pomocí metod Monte-Carlo integrace, což je něco, co není snadné implementovat. Proto použijeme jiný přístup k přibližné maximalizaci Pө(X) v rovnici 1. Podstatou VAE je odvodit P(z) pomocí P(z|X), které neznáme. P(z|X) odvozujeme pomocí metody zvané variační inference, což je v podstatě optimalizační problém v bayesovské statistice. Nejprve modelujeme P(z|X) pomocí jednoduššího rozdělení Q(z|X), které lze snadno nalézt, a snažíme se minimalizovat rozdíl mezi P(z|X) a Q(z|X) pomocí KL-divergentního metrického přístupu tak, aby se naše hypotéza blížila pravdivému rozdělení. Následuje spousta matematických rovnic, které zde nebudu vysvětlovat, ale najdete je v původním článku. Musím však říci, že tyto rovnice nejsou příliš složité na pochopení, jakmile pochopíte intuici VAE.

Konečná účelová funkce VAE je :-

Výše uvedená rovnice má velmi pěknou interpretaci. Výraz Q(z|X) je v podstatě naše kódovací síť, z je naše kódovaná reprezentace dat x(x ∈ X) a P(X|z) je naše dekódovací síť. Ve výše uvedené rovnici je tedy naším cílem maximalizovat logaritmickou pravděpodobnost rozdělení našich dat při určité chybě dané D_KL. Je snadno vidět, že VAE se snaží minimalizovat dolní mez log(P(X)), protože P(z|X) není postižitelné, ale člen KL-divergence je >=0. To je stejné jako maximalizace E a minimalizace D_KL. Víme, že maximalizace E je odhad maximální věrohodnosti a modeluje se pomocí dekódovací sítě. Jak jsem již řekl dříve, chceme, aby naše latentní reprezentace byla blízká Gaussově, a proto předpokládáme, že P(z) je N(0, 1). Podle tohoto předpokladu by se Q(z|X) mělo také blížit tomuto rozdělení. Předpokládáme-li, že se jedná o Gaussovo rozdělení s parametry μ(X) a Ʃ(X), chyba způsobená rozdílem těchto dvou rozdělení, tj, P(z) a Q(z|X) danou KL-divergencí, vede k řešení v uzavřeném tvaru uvedenému níže.

Vezmeme-li v úvahu, že optimalizujeme dolní variační mez, je naše optimalizační funkce :

log(P(X|z)). – D_KL, kde řešení druhé je uvedeno výše.

Naše ztrátová funkce tedy bude obsahovat dva členy. První z nich je ztráta rekonstrukce vstupu na výstup a druhá ztráta je člen KL-divergence. Nyní můžeme síť trénovat pomocí algoritmu zpětného šíření. Je zde však problém, a to ten, že první člen nezávisí pouze na parametrech P, ale také na parametrech Q, ale tato závislost se ve výše uvedené rovnici neobjevuje. Jak tedy zpětně propagovat přes vrstvu, kde náhodně vzorkujeme z z rozdělení Q(z|X) nebo N, aby P mohl dekódovat. Gradienty nemohou procházet náhodnými uzly. Použijeme trik reparametrizace (viz obr.), aby síť byla diferencovatelná. Vzorkujeme z N(μ(X), Σ(X)) tak, že nejprve vybereme ε ∼ N(0, I) a pak vypočítáme z=μ(X) + Σ1/2(X)∗ε.

To bylo velmi pěkně znázorněno na obr. 2 ? . Je třeba poznamenat, že krok feedforward je pro obě tyto sítě (levou & pravou) stejný, ale gradienty se mohou zpětně šířit pouze pravou sítí.

Obr.2. Trik s reparametrizací používaný ke zpětnému šíření přes náhodné uzly

V době inference můžeme jednoduše odebrat vzorek z z N(0, 1) a přivést jej do dekódovací sítě pro generování nového datového bodu. Vzhledem k tomu, že optimalizujeme dolní variační mez, je kvalita generovaného obrazu ve srovnání s nejmodernějšími technikami, jako jsou generativní adverzní sítě, poněkud nízká.

Nejlepší na VAE je, že se učí jak generativní model, tak inferenční model. Ačkoli jak VAE, tak GAN jsou velmi zajímavé přístupy k učení základního rozdělení dat pomocí učení bez dohledu, ale GAN poskytují lepší výsledky ve srovnání s VAE. Ve VAE optimalizujeme dolní variační hranici, zatímco v GAN takový předpoklad není. GAN se ve skutečnosti nezabývají žádným explicitním odhadem hustoty pravděpodobnosti. Neúspěch VAE při generování ostrých obrazů znamená, že model není schopen naučit se skutečné posteriorní rozdělení. VAE a GAN se liší především ve způsobu trénování. Ponořme se nyní do generativních adverzních sítí.

Generativní adverzní sítě

Yann LeCun říká, že adverzní trénink je nejúžasnější věc od doby, kdy se krájel chleba. Když vidím popularitu generativních adverzních sítí a kvalitu výsledků, kterých dosahují, myslím, že většina z nás s ním bude souhlasit. Adversariální trénink zcela změnil způsob, jakým učíme neuronové sítě provádět konkrétní úkol. Generativní adverzní sítě nepracují s žádným explicitním odhadem hustoty jako variační autoenkodéry. Místo toho je založeno na přístupu teorie her s cílem najít Nashovu rovnováhu mezi dvěma sítěmi, Generátorem a Diskriminátorem. Myšlenka spočívá ve vzorkování z jednoduchého rozdělení, jako je Gaussovo, a následném učení se transformovat tento šum na rozdělení dat pomocí univerzálních aproximátorů funkcí, jako jsou neuronové sítě.

Toho se dosahuje adverzním trénováním těchto dvou sítí. Generátorový model G se učí zachytit rozdělení dat a diskriminační model D odhaduje pravděpodobnost, že vzorek pochází z rozdělení dat, a nikoli z modelového rozdělení. Úkolem generátoru je v podstatě generovat přirozeně vypadající obrázky a úkolem diskriminátoru je rozhodnout, zda je obrázek falešný, nebo skutečný. Lze si to představit jako mini-max hru dvou hráčů, kde se výkonnost obou sítí v průběhu času zlepšuje. V této hře se generátor snaží co nejvíce oklamat diskriminátor tím, že generuje skutečné obrazy, a generátor se snaží nenechat se oklamat diskriminátorem tím, že zlepšuje svou diskriminační schopnost. Následující obrázek ukazuje základní architekturu sítě GAN.

Obr.3. Na obrázku je znázorněna základní architektura sítě GAN. Stavební blok generativní adverzní sítě

Definujeme prioritu na vstupní šumové proměnné P(z) a generátor ji pak mapuje na rozložení dat pomocí komplexní diferencovatelné funkce s parametry өg. Kromě toho máme další síť nazvanou Diskriminátor, která přijímá na vstupu x a pomocí další diferencovatelné funkce s parametry өd vynáší jedinou skalární hodnotu označující pravděpodobnost, že x pochází z pravého rozdělení dat Pdata(x). Cílová funkce GAN je definována jako

Ve výše uvedené rovnici, pokud vstup do Diskriminátoru pochází z pravdivého rozdělení dat, pak by D(x) měl na výstupu vykázat hodnotu 1, aby se maximalizovala výše uvedená cílová funkce w.r.t D, zatímco pokud byl obraz vygenerován z Generátoru, pak by D(G(z)) měl dávat výstup 1, aby se minimalizovala účelová funkce w.r.t G. Z posledně uvedeného v podstatě vyplývá, že G by měl generovat takové reálné obrazy, které mohou oklamat D. Výše uvedenou funkci maximalizujeme w.r.t parametry Diskriminátoru pomocí Gradient Ascent a totéž minimalizujeme w.r.t parametry Generátoru pomocí Gradient Descent. Při optimalizaci cíle generátoru však nastává problém. Na začátku hry, kdy se generátor ještě nic nenaučil, je gradient obvykle velmi malý, a když se mu daří velmi dobře, jsou gradienty velmi vysoké (viz obr. 4). My však chceme opačné chování. Proto spíše maximalizujeme E než minimalizujeme E

Obr.4. Náklady na generátor jako funkce odezvy diskriminátoru na generovaný obraz

Tréninkový proces spočívá v současné aplikaci Stochastic Gradient Descent na diskriminátor a generátor. Při trénování střídáme k kroků optimalizace D a jeden krok optimalizace G na minidávce. Proces trénování se zastaví, když Diskriminátor není schopen rozlišit ρg a ρdata, tj. když D(x, өd) = ½ nebo když ρg = ρdata.

Jeden z prvních modelů na GAN využívající konvoluční neuronovou síť byl DCGAN, což je zkratka pro Deep Convolutional Generative Adversarial Networks. Tato síť přijímá jako vstup 100 náhodných čísel vybraných z rovnoměrného rozdělení a výstupem je obraz požadovaného tvaru. Síť se skládá z mnoha konvolučních, dekonvolučních a plně propojených vrstev. Síť používá mnoho dekonvolučních vrstev k mapování vstupního šumu na požadovaný výstupní obraz. Ke stabilizaci trénování sítě se používá dávková normalizace. Aktivace ReLU se používá v generátoru pro všechny vrstvy s výjimkou výstupní vrstvy, která používá vrstvu tanh, a Leaky ReLU se používá pro všechny vrstvy v diskriminátoru. Tato síť byla trénována pomocí minidávkového stochastického sestupu po gradientu a k urychlení trénování byl použit Adamův optimalizátor s vyladěnými hyperparametry. Výsledky práce byly poměrně zajímavé. Autoři ukázali, že generátory mají zajímavé vektorové aritmetické vlastnosti, pomocí kterých můžeme manipulovat s obrázky požadovaným způsobem.

Obr. 5. Síťové generátory se vyznačují zajímavými vlastnostmi. Generátor DCGAN

Obr.6. Diskriminátor DCGAN

Jednou z nejpoužívanějších variant GAN je podmíněný GAN, který se konstruuje prostým přidáním podmíněného vektoru spolu s vektorem šumu (viz obr. 7). Před cGAN jsme generovali obrazy náhodně z náhodných vzorků šumu z. Co když chceme vygenerovat obraz s nějakými požadovanými vlastnostmi. Existuje nějaký způsob, jak poskytnout modelu tuto dodatečnou informaci o tom, jaký typ obrazu chceme vygenerovat? Odpověď zní ano a Conditional GAN je způsob, jak toho dosáhnout. Podmíněním modelu dodatečnou informací, která je poskytnuta generátoru i diskriminátoru, je možné řídit proces generování dat. Podmíněné GAN se používají v řadě úloh, jako je generování textu do obrázku, překlad obrázku do obrázku, automatické označování obrázků atd. Jednotná struktura obou sítí je znázorněna v následujícím schématu.

Obr. 7. Síťové systémy, které se nacházejí na území České republiky. Základní příklad cGAN s y jako podmiňujícím vektorem

Jednou ze skvělých věcí na GAN je, že je lze trénovat i s malými trénovacími daty. Výsledky GAN jsou skutečně slibné, ale postup trénování není triviální, zejména nastavení hyperparametrů sítě. GAN se navíc obtížně optimalizují, protože nesnadno konvergují. Samozřejmě existuje několik tipů a triků, jak GANy hacknout, ale nemusí vždy pomoci. Některé z těchto tipů najdete zde. Také nemáme žádná kritéria pro kvantitativní vyhodnocení výsledků, kromě kontroly, zda jsou vygenerované obrázky percepčně realistické, nebo ne.

Závěr

Modely hlubokého učení skutečně dosahují výkonu na úrovni člověka při učení pod dohledem, ale to samé neplatí pro učení bez dohledu. Přesto vědci zabývající se hlubokým učením usilovně pracují na zlepšení výkonnosti modelů bez dohledu. V tomto blogpostu jsme se podívali, jak vlastně fungují dva nejznámější rámce generativních modelů pro učení bez dohledu. Seznámili jsme se s problémy variačních autoenkodérů a s tím, proč jsou adverzní sítě lepší při vytváření realistických obrazů. U GAN však existují problémy, jako je stabilizace jejich trénování, což je stále aktivní oblast výzkumu. Nicméně GAN jsou opravdu výkonné a v současné době se používají v řadě úloh, jako je generování vysoce kvalitních obrázků (viz toto video) a videí, překlad textu do obrazu, vylepšování obrazu, rekonstrukce 3D modelů objektů z obrázků, generování hudby, objevování léků proti rakovině atd. Kromě toho mnoho výzkumníků zabývajících se hlubokým učením pracuje také na sjednocení těchto dvou modelů a na získání toho nejlepšího z obou těchto modelů. Když vidím rostoucí tempo pokroku hlubokého učení, věřím, že GAN otevřou mnoho uzavřených dveří umělé inteligence, jako je polopřímé učení a učení s posilováním. V příštích několika letech budou generativní modely velmi užitečné při navrhování grafiky, navrhování atraktivních uživatelských rozhraní atd. Možná bude také možné generovat texty v přirozeném jazyce pomocí generativních adverzních sítí.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.