GAN-verkot: generaattori ja diskriminaattori
Minimax-peliteoria, GAN-koulutuksen epävakaus, tilojen romahtaminen, DCGAN-toteutus.
GAN-verkot: generaattori ja diskriminaattori on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Mikä on GAN?
Generatiivinen adversaarinen verkko asettaa kaksi verkkoa vastakkain: generaattorin, joka luo keinotekoista dataa, ja diskriminaattorin, joka arvioi, onko data aitoa vai keinotekoista. Ne kilpailevat keskenään, ja generaattori oppii tuottamaan vakuuttavia otoksia.
Adversaarinen peli
Ajatelkaa väärentäjää (generaattoria) ja etsivää (diskriminaattoria). Väärentäjä parantaa väärennöksiä huijatakseen etsivää, ja etsivä terävöittää havaintokykyään. Tämä asevarustelukilpa kehittää molempia, kunnes väärennökset näyttävät aidoilta.
Generaattori
Generaattori muuntaa satunnaisen kohinavektorin keinotekoiseksi kuvaksi. Se oppii muuttamaan merkityksettömät satunnaisluvut rakenteiseksi ja realistisen näköiseksi dataksi.
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)Kohinavektori
Syöte z poimitaan standardinormaalijakaumasta. Erilaiset kohinavektorit tuottavat erilaisia kuvia, joten kohina toimii generoinnin "siemenenä". Sen ulottuvuus, tässä 100, on latenttikoko.
z = torch.randn(batch_size, 100)
fake_images = generator(z)Diskriminaattori
Diskriminaattori ottaa kuvan ja tuottaa yhden todennäköisyyden, joka ilmaisee, kuinka todennäköisesti kuva on aito. Sigmoid tuottaa arvon väliltä [0,1], jossa 1 tarkoittaa aitoa ja 0 keinotekoista.
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()
)Diskriminaattorin opettaminen
D:tä opetetaan erällä aitoja kuvia, joiden luokkana on 1, ja keinotekoisia kuvia, joiden luokkana on 0. Se oppii kasvattamaan aitojen kuvien pisteitä ja pienentämään keinotekoisten pisteitä binäärisen ristientropian avulla.
d_real = criterion(D(real), ones)
d_fake = criterion(D(fake.detach()), zeros)
d_loss = d_real + d_fake
d_loss.backward()Miksi fake-kuville tehdään detach()?
D:tä opetettaessa käytetään fake.detach()-kutsua, jotta gradientit eivät kulkeudu generaattoriin. Tässä vaiheessa päivitetään ainoastaan diskriminaattoria; generaattorin vuoro tulee erikseen.
Generaattorin opettaminen
Nyt G:tä opetetaan huijaamaan D:tä: keinotekoiset kuvat syötetään D:n läpi, ja generaattoria palkitaan, kun D antaa tulokseksi aidon kuvan (luokka 1). Generaattori kehittyy saamalla D:n uskomaan väärennöksiinsä.
g_loss = criterion(D(fake), ones) # want D to say "real"
g_loss.backward()
g_optimizer.step()Vuorotteleva opetus
Jokaisella iteraatiolla vuoro vaihtuu: ensin päivitetään D ja sitten G. On tärkeää pitää ne suurin piirtein tasapainossa. Jos D vahvistuu liikaa, G ei saa hyödyllistä gradienttia; jos D on liian heikko, G:llä ei ole riittävää haastetta.
# per step
# 1) update Discriminator
# 2) update GeneratorMode collapse
Klassinen ongelma on mode collapse: generaattori löytää yhden tai muutaman tuloksen, joilla D:n voi huijata, ja tuottaa vain niitä jättäen datan monimuotoisuuden huomiotta. Oireena on, että kaikki generoidut otokset näyttävät lähes identtisiltä.
Opetuksen epävakaus
GAN-mallit ovat tunnetusti epävakaita: häviöt vaihtelevat, toinen verkko voi päihittää toisen, ja konvergenssi on herkkää. LeakyReLU:n, huolellisesti valittujen oppimisnopeuksien ja label smoothing -menetelmän kaltaiset tekniikat auttavat vakauttamaan opetusta.
Pikatesti
Testatkaa ymmärrystänne GAN-malleista.
Kertaus: GAN-mallit
Opitte adversaarisen rakenteen: generaattori muuntaa kohinavektorin keinotekoisiksi näytteiksi, diskriminaattori tuottaa aidon ja keinotekoisen näytteen todennäköisyyden, ja ne opetetaan vuorotellen siten, että ensin päivitetään D ja sitten G. Opitte myös tunnistamaan mode collapse -ongelman sekä yleisen epävakauden, joka tekee GAN-mallien opettamisesta haastavaa.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 225
Usein kysytyt kysymykset
Onko oppitunti ”GAN-verkot: generaattori ja diskriminaattori” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “GAN-verkot: generaattori ja diskriminaattori”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”GAN-verkot: generaattori ja diskriminaattori”?
Minimax-peliteoria, GAN-koulutuksen epävakaus, tilojen romahtaminen, DCGAN-toteutus. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”GAN-verkot: generaattori ja diskriminaattori”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?
Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Autoenkooderit esitysten oppimiseen
- Variaatioautoenkooderit (VAE)
- GAN-verkot: generaattori ja diskriminaattori
- Ehdolliset GAN-verkot ja tyylinsiirto