Oppikaa tekoälyä Pythonilla · Oppitunti

Variaatioautoenkooderit (VAE)

ELBO-häviö, uudelleenparametrisointitemppu, latenttitilan tutkiminen, kuvien luominen VAE:lla.

Oppitunti 2/413 vaihetta

Variaatioautoenkooderit (VAE) on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Autoenkooderista VAE-malliin

Tavallinen autoenkooderi oppii hajallaan olevia pisteitä, joten uusien pisteiden otanta tuottaa roskaa. Variaatioautoenkooderi (VAE) oppii tasaisen, jatkuvan latenttiavaruuden, josta voidaan ottaa otoksia, ja muuttaa sen todelliseksi generatiiviseksi malliksi.

Koodaus jakaumaksi

Yhden pisteen sijaan VAE:n enkooderi tuottaa jokaiselle syötteelle jakauman: keskiarvon mu ja logaritmisen varianssin log_var. Kukin syöte kuvautuu latenttiavaruuden pienelle epätarkalle alueelle, ei yksittäiseksi pisteeksi.

class Encoder(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(784, 256)
        self.fc_mu = nn.Linear(256, 64)
        self.fc_logvar = nn.Linear(256, 64)

Miksi mu ja log_var?

Ennustamme log_var-arvon suoraan varianssin sijaan, koska se voi saada minkä tahansa reaalilukuarvon eikä sen tarvitse täyttää positiivisuusrajoitetta. Eksponentointi palauttaa varianssin tarvittaessa.

    def forward(self, x):
        h = torch.relu(self.fc(x))
        return self.fc_mu(h), self.fc_logvar(h)

Latentin z:n otanta

Dekoodausta varten z:stä on otettava otos ennustetusta jakaumasta. Naiivi satunnaisotanta ei kuitenkaan ole derivoituva, joten sen läpi ei voida laskea takaisinsyöttöä. Uudelleenparametrisointikikka ratkaisee tämän ongelman.

Uudelleenparametrisointikikka

Kirjoittakaa otos muotoon z = mu + eps * exp(0.5 * log_var), jossa eps on satunnaista kohinaa. Nyt satunnaisuus on eps-arvossa, joka ei tarvitse gradienttia, ja gradientit kulkevat arvojen mu ja log_var kautta.

def reparameterize(mu, log_var):
    std = torch.exp(0.5 * log_var)
    eps = torch.randn_like(std)
    return mu + eps * std

Dekooderi

Dekooderi ottaa otoksena saadun z-arvon ja rekonstruoi kuvan tavallisen autoenkooderin dekooderin tapaan. Se laajentaa 64 ulottuvuutta takaisin 784 pikseliksi Sigmoid-ulostulon avulla.

decoder = nn.Sequential(
    nn.Linear(64, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Sigmoid()
)

Rekonstruktiohäviön termi

VAE:n häviön ensimmäinen puolisko on rekonstruktio: kuinka hyvin dekoodattu kuva vastaa syötettä. Pikseleille käytetään binääristä ristientropiaa (tai MSE:tä).

recon_loss = nn.functional.binary_cross_entropy(
    recon, x, reduction="sum"
)

KL-divergenssin termi

Toinen puolisko on KL-divergenssi, joka vetää jokaisen koodatun jakauman kohti standardinormaalijakaumaa. Tämä regularisoi latenttiavaruutta niin, että siitä tulee tasainen ja jatkuva ja että generointi on mahdollista.

kl = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())

ELBO-tavoite

VAE-mallit maksimoivat ELBO:n (evidenssin alarajan), mikä vastaa koodin reconstruction + KL minimointia. Rekonstruktio tekee tuloksista uskollisia, kun taas KL pitää avaruuden hyvämuotoisena. Näiden kahden tasapainottaminen on koko menetelmän ydin.

loss = recon_loss + kl
loss.backward()

Uusien kuvien generointi

Koska latenttiavaruus vastaa standardinormaalijakaumaa, voitte generoida täysin uusia kuvia ottamalla z:stä otoksen jakaumasta N(0,1) ja dekoodaamalla sen. Syötekuvaa ei tarvita.

with torch.no_grad():
    z = torch.randn(16, 64)
    new_images = decoder(z)  # 16 generated samples

Miksi VAE-mallit ovat tärkeitä?

VAE-mallit tarjoavat perustellun ja tasaisen latenttiavaruuden, jossa voidaan interpoloida ja josta voidaan ottaa otoksia. Ne muodostavat monien generatiivisten tekniikoiden perustan ja opettavat jakaumien, eivät vain pisteiden, oppimisen perusidean.

Pikatesti

Testatkaa ymmärrystänne VAE-malleista.

Kertaus: variaatioautoenkooderit

Opitte VAE-mallin perusteet: enkooderi tuottaa arvot mu ja log_var, uudelleenparametrisointikikka z = mu + eps * exp(0.5 * log_var) pitää otannan derivoituvana, ja häviö on ELBO = reconstruction + KL. Kun z:stä otetaan otos jakaumasta N(0,1) ja dekoodataan se, voidaan generoida uusia kuvia.

Aloita maksutta

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 ”Variaatioautoenkooderit (VAE)” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Variaatioautoenkooderit (VAE)”. 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 ”Variaatioautoenkooderit (VAE)”?

ELBO-häviö, uudelleenparametrisointitemppu, latenttitilan tutkiminen, kuvien luominen VAE:lla. 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 2/4.

Kuinka kauan ”Variaatioautoenkooderit (VAE)”-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

  1. Autoenkooderit esitysten oppimiseen
  2. Variaatioautoenkooderit (VAE)
  3. GAN-verkot: generaattori ja diskriminaattori
  4. Ehdolliset GAN-verkot ja tyylinsiirto
← Takaisin: Oppikaa tekoälyä Pythonilla