-
— encoder
-
— decoder
Generative Adversarial Networks (GAN)
Autoencoders
Nejsou GAN, ale jsou jim vcelku blízké. Jejich cílem je zakódovat input do "nějaké" reprezentace. Takový autoencoder má dvě části:
Hledáme a tak, aby byla (skoro) identita. Encoder i decoder se dají implementovat pomocí MLP.
Řekneme, že encoder počítá latent representation vstupu .
Používá se unsupervised learning — nemáme očekávaný vstup, jen samply. Mám trénovací set , kde . Minimalizujeme reconstruction error:
- Komprese
-
Zmenšení velikosti obrázků velikosti 64x64 pomocí MLP 64-16-64 s aktivační funkcí tanh. Input a output jsou oblasti 8x8 vybrané náhodně.
- Snížení dimenzionality
-
Redukce dimenzionality je zobrazení , kde , a platí, že původní sample lze "zrekonstruovat" z . Typicky se nepoužívají autoencodery, ale Principal Component Analysis (PCA).
- Pretraining
-
Trénujeme autoencoderový pár vstupními daty bez očekávaný vstupů — unsupervised learning. Autoencoder se snaží vyextrahovat z dat to důležité. Nad přilepíme a tento nový MLP už trénujeme na olabelovaných datech — supervised learning.
Generator a discriminator
Generative adversarial network je unsupervised generative model, který má dvě sítě:
- Generator
-
Vezme náhodný vstup z distribuce a vrátí , které odpovídají pravděpodobnostní distribuci, která nás zajímá (např. se snaží generovat tváře).
- Discriminator
-
Počítá pravděpodobnost, že daný vstup není výstup z generátoru (např. pravděpodobnost, že na obrázku je opravdová, existující, v reálném světě žijící, totálně nevygenerovaná osoba).
Trénování
Pro trénování potřebujeme multimnožinu , která obsahuje výstupy, jenž se snaží napodobit, a považuje za opravdové.
Pro každý opravdový sample potřebujeme náhodný šum , máme tedy také multimnožinu z distribuce . Při trénování se pak používá error function:
Discriminator se snaží minimalizovat . Generator se snaží maximalizovat .
Note
|
Všimni si, že je to velice podobný binary cross-entropy: Pokud výstup znamená, že vstup je opravdový, pak si představ, že u by a u by . |
Note
|
Svým způsobem je generator decodérem a vektory jsou latentní reprezentace. |
Nechť jsou váhy a váhy . V každé iteraci trénování jsou váhy upraveny takto:
-
Trénuj discriminator po dobu kroků ( je hyperparametr).
-
Vyrob minibatch z .
-
Vyrob minibatch z distribuce .
-
Gradient descend na podle :
-
-
Trénuj generator (proveď jednou).
-
Vyrob minibatch z distribuce .
-
Gradient descend na :
NoteVšimni si, že ta error funkce je podobná té první, ale nezapočítává tam chybu discriminatoru na opravdových samplech, a je znegovaná, protože chceme maximalizovat chybu discriminatoru na fake samplech.
-