Przejdź do treści
coden

Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw

Gra generatora i dyskryminatora, GAN napisany od zera, nienasycająca się strata, osiem skupisk na okręgu i kolaps modów, cyfry ostrzejsze niż w VAE, ale nie wszystkie, oraz droga od GAN do modeli dyfuzyjnych.

12 minut Matěj Žalmánek 2026-10-16

Seria Podstawy AI Część 45 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Jak generator uczy się wyłącznie z gradientu dyskryminatora.
  • Dlaczego uczenie GAN jest niestabilne i czym jest kolaps modów.
  • W czym GAN wygrywa z VAE, w czym przegrywa i dlaczego zastąpiła je dziś dyfuzja.

Warto wiedzieć wcześniej: Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej, Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search

Autoenkoder wariacyjny z poprzedniej części generuje rzetelnie, ale rozmyte obrazy. W 2014 roku Ian Goodfellow wpadł na pomysł, który wygląda niemal jak sztuczka: nie będziemy mierzyć, jak bardzo próbka różni się od danych, tylko pozwolimy to ocenić innej sieci. Dwie sieci grają w grę — jedna podrabia, druga rozpoznaje podróbkę — i obie przy tym stają się lepsze. Tak powstały pierwsze maszynowo wygenerowane twarze, których nie odróżnisz od zdjęć. W tej części napiszemy obie sieci od zera i zobaczymy, dlaczego ich uczenie jest tak kapryśne.

Nawiązuje do części Wariacyjne autoenkodery, Regresja logistyczna (sigmoida i entropia krzyżowa) oraz Gry i przeciwnik.

1. Fałszerz i detektyw

Definicja — generatywna sieć przeciwstawna (GAN)

GAN (Ian Goodfellow i in., 2014) składa się z dwóch sieci. Generator G przekształca losowy szum z ~ N(0, I) w próbkę G(z). Dyskryminator D zwraca prawdopodobieństwo D(x), że x pochodzi z prawdziwych danych. Grają w grę dwóch graczy o sumie zerowej:

minG maxD Ex ~ data[log D(x)] + Ez[log(1 − D(G(z)))].

Dla ustalonego G najlepszy dyskryminator to D*(x) = pdata(x) / (pdata(x) + pG(x)). W równowadze G generuje dokładnie rozkład danych, a D wszędzie zwraca ½.

Mówiąc prościej

Fałszerz drukuje banknoty, detektyw sortuje je na prawdziwe i fałszywe. Detektyw uczy się na tym, gdzie się pomylił. Fałszerz nigdy nie widział prawdziwego banknotu — uczy się tylko z tego, co go zdradziło przed detektywem. Gdy obaj się poprawiają, podróbki są coraz lepsze. Koniec gry: detektyw może tylko zgadywać i zgaduje pół na pół.

minG maxD   Ex ~ data[ log D(x) ] + Ez ~ N(0, I)[ log(1 − D(G(z))) ]

Ex ~ data[log D(x)]
dyskryminator na prawdziwych danych — jest największy (0), gdy D daje prawdziwym próbkom 1; logarytm karze pewny siebie błąd (D → 0) bez ograniczeń
Ez[log(1 − D(G(z)))]
dyskryminator na podróbkach — jest największy, gdy daje im 0; to jedyny człon, w którym występuje G, więc generator uczy się tylko z niego
maxD
dyskryminator zwiększa wartość — oba człony razem to ujemna binarna entropia krzyżowa, więc jest to zwykłe uczenie klasyfikatora „prawdziwe / podróbka”
minG
generator zmniejsza wartość — chce, by dyskryminator mylił się na podróbkach; co jeden gracz zyska, drugi traci (suma zerowa)
Wartość gry V(D, G); obie wartości oczekiwane szacuje się podczas uczenia średnią z partii.
Twierdzenie — najlepszy dyskryminator i co minimalizuje generator

Dla ustalonego G wartość gry wynosi ∫ [pdata(x) log D(x) + pG(x) log(1 − D(x))] dx. W każdym punkcie x maksymalizujemy funkcję a log y + b log(1 − y) dla y ∈ (0, 1), gdzie a = pdata(x), b = pG(x).

Dowód. Pochodna a/y − b/(1 − y) zeruje się dla y = a/(a + b), a funkcja jest wklęsła (druga pochodna −a/y² − b/(1 − y)² < 0), więc jest to maksimum. Stąd D*(x) = pdata(x) / (pdata(x) + pG(x)). Po podstawieniu i przekształceniu (Goodfellow i in., 2014):

V(D*, G) = −log 4 + 2 · JSD(pdata ‖ pG),   JSD(p ‖ q) = ½ KL(p ‖ m) + ½ KL(q ‖ m),   m = ½(p + q).

Dywergencja Jensena–Shannona jest nieujemna i równa zeru dokładnie wtedy, gdy pG = pdata. Przy najlepszym dyskryminatorze generator minimalizuje więc JSD, a minimum −log 4 ≈ −1,386 osiąga, gdy generuje dokładnie dane. ∎

Przykład: tam, gdzie gęstość danych wynosi 0,3, a podróbek 0,1, jest D* = 0,3 / 0,4 = 0,75 (punkt jest raczej prawdziwy); gdzie generator przesadzi (dane 0,1, podróbki 0,3), jest D* = 0,25. Tam, gdzie gęstości są równe, D* = ½, a strata dyskryminatora (binarna entropia krzyżowa na jedną próbkę) wynosi ln 2 ≈ 0,693.

Dyskryminator to zwykły klasyfikator z sigmoidą i entropią krzyżową, jak regresja logistyczna, tylko z dodatkowymi warstwami. Cała magia tkwi w generatorze: gradient jego straty przepływa propagacją wsteczną przez dyskryminator aż do obrazu, a stamtąd do wag generatora. Dyskryminator mówi mu w ten sposób, w którą stronę przesunąć każdy piksel, żeby wyglądał wiarygodniej.

2. Uczenie: kroki na zmianę

Uczenie odbywa się na zmianę: krok dyskryminatora (partia prawdziwych danych i partia podróbek, zwiększyć D na prawdziwych, zmniejszyć na fałszywych), potem krok generatora (przesunąć podróbki tam, gdzie D uważa je za prawdziwe). Obie sieci mają u nas dwie warstwy ukryte z leaky ReLU i uczą się Adamem.

Definicja — nienasycająca się strata generatora

Zamiast minimalizować log(1 − D(G(z))) z pierwotnej gry, generator uczy się maksymalizować log D(G(z)), czyli minimalizować −log D(G(z)). Obie straty mają ten sam cel, ale inny gradient: jeśli D = σ(s), to |∂ log(1 − D)/∂s| = D, podczas gdy |∂(−log D)/∂s| = 1 − D. Zaproponowali ją już Goodfellow i in. w tym samym artykule.

Mówiąc prościej

Na początku podróbki są kiepskie i detektyw łatwo je demaskuje, D jest dla nich bliskie zeru. Pierwotna strata nie wysyła wtedy prawie żadnego sygnału — fałszerz nie dowie się, co poprawić, akurat wtedy, gdy potrzebuje tego najbardziej. Odwrócone pytanie („jak przekonać detektywa”) daje silny sygnał od samego początku.

∂/∂s log(1 − σ(s)) = −D,    ∂/∂s (−log σ(s)) = −(1 − D)

s
logit — wyjście dyskryminatora przed sigmoidą; różniczkujemy względem niego, bo stąd gradient płynie z powrotem do dyskryminatora, a przez niego do podróbki
D = σ(s)
prawdopodobieństwo, że podróbka jest prawdziwa; korzysta się z σ′(s) = σ(s)(1 − σ(s)), dlatego wychodzą tak proste wyrażenia
log(1 − σ(s))
pierwotna strata generatora (minimalizowana) — jej gradient ma wielkość D, więc gdy dyskryminator pewnie zdemaskuje podróbkę (D ≈ 0), jest prawie zerowy: nasycenie
−log σ(s)
nienasycająca się strata — gradient ma wielkość 1 − D, czyli największą właśnie dla podróbek, które dyskryminator zdemaskował
Przy D = 0,01 pierwotna strata daje gradient 0,01, nienasycająca się 0,99 — dziewięćdziesiąt dziewięć razy więcej. Obie straty maleją, gdy D rośnie, więc mają ten sam cel. Kolory odpowiadają krzywym na wykresie poniżej.
00,51 00,250,50,751 początek uczenia D(G(z)) — prawdopodobieństwo, że podróbka jest prawdziwa (0–1) gradient |∂strata/∂s| (0–1)
Siła sygnału dla generatora w zależności od tego, jak bardzo dyskryminator wierzy podróbce pierwotna log(1 − D) nienasycająca się −log D

Szczerze mówiąc: w naszych małych eksperymentach uczyła się także pierwotna strata, bo dyskryminator nie był na początku tak pewny siebie. W dużych sieciach na obrazach, gdzie dyskryminator szybko wygrywa, różnica jest zasadnicza. Dalej używamy nienasycającej się straty.

Jak gradient dociera aż do generatora, pokazuje reguła łańcuchowa. Podróbka x = G(z) jest dla dyskryminatora tylko wejściem, więc propagacja wsteczna nie musi się na niej zatrzymać:

∂LG / ∂θG = ∂LG / ∂s · ∂s / ∂x · ∂x / ∂θG

∂LG / ∂s
jedna liczba ze straty, dla nienasycającej się −(1 − D) — „jak bardzo” podróbka ma się poprawić
∂s / ∂x
gradient dyskryminatora względem jego wejścia (dla okręgu 2 liczby, dla cyfry 64) — „w którą stronę” przesunąć każdą współrzędną, by podróbka wyglądała prawdziwiej; wagi dyskryminatora w tym kroku się nie zmieniają
∂x / ∂θG
zwykła propagacja wsteczna przez generator — przekłada pożądane przesunięcie podróbki na zmianę wag generatora
Generator nigdy nie widzi danych; jedyna informacja o nich przychodzi przez środkowy człon.
Definicja — strata dyskryminatora i softplus

Dyskryminator zwraca logit s, a D = σ(s). Dla prawdziwej próbki z logitem sr i podróbki z logitem sf jego strata to binarna entropia krzyżowa

LD = −log σ(sr) − log(1 − σ(sf)) = softplus(−sr) + softplus(sf),   softplus(u) = ln(1 + eu),

ponieważ −log σ(s) = ln(1 + e−s) i 1 − σ(s) = σ(−s). Program liczy softplus z logitu, a nie z D: dla s = 40 jest σ(s) w arytmetyce zmiennoprzecinkowej dokładnie 1 i log(1 − D) wyszedłby −∞, podczas gdy softplus(40) ≈ 40. Gradienty: ∂LD/∂sr = σ(sr) − 1, ∂LD/∂sf = σ(sf).

for t in range(kroku):
    # 1. krok dyskryminatora: prawdziwe → 1, podróbki → 0
    gD = 0
    for _ in range(davka):
        x = nahodny_vzorek(data)
        gD += D.zpet(D(x), dL_ds=sigmoid(D(x)) - 1)
        f = G(sum())                           # podróbka, G się teraz nie uczy
        gD += D.zpet(D(f), dL_ds=sigmoid(D(f)))
    adam_D(gD / davka)
    # 2. krok generatora: gradient przechodzi przez D aż do podróbki
    gG = 0
    for _ in range(davka):
        x = G(sum())
        dL_ds = sigmoid(D(x)) - 1              # nienasycająca się −log σ(s)
        dL_dx = D.zpet_do_vstupu(dL_ds)        # wagi D bez zmian
        gG += G.zpet(dL_dx)
    adam_G(gG / davka)                         # Adam z β₁ = 0,5 jak w DCGAN

3. Osiem skupisk na okręgu

Klasyczny eksperyment: dane to punkty z ośmiu małych skupisk o rozkładzie normalnym (σ = 0,05) rozmieszczonych na okręgu o promieniu 2. Generator dostaje dwuwymiarowy szum i zwraca punkt na płaszczyźnie. Mierzymy jakość (odsetek próbek w odległości do 3σ od któregoś środka) i pokrycie (do ilu skupisk trafia co najmniej 2 % próbek).

Definicja — dane, jakość i pokrycie

Środki skupisk to cj = (r cos(2πj/8), r sin(2πj/8)) dla j = 0, …, 7 przy r = 2; punkt danych to cj z losowym j plus szum N(0, σ²I), σ = 0,05. Dla próbek x1, …, xn generatora:

jakość = (1/n) · #{i : minj ‖xi − cj‖ < 3σ},   pokrycie = #{j : nj ≥ 0,02 · n},

gdzie nj to liczba próbek w odległości do 3σ od środka cj. Liczby: 3σ = 0,15, sąsiednie środki są od siebie oddalone o 2r sin(π/8) ≈ 1,53, czyli ponad dziesięć razy dalej. Migawki mają n = 400 próbek, więc skupisko liczy się jako pokryte od 8 próbek.

Nawet doskonały generator nie ma jakości 100 %: odległość punktu od środka dwuwymiarowego rozkładu normalnego ma rozkład Rayleigha i do 3σ trafia odsetek 1 − e−9/2 ≈ 0,989, czyli około 98,9 %.

prawdziwe dane krok 500 krok 2 000 krok 8 000 współrzędna x₁ (bez jednostki) x₂ (bez jednostki)
Prawdziwe dane i próbki generatora w trakcie uczenia (przebieg z ziarnem 2)

Po 500 krokach generator wytwarza rozmytą chmurę (jakość 6 %), po 2 000 krokach punkty skupiają się w 6 skupiskach, a na końcu (krok 8 000) pokrywa wszystkie 8 z jakością 73 %. Generator nigdy nie widział ani jednego prawdziwego punktu — wszystkiego dowiedział się z gradientu dyskryminatora.

4. Kolaps modów

Definicja — kolaps modów (mode collapse)

Generator wytwarza tylko część rozkładu danych — kilka modów (skupisk, rodzajów obrazów), a resztę pomija. Strata nie karze tego bezpośrednio: dyskryminator ocenia każdą próbkę osobno, a dobra podróbka jednego rodzaju jest dla niego tak samo przekonująca jak różnorodna kolekcja. Przy całkowitym kolapsie generator dla każdego z wytwarza niemal to samo.

Mówiąc prościej

Fałszerz odkrywa, że detektyw najgorzej rozpoznaje fałszywe setki. Drukuje więc tylko setki. Detektyw z czasem to zauważa i zaczyna podejrzewać setki — fałszerz przeskakuje na dwusetki. Gra kręci się w kółko, a fałszerz nigdy nie wytwarza wszystkich banknotów naraz.

Twierdzenie — przeciw ustalonemu dyskryminatorowi najlepszy jest jeden punkt

Dla ustalonego D strata generatora LG = Ez[−log D(G(z))] ≥ −log D(x*), gdzie x* to punkt, w którym D jest największe. Równość zachodzi dla generatora, który każde z wysyła do x*.

Dowód. Dla każdego z jest D(G(z)) ≤ D(x*), a ponieważ −log jest malejący, −log D(G(z)) ≥ −log D(x*); wartość oczekiwana zachowuje nierówność. ∎

Strata jest średnią po pojedynczych próbkach i nic w niej nie nagradza różnorodności. Przeciw ustalonemu przeciwnikowi całkowity kolaps jest więc optymalny; powstrzymuje go tylko to, że dyskryminator reaguje i zaczyna podejrzewać miejsce x*. Jeśli generator przeskoczy szybciej, niż dyskryminator zapomni, gra kręci się w kółko. Dlatego pomagają modyfikacje, które dają dyskryminatorowi wgląd w całą partię (minibatch discrimination, Tim Salimans i in., 2016), albo inna odległość między rozkładami (Wasserstein, niżej).

Ta sama sieć, te same dane, te same ustawienia — tylko inne losowe ziarno:

ziarnopokryte skupiska po krokach 1 000 … 8 000na końcujakość na końcu
10 · 2 · 7 · 6 · 6 · 7 · 7 · 77 z 866 %
24 · 5 · 8 · 8 · 8 · 8 · 8 · 88 z 873 %
31 · 4 · 4 · 4 · 5 · 5 · 5 · 55 z 854 %
40 · 5 · 6 · 6 · 6 · 6 · 6 · 66 z 849 %
ziarno 1: 7 z 8 ziarno 3: 5 z 8 ziarno 4: 6 z 8 współrzędna x₁ (bez jednostki) x₂ (bez jednostki)
Koniec uczenia w pozostałych przebiegach (pełne kółko = pokryte skupisko)

Tylko jeden z czterech przebiegów pokrył wszystkie osiem skupisk. Przebieg z ziarnem 3 skończył na 5 i od kroku 5 000 już się nie ruszył. To typowe dla GAN: uczenie nie ma jednej straty, która by malała, tylko grę dwóch graczy, a wynik zależy od przypadku bardziej, niż byśmy chcieli.

5. Cyfry: ostrzejsze, ale nie wszystkie

Teraz te same cyfry 8 × 8 co przy VAE. Generator: ośmiowymiarowy szum → 64 → 64 → 64 piksele z sigmoidą; dyskryminator lustrzanie. 6 000 kroków, dwa przebiegi z różnym ziarnem. Jakość mierzymy tak samo jak w poprzedniej części — odległością próbki od najbliższej cyfry treningowej.

GAN, ziarno 1 GAN, ziarno 2 VAE (poprzednia część)
Pierwsze dziesięć próbek (kod / szum o 8 wymiarach)

Próbki GAN są ostrzejsze: odległość 0,049 i 0,042 wobec 0,054 dla VAE (prawdziwe cyfry 0,017). GAN nie karze rozmycia uśrednianiem jak strata rekonstrukcji VAE — rozmyty obraz dyskryminator łatwo rozpozna. Tylko których cyfr i ile generator wytwarza?

020406080 0 1 2 3 4 5 6 7 8 9 cyfra (0–9) liczba próbek (z 200)
Ile razy każda cyfra wśród 200 próbek (według najbliższej cyfry treningowej) ziarno 1ziarno 2 równomiernie (20)

W danych każdej cyfry jest tyle samo. Przebieg z ziarnem 2 wytwarza przy tym głównie szóstki (69 z 200), ósemki i trójki, a cyfr 0, 1, 2, 4, 7 prawie wcale (najwyżej 3 próbki). Przebieg z ziarnem 1 jest bardziej różnorodny, ale i tam cyfry 0, 4, 9 mają mniej niż połowę swojego udziału (najwyżej 6 próbek zamiast 20). To ten sam kolaps modów co na okręgu, tylko na obrazach: GAN wygrywa ostrością, VAE pokryciem.

6. Od GAN do dyfuzji

  • DCGAN (Alec Radford i in., 2015) pokazał, jak budować konwolucyjne GAN, które da się niezawodnie uczyć na zdjęciach.
  • Wasserstein GAN (Martin Arjovsky i in., 2017) zastąpił klasyfikator „krytykiem”, który mierzy odległość między rozkładami; uczenie jest stabilniejsze i mniej podatne na kolaps modów.
  • StyleGAN (Tero Karras i in., Nvidia, 2018–2020) generuje fotorealistyczne twarze w rozdzielczości 1024 × 1024 — znana strona „this person does not exist”.
  • Około 2021 roku GAN wyprzedziły modele dyfuzyjne (Prafulla Dhariwal i Alex Nichol: „Diffusion Models Beat GANs on Image Synthesis”). Są wolniejsze, ale uczą się stabilnie i pokrywają cały rozkład. Idea dyskryminatora żyje jednak dalej — jako pomocnicza strata, która dodaje obrazom ostrości, na przykład w koderach obrazu lub dźwięku.

Dlaczego Wasserstein pomaga, widać na najprostszym przykładzie (uproszczona wersja przykładu z artykułu Arjovsky i in., 2017): dane to jeden punkt 0, generator wytwarza jeden punkt θ. Dopóki θ ≠ 0, rozkłady się nie nakładają i JSD = ln 2 ≈ 0,693 bez względu na to, jak daleko jest θ — gradient względem θ jest zerowy, a generator nie wie, dokąd iść. Odległość Wassersteina wynosi |θ|, więc wskazuje kierunek nawet z dużej odległości.

W(pdata, pG) = sup‖f‖L ≤ 1 ( Ex ~ data[f(x)] − Ez[f(G(z))] )

sup‖f‖L ≤ 1
krytyk f — sieć, która zamiast prawdopodobieństwa zwraca dowolną liczbę; warunek „1-lipschitzowska” (|f(a) − f(b)| ≤ ‖a − b‖) nie pozwala mu rozróżniać dwóch bliskich punktów dowolnie ostro, inaczej różnica mogłaby rosnąć do nieskończoności
Edata[f(x)]
średnia ocena prawdziwych danych — krytyk chce, by była jak największa
Ez[f(G(z))]
średnia ocena podróbek — krytyk chce, by była jak najmniejsza, generator jak największa; różnica jest ciągła względem parametrów generatora, więc gradient nie znika, nawet gdy rozkłady się nie nakładają
Dualność Kantorowicza–Rubinsteina: najmniejsza „praca” potrzebna do przeniesienia masy jednego rozkładu na drugi jest równa największej różnicy średnich po funkcjach 1-lipschitzowskich. W przykładzie wyżej wystarczy f(x) = −x · sgn θ, a różnica wynosi |θ|.

7. Podsumowanie

  • GAN = generator i dyskryminator w grze; generator uczy się tylko z gradientu, który przesyła mu dyskryminator.
  • Nienasycająca się strata −log D(G(z)) daje generatorowi silny sygnał nawet na początku, gdy dyskryminator wygrywa.
  • Na ośmiu skupiskach wszystkie pokrył tylko jeden z czterech przebiegów (7, 8, 5, 6); wynik mocno zależy od przypadku.
  • Na cyfrach próbki są ostrzejsze niż w VAE (0,042 wobec 0,054), ale niektórych cyfr brakuje — kolaps modów.
  • Dziś obrazy generują głównie modele dyfuzyjne; dyskryminator pozostał jako pomocnik od ostrości.

Chcesz sam spróbować? Poproś agenta AI, żeby nauczył mały GAN na ośmiu skupiskach na okręgu i uruchomił go pięć razy z różnym ziarnem. Potem niech spróbuje Wasserstein GAN z tą samą siecią i porówna, ile skupisk za każdym razem pokrywa.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu