Conditional VAE

forkortelse for Conditional Variational Autoencoder

En generativ model, der udvider VAE med betingelsesvariable for at styre outputtet.

Kort fortalt

En Conditional VAE er en variant af Variational Autoencoder, hvor du kan give modellen ekstra information (fx en etiket), så den genererer data med bestemte egenskaber.

Kategori
model
Niveau
øvet
Udtale
kənˈdɪʃənl viː eɪ iː

Betydninger

1
  1. 1

    En generativ dybdelæringsarkitektur, der ved at tilføje betingelsesvariable til encoderen og/eller dekoderen muliggør målrettet generering af data, der opfylder bestemte betingelser.

    • Conditional VAE kan generere håndskrevne cifre fra MNIST-datasættet betinget af cifferets etiket.
    • I en Conditional VAE optimeres den evidensnedre grænse (ELBO) med hensyn til både latente variable og betingelser.Sohn et al., 2015

Hvornår bruges det

Conditional VAE bruges til betinget generering, fx at generere billeder af bestemte klasser, syntetisere tale med en given stemme eller forudsige manglende data ud fra kontekst.

Formel

L(θ, φ; x, c) = -KL(q_φ(z|x,c) || p_θ(z)) + E_{q_φ(z|x,c)}[log p_θ(x|z,c)]

Kodeeksempel

import torch
import torch.nn as nn

class CVAE(nn.Module):
    def __init__(self, input_dim=784, cond_dim=10, latent_dim=20):
        super().__init__()
        self.encoder = nn.Sequential(
            nn.Linear(input_dim+cond_dim, 400),
            nn.ReLU(),
            nn.Linear(400, latent_dim*2)  # mean and logvar
        )
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim+cond_dim, 400),
            nn.ReLU(),
            nn.Linear(400, input_dim),
            nn.Sigmoid()
        )
    
    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5*logvar)
        eps = torch.randn_like(std)
        return mu + eps*std
    
    def forward(self, x, c):
        # concat conditioning to input
        xc = torch.cat([x, c], dim=1)
        h = self.encoder(xc)
        mu, logvar = h.chunk(2, dim=1)
        z = self.reparameterize(mu, logvar)
        zc = torch.cat([z, c], dim=1)
        recon = self.decoder(zc)
        return recon, mu, logvar

Simpel PyTorch-implementering af en Conditional VAE med betingelse c, der sættes sammen med input i encoderen og med latent variabel i dekoderen.

Oprindelse

Conditional VAE stammer fra Variational Autoencoder (2013) introduceret af Kingma & Welling og udvidet med betingelser af Sohn et al. i 2015.

Afledte ord

1

Kilder

2
  • Auto-Encoding Variational Bayes
  • Learning Structured Output Representation using Deep Conditional Generative Models