Lær AI med Python · leksjon

Variasjonelle autoenkodere (VAE)

ELBO-tap, reparametriseringstrikset, utforsking av latent rom og bildegenerering med VAE.

Leksjon 2 av 413 trinn

Variasjonelle autoenkodere (VAE) er en gratis leksjon i Lær AI med Python på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lær AI med Python, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Fra autoenkoder til VAE

En vanlig autoenkoder lærer spredte punkter, så sampling av nye punkter gir meningsløse resultater. En Variational Autoencoder (VAE) lærer et jevnt, kontinuerlig latent rom som det kan samples fra, og gjør det til en ekte generativ modell.

Koding til en fordeling

I stedet for ett punkt gir VAE-enkoderen en fordeling per inndata: et gjennomsnitt mu og en logaritme av variansen log_var. Hver inndata avbildes til et lite, diffust område i det latente rommet, ikke til ett enkelt punkt.

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)

Hvorfor mu og log_var?

Vi predikerer log_var i stedet for variansen direkte fordi den kan være et hvilket som helst reelt tall (uten krav om positivitet) og er numerisk stabil. Ved å ta eksponentialfunksjonen får vi tilbake variansen ved behov.

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

Sampling av latent z

For å dekode må vi sample z fra den predikerte fordelingen. Et naivt tilfeldig trekk er ikke deriverbart, så vi kan ikke tilbakepropagere gjennom det. Reparameteriseringstrikset løser dette.

Reparameteriseringstrikset

Skriv om trekket som z = mu + eps * exp(0.5 * log_var), der eps er tilfeldig støy. Nå ligger tilfeldigheten i eps (som ikke trenger gradient), og gradientene flyter gjennom mu og log_var.

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

Dekoderen

Dekoderen tar den samplede z-verdien og rekonstruerer bildet, akkurat som en vanlig autoenkoderdekoder, ved å utvide 64 dimensjoner tilbake til 784 piksler med en Sigmoid-utgang.

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

Rekonstruksjonstapsleddet

Første del av VAE-tapet er rekonstruksjon: hvor godt det dekodede bildet samsvarer med inndataene. Binært kryssentropitap (eller MSE) brukes over pikslene.

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

KL-divergensleddet

Den andre delen er KL-divergensen, som trekker hver kodede fordeling mot en standardnormalfordeling. Dette regulariserer det latente rommet slik at det blir jevnt og kontinuerlig, noe som muliggjør generering.

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

ELBO-målet

VAE-er maksimerer ELBO (Evidence Lower Bound), som tilsvarer å minimere reconstruction + KL. Rekonstruksjonen gjør utdataene trofaste; KL holder rommet godt formet. Å balansere de to er hele poenget.

loss = recon_loss + kl
loss.backward()

Generering av nye bilder

Fordi det latente rommet samsvarer med en standardnormalfordeling, kan man generere helt nye bilder ved å sample z fra N(0,1) og dekode, uten at et inndatabilde er nødvendig.

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

Hvorfor VAE-er er viktige

VAE-er gir et velbegrunnet, jevnt latent rom som kan interpoleres og samples fra. De danner grunnlaget for mange generative teknikker og lærer bort kjerneideen om å lære fordelinger, ikke bare punkter.

Kort sjekk

Test forståelsen av VAE-er.

Oppsummering: Variasjonelle autoenkodere

Her ble VAE-en gjennomgått: En enkoder gir ut mu og log_var, og reparameteriseringstrikset z = mu + eps * exp(0.5 * log_var) gjør sampling deriverbart. Tapet er ELBO = reconstruction + KL. Sampling av z fra N(0,1) og dekoding genererer nye bilder.

Gratis å komme i gang

Lær deg Python med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
53
Leksjoner
225

Ofte stilte spørsmål

Er leksjonen «Variasjonelle autoenkodere (VAE)» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lær AI med Python, inkludert «Variasjonelle autoenkodere (VAE)», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lær AI med Python inneholder totalt 4 leksjoner.

Hva lærer jeg i «Variasjonelle autoenkodere (VAE)»?

ELBO-tap, reparametriseringstrikset, utforsking av latent rom og bildegenerering med VAE. Du øver på Lær AI med Python med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lær AI med Python?

Ingen tidligere erfaring er nødvendig. Lær AI med Python på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Variasjonelle autoenkodere (VAE)»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lær AI med Python-leksjonen?

Ja. Alle Lær AI med Python-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Autoenkodere for læring av representasjoner
  2. Variasjonelle autoenkodere (VAE)
  3. GAN-er: generator og diskriminator
  4. Betingede GAN-er og stiloverføring
← Tilbake til Lær AI med Python