GANy, czyli Generative Adversarial Networks pierwszy raz zostały zaproponowane przez studentów University of Montreal Iana Goodfelllow oraz innych (m. in. Yoshua Bengio) w 2014 roku. W 2016 roku dyrektor ds. badań nad AI w Facebook oraz profesor na New York University Yann LeCun nazwał je najbardziej interesującym pomysłem ostatnich 10. lat uczenia maszynowego.

 

Rys. 1. Wygenerowanie zdjęcia sypialni z bazy LSUN. Po lewej: zdjęcia wygenerowane przez sieć DCGAN. Po prawej: zdjęcia wygenerowane przez sieć EBGAN-PT


 

Aby zrozumieć czym są GANy, należy je porównać z algorytmami dyskryminującymi, którymi mogą być chociażby zwykłe głębokie sieci neuronowe DNN (oczywiście w zależności od zadania).

Dla przykładu skorzystajmy z problemu przewidzenia tego czy dany e-mail to spam czy nie. Słowa składające się na treść e-maila są zmiennymi, które wskazują na jedną z etykiet: spam, nie spam. Algorytm dyskryminujący na podstawie wektora danych wejściowych (słowa występujące w danej wiadomości są przekształcane na reprezentacje matematyczną) uczy się przewidywać jak bardzo dany e-mail jest spamem, tzn. wyjściem dyskryminatora jest prawdopodobieństwo jak bardzo dane wejściowe są spamem, zatem uczy się relacji pomiędzy wejściem a wyjściem.

GANy działają dokładnie na odwrót. Zamiast przewidywać co reprezentują dane wejściowe próbują przewidywać dane mając etykietę. Dokładniej próbują one odpowiedzieć na pytanie: Zakładając, że ten e-mail to spam, jak prawdopodobne są te dane?

Wyrażając się bardziej precyzyjnie, zadaniem Generative Adversarial Networks jest rozwiązanie problemu modelowania generatywnego (z ang. generative modeling), który można zrobić na 2 sposoby (zawsze potrzebujemy danych o dużej rozdzielczości, np. obrazy lub dźwięk). Pierwszą możliwością jest estymacja gęstości – mając dużą ilość przykładów chcemy znaleźć funkcję prawdopodobieństwa gęstości, która je opisuje. Drugie podejście to stworzenie algorytmu, który nauczy się generować dane z tego samego zbioru danych treningowych (nie chodzi bynajmniej o tworzenie tych samych informacji a nowych, które mogłyby być nimi).

 

Jakie jest podejście GANów do modelowania generatywnego?


 

To podejście można porównać do gry, w którą gra dwóch agentów. Jeden z nich to generator, który próbuje tworzyć dane, drugi to dyskryminator, który przewiduje czy te dane są prawdziwe czy nie. Celem generatora jest oszukanie drugiego gracza, zatem z czasem, gdy obie stają się coraz lepsze w swoim zadaniu jest on zmuszony generować dane, które są jak najbardziej prawdopodobne do danych treningowych.

 

Jak wygląda proces uczenia?


 

Pierwszy agent – czyli dyskryminator (jest on jakąś różniczkowalną funkcją D, zazwyczaj siecią neuronową) dostaje na wejście jedną z danych treningowych (np. zdjęcie twarzy). Dalej nazywamy to zdjęcie x (jest to po prostu nazwa wejścia do modelu) i jego celem jest, aby D(x) było jak najbliższe 1 – co znaczy, że x jest prawdziwym przykładem.

Drugi agent – czyli generator (który też musi być różniczkowalną funkcją G, również jest zazwyczaj siecią neuronową) otrzymuje na wejście biały szum z (losowe wartości, które pozwalają mu na generowanie różnych, prawdopodobnych zdjęć). Następnie stosując funkcję G do szumu z otrzymujemy x (innymi słowy G(z) = x). Liczymy na to, że próbka x będzie dość podobna do oryginalnych danych treningowych, jednak ma pewnego rodzaju problemy jak np. zauważalne zaszumienie, co może pozwolić na rozpoznanie tej próbki jako fałszywy przykład przez dyskryminator. Kolejnym krokiem jest zastosowanie funkcji dyskryminującej D do fałszywej próbki x z generatora. Teraz celem D jest sprawienie, żeby D(G(z)) było jak najbliżej zera, natomiast celem G jest aby D(G(z)) było blisko jedynki.

Można to porównać do przykładu fałszerzy pieniędzy oraz policji. Policjanci chcą, aby społeczeństwo mogło posługiwać się prawdziwymi banknotami bez możliwości bycia oszukanymi oraz wykryć te fałszywe, a następnie usunąć je z obiegu i ukarać przestępców. W tym samym czasie fałszerze chcą oszukać policję i używać stworzone przez siebie pieniądze. Co za tym idzie – obydwa środowiska, policjantów oraz złodziei, uczą się wykonywać swoje zadanie coraz lepiej.

Zakładając, że przykładowe możliwości policjantów i fałszerzy, czyli dyskryminatora i generatora są nieograniczone to punkt równowagi tej gry jest następujący: generator nauczył się tworzyć idealne dane, których nie da się rozróżnić, co za tym idzie wynik dyskryminatora to zawsze 0.5 – to znaczy nie potrafi on powiedzieć czy dana próbka jest prawdziwa czy nie.

 

Jakie są zastosowania GANów?


Sieci te przede wszystkim są szeroko wykorzystywane do operacji nad obrazami. Nie jest to ich jedyne zastosowanie, ponieważ równie dobrze można ich używać do jakiegokolwiek rodzaju danych.

Rys. 2. Style Transfer w wykonaniu CycleGAN


 

Na przykład sieć DiscoGAN potrafi przetransferować styl lub wzór z jednej dziedziny (np. torebki) do innej (np. buta) lub ze szkicu przedmiotu wygenerować prawdopodobny obraz (jest wiele sieci, które to też potrafią, jedną z nich jest Pix2Pix). Jest to jedno z częstszych zastosowań GANów, tzw. Style Transfer. Innymi przykładami tego zastosowania jest np. sieć CycleGAN, która zwykłe zdjęcie potrafi przełożyć na obraz Van Gogha, Moneta, itd. Pozwalają one także na generowanie zdjęć z opisu (sieć StackGAN) oraz potrafią zwiększać rozdzielczość obrazów (sieć SRGAN).

 
Przydatne źródła:
Bibliografia: