GAN-y: generator i dyskryminator
Teoria gier typu min–max, niestabilność trenowania GAN-ów, zapadanie się trybów, implementacja DCGAN.
GAN-y: generator i dyskryminator to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Czym jest GAN?
Generatywna sieć przeciwstawna stawia przeciwko sobie dwie sieci: generator, który tworzy fałszywe dane, oraz dyskryminator, który rozpoznaje dane prawdziwe i fałszywe. Sieci rywalizują ze sobą, a generator uczy się tworzyć przekonujące próbki.
Gra przeciwstawna
Proszę wyobrazić sobie fałszerza (generatora) i detektywa (dyskryminator). Fałszerz ulepsza podróbki, aby oszukać detektywa, a detektyw doskonali swoją spostrzegawczość. Ta rywalizacja napędza rozwój obu stron, aż podróbki zaczynają wyglądać jak prawdziwe.
Generator
Generator odwzorowuje losowy wektor szumu na fałszywy obraz. Uczy się przekształcać pozbawione znaczenia liczby losowe w uporządkowane dane, które wyglądają realistycznie.
class Generator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(100, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Tanh()
)
def forward(self, z):
return self.net(z)Wektor szumu
Wejściowe z jest próbkowane ze standardowego rozkładu normalnego. Różne wektory szumu generują różne obrazy, więc szum jest „ziarnem” generowania. Jego wymiar (tutaj 100) określa rozmiar latentny.
z = torch.randn(batch_size, 100)
fake_images = generator(z)Dyskryminator
Dyskryminator przyjmuje obraz i zwraca pojedyncze prawdopodobieństwo określające, jak bardzo jest on prawdziwy. Funkcja Sigmoid zwraca wartość z zakresu [0,1], gdzie 1 oznacza obraz prawdziwy, a 0 — fałszywy.
class Discriminator(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid()
)Uczenie dyskryminatora
Ucz dyskryminator D na partii prawdziwych obrazów oznaczonych wartością 1 oraz fałszywych obrazów oznaczonych wartością 0. Sieć uczy się zwiększać wyniki dla obrazów prawdziwych i zmniejszać je dla fałszywych za pomocą binarnej entropii krzyżowej.
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()Dlaczego stosować detach() dla fałszywych obrazów
Podczas uczenia D używamy fake.detach(), aby gradienty nie przepływały do generatora. Na tym etapie aktualizujemy wyłącznie dyskryminator; kolej generatora przychodzi osobno.
Uczenie generatora
Teraz ucz generator G, aby oszukiwał dyskryminator D: przepuść fałszywe obrazy przez D i nagradzaj generator, gdy D zwróci wynik prawdziwy (etykietę 1). Generator doskonali się, sprawiając, że D uznaje jego podróbki za prawdziwe.
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()Uczenie naprzemienne
W każdej iteracji wykonuje się naprzemiennie dwie czynności: najpierw aktualizuje się D, a następnie G. Utrzymanie względnej równowagi jest kluczowe: jeśli D stanie się zbyt silny, G nie otrzyma użytecznego gradientu; jeśli będzie zbyt słaby, G nie będzie mieć odpowiedniego wyzwania.
# per step
# 1) update Discriminator
# 2) update GeneratorZapadanie się trybów
Klasycznym problemem jest zapadanie się trybów: generator znajduje jeden lub kilka wyników, które oszukują D, i generuje wyłącznie je, ignorując różnorodność danych. Objaw jest charakterystyczny: każda wygenerowana próbka wygląda niemal identycznie.
Niestabilność uczenia
Modele GAN są wyjątkowo niestabilne: wartości strat oscylują, jedna sieć może zdominować drugą, a zbieżność jest trudna do uzyskania. Techniki takie jak LeakyReLU, starannie dobrane współczynniki uczenia i wygładzanie etykiet pomagają ustabilizować uczenie.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat GAN.
Podsumowanie: GAN
Poznano konfigurację przeciwstawną: generator przekształca wektor szumu w fałszywe dane, dyskryminator zwraca prawdopodobieństwo określające, czy dane są prawdziwe, a obie sieci uczą się poprzez naprzemienne aktualizowanie najpierw D, a następnie G. Poznano również sposób rozpoznawania zapadania się trybów oraz ogólnej niestabilności, która utrudnia uczenie modeli GAN.
Często zadawane pytania
Czy lekcja „GAN-y: generator i dyskryminator” jest bezpłatna?
Tak — pełny tekst „GAN-y: generator i dyskryminator” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „GAN-y: generator i dyskryminator”?
Teoria gier typu min–max, niestabilność trenowania GAN-ów, zapadanie się trybów, implementacja DCGAN. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „GAN-y: generator i dyskryminator”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Autoenkodery do uczenia reprezentacji
- Wariacyjne autoenkodery (VAE)
- GAN-y: generator i dyskryminator
- Warunkowe GAN-y i transfer stylu