CodeBlanks Logo Icon CodeBlanks

VAE nedir?

VAE (Variational Autoencoder), veriyi olasılıksal bir dağılıma kodlayan üretici modeldir.

VAE nedir?

Değişimsel otokodlayıcı (VAE, 2013), veriyi düşük boyutlu bir gizil uzaya sıkıştırıp oradan geri üreten olasılıksal bir modeldir. Encoder her örnek için tek bir nokta değil, bir dağılım verir: ortalama μ ve log-varyans log σ².

mu, logvar = encoder(x)
z = mu + np.exp(0.5 * logvar) * eps      # eps ~ N(0, 1): yeniden parametreleme
x_hat = decoder(z)

Eğitimden sonra yeni örnek üretmek için z ~ N(0, I) çekip decoder'a vermek yeterlidir. GAN'a göre eğitimi kararlıdır, ama örnekleri genellikle daha bulanıktır.

KL ıraksaması

VAE kaybının ikinci terimi, encoder'ın dağılımını N(0, 1)'e yakın tutar. Gauss için kapalı formdadır:

def kl(mu, logvar):
    return -0.5 * np.sum(1 + logvar - mu ** 2 - np.exp(logvar))

print(kl(np.zeros(2), np.zeros(2)))     # 0.0: tam N(0, 1)
print(kl(np.array([1., 0.]), np.zeros(2)))   # 0.5

KL terimi olmasaydı encoder her örneği uzak, dar noktalara koyar ve gizil uzaydan örnekleme anlamsız olurdu.

Uygulama KL ve yeniden parametreleme

kl(mu, logvar) fonksiyonunu yaz. Üç durum için KL değerini round(..., 3) ile aynı satırda yazdır: μ=[0,0], logvar=[0,0]; μ=[1,0], logvar=[0,0]; μ=[0,0], logvar=[log 0.25, 0]. Ardından μ=2, logvar=log 0.25 için yeniden parametrelemeyle 100 000 örnek çek; ortalama ve standart sapmayı round(..., 2) ile aynı satırda yazdır.

Başlangıç kodu

model.py
import numpy as np

rng = np.random.default_rng(0)
eps = rng.normal(size=100_000)

# buraya yaz

Örnek çözüm

model.py
import numpy as np

rng = np.random.default_rng(0)
eps = rng.normal(size=100_000)

def kl(mu, logvar):
    mu, logvar = np.asarray(mu, float), np.asarray(logvar, float)
    return float(-0.5 * np.sum(1 + logvar - mu ** 2 - np.exp(logvar))) + 0.0

print(round(kl([0, 0], [0, 0]), 3), round(kl([1, 0], [0, 0]), 3), round(kl([0, 0], [np.log(0.25), 0]), 3))
z = 2 + np.exp(0.5 * np.log(0.25)) * eps
print(round(z.mean(), 2), round(z.std(), 2))

Beklenen çıktı

0.0 0.5 0.318
2.0 0.5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yeniden parametreleme hilesi neden gereklidir?

  • Decoder'ı dondurmak için
  • Örnekleme adımından μ ve σ'ya gradyan akıtmak için Doğru cevap
  • Bellek kazanmak için
  • Gizil boyutu artırmak için

Açıklama: Rastgelelik eps'e taşınır; z, μ ve σ'nın türevlenebilir bir fonksiyonu olur.

2 Log-varyanstan standart sapmayı elde et.

Soru
z = mu + np.exp(____ * logvar) * eps
Cevap
z = mu + np.exp(0.5 * logvar) * eps

Açıklama: σ = exp(½ log σ²).

3 Eşleştir.

Kavram Anlamı
μ Encoder ortalaması
log σ² Encoder log-varyansı
eps N(0, 1) gürültüsü
KL N(0, 1)'e yakınlık

Uzman bölümündeki tüm dersler