VAE nedir?
- Makine Öğrenmesi kursu
- Uzman
- Ders 32/44
- 5 dk
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.5KL 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
import numpy as np
rng = np.random.default_rng(0)
eps = rng.normal(size=100_000)
# buraya yazÖrnek çözüm
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.
z = mu + np.exp(____ * logvar) * eps
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 |