Makine Öğrenmesi
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.
Örnek çözümü göster
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))
Kendini test et
-
Yeniden parametreleme hilesi neden gereklidir?
- Decoder'ı dondurmak için
- Örnekleme adımından μ ve σ'ya gradyan akıtmak için
- Bellek kazanmak için
- Gizil boyutu artırmak için
Cevabı göster
Örnekleme adımından μ ve σ'ya gradyan akıtmak için — Rastgelelik eps'e taşınır; z, μ ve σ'nın türevlenebilir bir fonksiyonu olur.
-
Log-varyanstan standart sapmayı elde et.
z = mu + np.exp(____ * logvar) * eps
Cevabı göster
z = mu + np.exp(0.5 * logvar) * eps
-
Eşleştir.
- μ
- Encoder ortalaması
- log σ²
- Encoder log-varyansı
- eps
- N(0, 1) gürültüsü
- KL
- N(0, 1)'e yakınlık
Sıradaki ders: Encoder-Decoder