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:

  •  — encoder

  •  — decoder

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:

Použití
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:

  1. Trénuj discriminator po dobu kroků ( je hyperparametr).

    1. Vyrob minibatch z .

    2. Vyrob minibatch z distribuce .

    3. Gradient descend na podle :

  2. Trénuj generator (proveď jednou).

    1. Vyrob minibatch z distribuce .

    2. Gradient descend na :

      Note
      Vš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.