Variational Autoencoder
forkortelse for VAE
En generativ model der kombinerer en autoencoder med variational inference for at lære en latent repræsentation af data.
Kort fortalt
En Variational Autoencoder (VAE) lærer at generere nye data (f.eks. billeder) ved at komprimere data til en latent fordeling og derefter dekomprimere den.
- Kategori
- model
- Niveau
- øvet
Betydninger
1- 1
En type generativ model der består af en encoder, der estimerer en variabel fordeling over latente variable, og en decoder, der genererer data fra latente prøver.
- VAE'en blev trænet på MNIST-datasættet for at generere håndskrevne cifre.
- Ved at interpolere i det latente rum kan VAE'en skabe glatte overgange mellem forskellige billeder.
Hvornår bruges det
VAE'er bruges til generering af billeder, tekst og lyd, samt til anomalidetektion og repræsentationslæring. De er særligt nyttige når man ønsker en kontinuerlig latent rummets struktur.
Formel
ELBO = E_{q_φ(z|x)}[log p_θ(x|z)] - KL(q_φ(z|x) || p(z))Kodeeksempel
import torch
import torch.nn as nn
import torch.nn.functional as F
class VAE(nn.Module):
def __init__(self, input_dim, latent_dim):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(input_dim, 400),
nn.ReLU(),
)
self.mu = nn.Linear(400, latent_dim)
self.logvar = nn.Linear(400, latent_dim)
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 400),
nn.ReLU(),
nn.Linear(400, input_dim),
nn.Sigmoid()
)
def encode(self, x):
h = self.encoder(x)
return self.mu(h), self.logvar(h)
def reparameterize(self, mu, logvar):
std = torch.exp(0.5 * logvar)
eps = torch.randn_like(std)
return mu + eps * std
def forward(self, x):
mu, logvar = self.encode(x.view(-1, 784))
z = self.reparameterize(mu, logvar)
return self.decoder(z), mu, logvarEn simpel implementering af en VAE i PyTorch med lineære lag, der illustrerer encoder, decoder og reparameterization trick.
Oprindelse
Udtrykket kombinerer 'variational' (fra variational inference) og 'autoencoder' (en neural netværkstype der komprimerer og dekomprimerer data).