CodeBlanks Logo Icon CodeBlanks

GAN nedir?

GAN (Generative Adversarial Network), generator ve discriminator'un yarıştığı üretici modeldir.

GAN nedir?

Çekişmeli üretici ağ (GAN, 2014) iki ağın oyunudur:

  • Üretici (G): rastgele gürültü z'den sahte örnek üretir.
  • Ayırt edici (D): bir örneğin gerçek mi sahte mi olduğunu olasılık olarak söyler.
# D maksimize eder, G minimize eder:
# V(D, G) = E[log D(x)] + E[log(1 - D(G(z)))]

D iyileştikçe G daha inandırıcı örnekler üretmek zorunda kalır. Denge noktasında G gerçek dağılımı taklit eder ve D her örneğe 0.5 der.

Kayıp fonksiyonları

Uygulamada her iki ağ da ikili çapraz entropiyle eğitilir. Üretici için log(1 − D(G(z)))'yi küçültmek yerine −log D(G(z))'yi küçültmek tercih edilir (doymayan kayıp): başlangıçta D sahteleri kolayca yakaladığında gradyan sönmez:

bce = lambda p, y: -(y * np.log(p) + (1 - y) * np.log(1 - p)).mean()
kayip_D = bce(D_gercek, 1) + bce(D_sahte, 0)
kayip_G = bce(D_sahte, 1)            # "D sahteye gerçek desin"

Eğitim döngüsü sırayla bir adım D'yi, bir adım G'yi günceller.

Uygulama GAN kayıpları

bce(p, y) fonksiyonunu yaz. Üç durum için D ve G kayıplarını round(..., 3) ile aynı satırda yazdır: (1) D çok iyi (gerçeğe 0.9, sahteye 0.1), (2) denge (her ikisine 0.5), (3) G kandırıyor (gerçeğe 0.6, sahteye 0.8).

Başlangıç kodu

model.py
import numpy as np

durumlar = [(0.9, 0.1), (0.5, 0.5), (0.6, 0.8)]

# buraya yaz

Örnek çözüm

model.py
import numpy as np

durumlar = [(0.9, 0.1), (0.5, 0.5), (0.6, 0.8)]

def bce(p, y):
    p = np.asarray(p, dtype=float)
    return float(-(y * np.log(p) + (1 - y) * np.log(1 - p)).mean())

for g, s in durumlar:
    kayip_D = bce([g], 1) + bce([s], 0)
    kayip_G = bce([s], 1)
    print(round(kayip_D, 3), round(kayip_G, 3))

Beklenen çıktı

0.211 2.303
1.386 0.693
2.12 0.223

Soru ve cevaplar

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

1 Dengeye ulaşmış bir GAN'da ayırt edici her örnek için hangi değeri verir?

  • 0.5 Doğru cevap
  • 1
  • 0
  • Gürültü

Açıklama: Gerçek ve sahte ayırt edilemez olduğunda en iyi tahmin yazı turadır.

2 Üreticinin kaybında sahteleri "gerçek" etiketiyle değerlendir.

Soru
kayip_G = bce(D_sahte, ____)
Cevap
kayip_G = bce(D_sahte, 1)

Açıklama: Doymayan kayıp: G, D'nin sahteye 1 demesini ister.

3 Eşleştir.

Kavram Anlamı
G Gürültüden örnek üretir
D Gerçek/sahte olasılığı
kayip_D bce(gerçek,1) + bce(sahte,0)
kayip_G bce(sahte,1)

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