Encoder-Decoder
- Makine Öğrenmesi kursu
- Uzman
- Ders 33/44
- 5 dk
VAE, encoder ile dağılım parametrelerini ve decoder ile veri üretir.
Encoder-Decoder: otokodlayıcı
VAE'nin temeli otokodlayıcıdır: encoder x'i küçük bir kod z'ye sıkıştırır, decoder z'den x'i geri kurar; kayıp yeniden kurma hatasıdır. Darboğaz (z boyutu) modeli verinin en önemli yapısını öğrenmeye zorlar:
enc = nn.Sequential(nn.Linear(784, 128), nn.ReLU(), nn.Linear(128, 2))
dec = nn.Sequential(nn.Linear(2, 128), nn.ReLU(), nn.Linear(128, 784))
kayip = ((dec(enc(x)) - x) ** 2).mean()Doğrusal katmanlı ve MSE kayıplı bir otokodlayıcının en iyi çözümü PCA ile aynı alt uzayı bulur; doğrusal olmayan katmanlar daha karmaşık yapıları yakalar.
VAE kaybı
VAE kaybı iki terimin toplamıdır: yeniden kurma hatası ve KL. Aralarındaki denge önemlidir; β-VAE, KL'yi bir β katsayısıyla ağırlıklandırır:
kayip = yeniden_kurma + beta * kl
# beta büyük: düzgün, ayrışık gizil uzay ama bulanık çıktı
# beta küçük: keskin çıktı ama düzensiz gizil uzayBu derste doğrusal otokodlayıcının en iyi çözümünü SVD ile bulup darboğazın etkisini ölçeceksin.
Uygulama Doğrusal otokodlayıcı
Verilen X (5 boyutlu, gerçekte 2 boyutlu yapı + küçük gürültü) için merkezle ve SVD al. yeniden_kur(k) fonksiyonu ilk k bileşenle kodlayıp geri kursun (Z = Xc @ V[:k].T, Xc_hat = Z @ V[:k]). k = 1, 2, 3 için ortalama kare hatayı round(..., 4) ile aynı satırda yazdır. Ardından k = 2 kodunun şeklini yazdır.
Başlangıç kodu
import numpy as np
rng = np.random.default_rng(0)
gizli = rng.normal(size=(500, 2))
X = gizli @ rng.normal(size=(2, 5)) + 0.05 * rng.normal(size=(500, 5))
# buraya yazÖrnek çözüm
import numpy as np
rng = np.random.default_rng(0)
gizli = rng.normal(size=(500, 2))
X = gizli @ rng.normal(size=(2, 5)) + 0.05 * rng.normal(size=(500, 5))
Xc = X - X.mean(axis=0)
_, _, V = np.linalg.svd(Xc, full_matrices=False)
def yeniden_kur(k):
Z = Xc @ V[:k].T
return Z, Z @ V[:k]
print(*[round(((yeniden_kur(k)[1] - Xc) ** 2).mean(), 4) for k in [1, 2, 3]])
print(yeniden_kur(2)[0].shape)Beklenen çıktı
0.2147 0.0015 0.001 (500, 2)
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Darboğaz boyutu artırılırsa yeniden kurma hatası genellikle ne olur?
- Azalır Doğru cevap
- Artar
- Değişmez
- Tanımsız olur
Açıklama: Daha geniş kod daha çok bilgi taşır.
2 Yeniden kurma hatasını hesapla.
kayip = ((dec(enc(x)) - x) ** ____).mean()
kayip = ((dec(enc(x)) - x) ** 2).mean()
Açıklama: Ortalama kare hata.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
encoder |
x → z |
decoder |
z → x̂ |
darboğaz |
Küçük kod boyutu |
β |
KL ağırlığı |