Generatywna sieć przeciwstawna (Generative Adversarial Network, GAN) to architektura uczenia maszynowego zbudowana z dwóch sieci neuronowych, które grają przeciwko sobie. Pierwsza z nich, generator, próbuje tworzyć dane (np. obrazy twarzy) tak realistyczne, żeby uchodziły za prawdziwe. Druga, dyskryminator, dostaje na zmianę próbki prawdziwe i te wygenerowane, i ma za zadanie odróżnić jedne od drugich. Trenują się jednocześnie: generator uczy się oszukiwać, dyskryminator uczy się nie dać się oszukać. Pomysł opisał Ian Goodfellow z zespołem w 2014 roku i przez kilka lat GAN-y były synonimem generatywnej grafiki.
Jak to działa
Cały trik polega na sprzężeniu zwrotnym. Generator startuje od losowego szumu i produkuje śmieci. Dyskryminator bez trudu je wyłapuje, a sygnał o błędzie (gradient) wraca do generatora, który dzięki temu poprawia kolejne próby. To gra o sumie zerowej: im lepszy dyskryminator, tym ostrzejszy nauczyciel dla generatora. W teorii dochodzicie do równowagi Nasha, w której generator produkuje dane nieodróżnialne od prawdziwych, a dyskryminator zgaduje z trafnością 50%.
Do czego to służy? Generowanie i podrasowywanie obrazów, super-resolution (powiększanie zdjęć bez rozmycia), zamiana szkicu na fotorealistyczny render, tworzenie danych syntetycznych do trenowania innych modeli, a także — niestety — deepfake’i.
Przykład z praktyki
Najbardziej znana rodzina to StyleGAN od NVIDII, która stoi za stroną „This Person Does Not Exist”. Jeśli chcesz pobawić się sam, gotowe implementacje znajdziesz w PyTorchu — repo NVlabs/stylegan3 albo lżejsze lucidrains/stylegan2-pytorch. Instalacja i odpalenie treningu na własnym zbiorze zdjęć to dosłownie:
pip install stylegan2_pytorchstylegan2_pytorch --data ./moje_zdjecia
Po kilku godzinach (i sporej GPU) dostajesz próbki generowane z losowego wektora z. Do prostych eksperymentów dydaktycznych w sam raz jest klasyczny DCGAN na zbiorze MNIST — trenuje się szybko i od razu widać, jak z szumu wyłaniają się cyfry.
Na co uważać
GAN-y mają opinię kapryśnych i nie bez powodu. Najczęstszy problem to mode collapse — generator znajduje jeden obrazek, który zawsze oszukuje dyskryminatora, i produkuje w kółko niemal to samo. Drugi to niestabilny trening: jedna sieć przytłacza drugą i nauka się rozjeżdża. Pomagają sztuczki w stylu WGAN-GP, spectral normalization czy zwykłe pilnowanie balansu uczenia obu sieci.
Mit do obalenia: GAN to nie „sztuczna inteligencja, która rozumie obrazy”. To statystyczny falsyfikator. I drugi: od 2022 roku w generatywnej grafice prym wiodą modele dyfuzyjne (Stable Diffusion, DALL-E), więc GAN nie jest już domyślnym wyborem — ale wciąż wygrywa tam, gdzie liczy się szybkość generowania.
Pojęcia powiązane: generator, dyskryminator, modele dyfuzyjne (diffusion models), autoenkoder wariacyjny (VAE), deepfake, sieci neuronowe, uczenie nienadzorowane.