Generativní modely se snaží namodelovat distribuci trénovacích dat. Model má pak generovat data ze stejného rozdělení, aby nebylo poznat, že jsou syntetická.
Distribuce se modeluje pomocí váženého sčítání gaussovských distribucí.
Trénujeme váhy a parametry rozdělení (střední hodnota a rozptyl) pomocí expectation maximization (EM).
EM je třída algoritmů, kde nejprve nějak nastřelíme parametry modelu a pak je upřesňujeme. Příkladem tohoto algoritmu je k-means.
Autoencoder můžeme využít tak, že jím zakódujeme vstupy do latentního prostoru nízké dimenze, zde použijeme GMM k naučení distribuce a dále pomocí naučeného rozdělení generujeme nová data, která decoderem převádíme do původních dimenzí a tím získáváme podobné hodnota jako byly na vstupu. Problém je, že toto se nedá učit end-to-end jako klasické AE.
Znáte nějaké autoregresivní generativní modely a jak fungují? ?¶
Predikují budoucí chování na základě známých dat z minulosti.
Použití pro forecasting časových řad.
Předpokladem je, že trénovací data musí obsahovat autokorelaci, tedy nějaké pravidlo určující korelaci signálu a jeho časového zpoždění. Např. v obrázku když máme nějaký přechod pozadí, tak vidíme jak se okolní pixely postupně mění a jsme schopni je predikovat. Takže pro obrázky je vysoká autokorelace pokud mají pozvolné přechody.
PixelRNN k predikci pixelů jako časových řad. Může být že v obrázku jdeme postupně od rohu a predikujeme (row LSTM) nebo jdeme proti sobě ze dvou směrů (bidirectional LSTM). Výhodou je, že díky paměti lze hledat i netriviální sekvence. Nevýhoda, že je to poměrně pomalé a nelze paralelizovat, proto se tolik nepoužívají.
Každý pixel se generuje postupně a je závislý na všech předchozích pixelech
Častější jsou PixelCNN, kde se pomocí konvolučních filtrů vyberou oblasti obrázků, podle kterých se pak dopočítávají pixely. Výhodou je, že lze více paralelizovat. Postupně se generují části obrázku a konvolucí se extrahujou příznaky na základě kterých se dobarvují další a další pixely. Lze použít i pro Super-Resolution, kde nejprve modelujeme obecné tvarové charakteristiky a postupně se doplňují detaily do většího rozlišení.
Vezme masku ktera se nachazi okolo generovaneho pixelu a zase bere vsechny predchozi vygenerovane, ted tedy v masce.
Dvě komponety – Generátor a Diskriminátor – hrají spolu zero-sum hru, kde mají společný loss a jeden se ho snaží minimalizovat a druhý maximalizovat.
Generátor z náhodného vektoru v latentním prostoru generuje upsamplingem (dekonvoluce) obrázek např. a diskriminátor se snaží rozeznat skutečné obrázky od těch uměle vygenerovaných. Postupně se takhle navzájem vylepšují ve svých činnostech.
Trénují se v praxi zvlášť tím, že pro každý minibatch se nejprve zafixuje G a trénuje D, a pak se zafixuje D a trénuje G.
Nestabilní trénování, často problém, že jeden model se moc rychle zlepší a druhý ho nemá šanci dohnat.
Dalsi problemy jsou kvalitativni, neumi pocitat, prespectiva atd...
Problém s GANy je také v tom, že výstupy generují z náhodného šumu, takže pokud bychom chtěli generovat na základě nějakých konkrétních příznaků, tak nelze jednoduše určit zdrojový šum. Také je problém v tom, že diskriminátor se učí jen rozpoznat skutečné a vygenerované vstupy, ale už neřeší jestli ty vstupy vypadají tak jak mají.
Jedná se o autoencoder, jehož rozdělení latentního prostoru (embeddingů) je regularizováno tak, aby mělo dobré vlastnosti pro generování nových dat.
Generovat nová data s vanilla AE je složité, protože latentní prostor nemusí být úplný, může se stát že náhodně zvolený bod nás pak v decodingu hodí někam mimo rozsah platých hodnot.
VAE nedělají encoding vstupu na jeden bod latentního prostoru, ale encodují ho jako distribuci na latentním prostoru, ze které je pak vzorkován bod a ten je dekódován a porovnán se vstupem.
VAE loss zakomponuje dva typy chyb: jednak reconstruction error původního vstupu (least squares stejně jako AE) a také jak moc se latentní distribuce liší od jednotkového normálního rozdělení, protože to je takové ideální rozdělení co chceme.