Lær AI med Python · Lektion

Variational autoencodere (VAE)

ELBO-loss, reparameterization trick, udforskning af latent space, billedgenerering med VAE.

Lektion 2 af 413 trin

Variational autoencodere (VAE) er en gratis Lær AI med Python-lektion på CoddyKit. Dette er lektion 2 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.

Fra autoencoder til VAE

En almindelig autoencoder lærer spredte punkter, så udtagning af nye punkter giver meningsløse resultater. En variational autoencoder (VAE) lærer et jævnt, kontinuert latent rum, som du kan udtage punkter fra, og gør det dermed til en ægte generativ model.

Kodning til en fordeling

I stedet for ét punkt giver en VAE-encoder en fordeling for hvert inddata: en middelværdi mu og en log-varians log_var. Hvert inddata afbildes til en lille diffus region i det latente rum, ikke til et 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 forudsiger log_var i stedet for variansen direkte, fordi den kan være ethvert reelt tal uden krav om positivitet og er numerisk stabil. Eksponentiering genskaber variansen, når det er nødvendigt.

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

Udtagning af latent z

For at dekode skal vi udtage z fra den forudsagte fordeling. Et naivt tilfældigt udtræk kan ikke differentieres, så vi kan ikke tilbagepropagere gennem det. Reparameteriseringstricket løser problemet.

Reparameteriseringstricket

Skriv udtrækket om som z = mu + eps * exp(0.5 * log_var), hvor eps er tilfældig støj. Nu ligger tilfældigheden i eps (som ikke behøver en gradient), og gradienterne løber gennem 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 tager det udtagne z og rekonstruerer billedet ligesom en almindelig autoencoder-dekoder: Den udvider 64 dimensioner tilbage til 784 pixels med Sigmoid som uddata.

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

Rekonstruktionstabets led

Den første halvdel af VAE-tabet er rekonstruktionen: hvor godt det dekodede billede matcher inddataene. Binær krydsentropi (eller MSE) bruges over pixelerne.

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

KL-divergensens led

Den anden halvdel er KL-divergensen, som trækker hver kodet fordeling mod en standardnormalfordeling. Det regulariserer det latente rum, så det bliver jævnt og kontinuert og dermed kan bruges til generering.

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

ELBO-målfunktionen

VAE'er maksimerer ELBO (evidensens nedre grænse), hvilket svarer til at minimere reconstruction + KL. Rekonstruktionen gør uddata troværdige, mens KL holder rummet velformet. Hele kunsten er at afbalancere de to.

loss = recon_loss + kl
loss.backward()

Generering af nye billeder

Fordi det latente rum passer til en standardnormalfordeling, kan du generere helt nye billeder ved at udtage z fra N(0,1) og dekode det, uden at der kræves et inddata-billede.

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

Hvorfor er VAE'er vigtige?

VAE'er giver et veldefineret, jævnt latent rum, som du kan interpolere i og udtage punkter fra. De danner grundlag for mange generative teknikker og lærer dig den centrale idé at lære fordelinger, ikke kun punkter.

Hurtig kontrol

Afprøv din forståelse af VAE'er.

Opsummering: Variational Autoencodere

Du lærte om VAE'en: En encoder giver mu og log_var, reparameteriseringstricket z = mu + eps * exp(0.5 * log_var) gør udtagningen differentiérbar, og tabet er ELBO = reconstruction + KL. Ved at udtage z fra N(0,1) og dekode det genereres nye billeder.

Gratis at komme i gang

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 “Variational autoencodere (VAE)” gratis?

Ja — alle 3 lektioner i læringssporet Lær AI med Python, inklusive “Variational autoencodere (VAE)”, 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 “Variational autoencodere (VAE)”?

ELBO-loss, reparameterization trick, udforskning af latent space, billedgenerering med VAE. 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 2 af 4.

Hvor lang tid tager lektionen “Variational autoencodere (VAE)”?

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

  1. Autoencodere til repræsentationslæring
  2. Variational autoencodere (VAE)
  3. GAN'er: generator og discriminator
  4. Betingede GAN'er og style transfer
← Tilbage til Lær AI med Python