GAN'er: generator og discriminator
Min-max-spilteori, ustabilitet i GAN-træning, mode collapse, implementering af DCGAN.
GAN'er: generator og discriminator er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lær AI med Python, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lær AI med Python-kurset indeholder 4 lektioner i alt.
Hvad er en GAN?
Et generativt adversarialt netværk sætter to netværk op mod hinanden: en generator, der skaber falske data, og en diskriminator, der afgør, om data er ægte eller falske. De konkurrerer, og generatoren lærer at producere overbevisende eksempler.
Det adversariale spil
Tænk på en falskner (generatoren) og en detektiv (diskriminatoren). Falskneren forbedrer sine forfalskninger for at narre detektiven, mens detektiven skærper sit blik. Dette kapløb driver dem begge til at blive bedre, indtil de falske data ser ægte ud.
Generatoren
Generatoren afbilder en tilfældig støjvektor til et falsk billede. Den lærer at omdanne meningsløse tilfældige tal til strukturerede data, der ser realistiske ud.
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)Støjvektoren
Inddataene z udtages fra en standardnormalfordeling. Forskellige støjvektorer giver forskellige billeder, så støjen er genereringens "startpunkt". Dens dimension (her 100) er den latente størrelse.
z = torch.randn(batch_size, 100)
fake_images = generator(z)Diskriminatoren
Diskriminatoren tager et billede og giver en enkelt sandsynlighed: hvor sandsynligt det er, at billedet er ægte. En Sigmoid giver en værdi i [0,1], hvor 1 betyder ægte, og 0 betyder falsk.
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()
)Træning af diskriminatoren
Træn D på et parti af ægte billeder med etiketten 1 og falske billeder med etiketten 0. Den lærer at presse scorerne for ægte billeder op og scorerne for falske billeder ned ved hjælp af binær krydsentropi.
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()Hvorfor bruge detach() på de falske data?
Når vi træner D, bruger vi fake.detach(), så gradienterne ikke løber ind i generatoren. I dette trin opdaterer vi kun diskriminatoren; generatoren får sin tur separat.
Træning af generatoren
Træn nu G for at narre D: Før de falske data gennem D, og beløn generatoren, når D giver uddataene værdien ægte (etiketten 1). Generatoren forbedres ved at få D til at tro på dens falske data.
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()Skiftevis træning
Hver iteration skifter mellem først at opdatere D og derefter G. Det er afgørende at holde dem nogenlunde afbalancerede: Hvis D bliver for stærk, får G ingen nyttig gradient; hvis den er for svag, har G ingen udfordring.
# per step
# 1) update Discriminator
# 2) update GeneratorModuskollaps
En klassisk fejl er moduskollaps: Generatoren finder ét eller nogle få resultater, der narrer D, og producerer kun dem, mens den ignorerer variationen i dataene. Tegnet er, at alle genererede eksempler ser næsten ens ud.
Ustabil træning
GAN'er er notorisk ustabile: Tabene svinger, det ene netværk kan overmande det andet, og konvergensen er skrøbelig. Teknikker som LeakyReLU, omhyggeligt valgte læringsrater og udjævning af etiketter hjælper med at stabilisere træningen.
Hurtig kontrol
Afprøv din forståelse af GAN'er.
Opsummering: GAN'er
Du lærte den adversariale opbygning: En generator omdanner en støjvektor til falske data, en diskriminator giver en sandsynlighed for ægte eller falsk, og de trænes ved at opdatere skiftevis D og derefter G. Du lærte også at genkende moduskollaps og den generelle ustabilitet, der gør GAN'er vanskelige at træne.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 53
- Lektioner
- 225
Ofte stillede spørgsmål
Er lektionen “GAN'er: generator og discriminator” gratis?
Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “GAN'er: generator og discriminator”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lær AI med Python-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “GAN'er: generator og discriminator”?
Min-max-spilteori, ustabilitet i GAN-træning, mode collapse, implementering af DCGAN. Du øver dig i Lær AI med Python med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lær AI med Python?
Der kræves ingen tidligere erfaring. Lær AI med Python på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “GAN'er: generator og discriminator”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lær AI med Python-lektion?
Ja. Alle Lær AI med Python-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Autoencodere til repræsentationslæring
- Variational autoencodere (VAE)
- GAN'er: generator og discriminator
- Betingede GAN'er og style transfer