Stručný úvod do GAN

S vysvetlením matematiky a kódu

GAN, alebo Generatívne kontradiktórne siete, sú typom architektúry neurónovej siete, ktorá umožňuje neurónovým sieťam generovať údaje. V posledných niekoľkých rokoch sa stali jedným z najhorúcejších podpolí hlbokého učenia sa, od generovania fuzzy obrazov číslic po fotorealistické obrázky tvárí.

Pred: fuzzy číslice, Po: fotorealistické tváre

Varianty GAN teraz urobili šialené veci, napríklad prevádzali obrazy zebier na kone a naopak.

Zistil som, že GAN sú fascinujúce, a v snahe ich lepšie porozumieť som si myslel, že budem písať tento článok a v procese vysvetlenia matematiky a kódu za nimi ich lepšie pochopím sám.

Tu je odkaz na repeticu githubu, ktorú som urobil pre zdroje GAN:

Ako teda GAN fungujú?

GAN sa učia distribúciu pravdepodobnosti dátového súboru umiestnením dvoch neurónových sietí proti sebe.

Tu je skvelý článok, ktorý vysvetľuje rozdelenie pravdepodobnosti a ďalšie koncepty pre tých, ktorí ich nepoznajú:

Jeden model, generátor, pôsobí podobne ako falšovateľ obrazov. Pokúša sa vytvoriť obrázky, ktoré vyzerajú veľmi podobne ako množina údajov. Druhý model, diskriminátor, sa chová ako polícia a snaží sa zistiť, či vytvorené obrázky boli falošné alebo nie.

V zásade sa stáva, že falšovateľ sa stále vylepšuje pri falšovaní, zatiaľ čo polícia sa pri rozpoznávaní falzifikátov zlepšuje. V skutočnosti sa tieto dva modely stále snažia navzájom poraziť, až kým generátor po mnohých iteráciách nevytvorí obrázky na nerozoznanie od skutočného súboru údajov.

Výcvik generatívnych kontradiktórnych sietí zahŕňa dva ciele:

  1. Diskriminátor maximalizuje pravdepodobnosť priradenia správneho označenia tak školiacim príkladom, ako aj obrazom generovaným generátorom. To znamená, že policajt sa lepšie rozlišuje medzi falošnými a skutočnými obrazmi.
  2. Generátor minimalizuje pravdepodobnosť, že diskriminátor môže predpovedať, že to, čo vytvára, je falošné. Teda generátor sa stáva lepším pri vytváraní falzifikátov

Skúsme zakódovať tieto dva nápady do programu.

Tento kód budeme sledovať v tomto návode

Dáta

GAN potrebujú dataset na použitie, takže pre tento tutoriál použijeme klasický ahoj svet na strojové učenie - MNIST, dataset ručne písaných číslic.

Generátor tiež potrebuje na generovanie obrázkov náhodné vstupné vektory, a na tento účel použijeme numpy

Funkcia GAN

GAN hrá hru minimax, kde sa celá sieť pokúša optimalizovať funkciu V (D, G). Toto je rovnica, ktorá definuje, čo GAN robí:

Teraz každému, kto sa dobre nepozná v matematike za tým, vyzerá to desivo, ale predstava, ktorú predstavuje, je jednoduchá, ale výkonná. Je to iba matematické znázornenie dvoch vyššie definovaných cieľov.

Generátor je definovaný pomocou G (z), ktorý prevádza určitý šum z, ktorý vložíme do niektorých údajov, ako sú obrázky.

Diskriminátor je definovaný pomocou D (x), ktoré vydáva pravdepodobnosť, že vstup x pochádza zo skutočného súboru údajov alebo nie.

Diskriminátor koná ako polícia

Chceme, aby predpovede v súbore údajov diskriminačného nástroja boli čo najbližšie k 1 a aby bol generátor čo najbližšie k 0. Na dosiahnutie tohto cieľa používame v objektívnej funkcii log-pravdepodobnosť D (x) a 1-D (z).

Protokol len zaisťuje, že čím je bližšie k nesprávnej hodnote, tým viac je penalizovaný.

Toto je vysvetlenie straty denníka, ak si nie ste istí, čo robí:

Kódovanie generátora

Generátor je iba vanilkovým modelom neurónovej siete, ktorý prijíma náhodný vstupný vektor a na výstup privádza 784-dim vektor, ktorý sa po pretvorení zmení na 28 x 28 pixelov.

Kódovanie diskriminátora

Diskriminátor je ďalšia neurónová sieť, ktorá berie výstup predchádzajúcej siete, 784-dimenzionálny vektor, a na výstup privádza pravdepodobnosť medzi 0 a 1, že pochádza zo súboru údajov o školení.

Zostavovanie do GAN

Teraz skompilujeme oba modely do jednej kontradiktórnej siete, pričom vstup nastavíme ako 100-dimenzionálny vektor a výstup ako výstup diskriminátora.

Školenie GAN

  1. Najskôr načítame údaje a rozdelíme ich do niekoľkých šarží, aby sme sa dostali do nášho modelu
  2. Tu iba inicializujeme našu sieť GAN na základe vyššie definovaných metód
  3. Toto je naša tréningová slučka, v ktorej bežíme po zadaný počet epoch.
  4. Vytvárame náhodný šum a z nášho súboru údajov vyberieme nejaké obrázky
  5. Generujeme niektoré obrázky pomocou generátora a vytvoríme vektor X, ktorý má nejaké falošné obrázky a niektoré skutočné obrázky
  6. Vytvoríme vektor Y, ktorý má „správne odpovede“, ktoré zodpovedajú X, s falošnými obrázkami označenými 0 a skutočnými obrázkami označenými 0,9. Sú označené 0.9 namiesto 1, pretože to pomáha GAN trénovať lepšie, metóda nazývaná vyhladenie jednostranných štítkov.
  7. Potrebujeme striedať školenie medzi diskriminátorom a generátorom, takže tu aktualizujeme diskriminátora
  8. Nakoniec aktualizujeme diskriminátor.

Náš prvý GAN

Po spustení vyššie uvedeného kódu sme efektívne vytvorili náš prvý GAN, ktorý generuje číslice od nuly!

Obrázky vygenerované z GAN, ktoré sme trénovali!

Dúfajme, že tento článok predstavil úvod do siete Generative Adversarial Networks a ako ju vytvoriť. V blízkej budúcnosti budem písať oveľa viac o strojovom učení, priebežne ho aktualizujte!

Vďaka za prečítanie,

Sarvasv

Chcete sa zhovárať? Nájdite ma na Twitteri a Linkedin

Tu je niekoľko ďalších príspevkov, ktoré som napísal