Makine Öğrenmesi
Discriminator
Discriminator, gerçek ve sahte verileri ayırt eder.
Ayırt edici
Ayırt edici sıradan bir ikili sınıflandırıcıdır: gerçek örneklere 1, üreticinin örneklerine 0 etiketi verilir. Görüntülerde genellikle evrişimli bir ağdır ve sigmoid ile biter:
D = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid())
LeakyReLU, negatif bölgede de gradyan geçirdiği için GAN'larda ReLU'ya tercih edilir; böylece üretici her durumda geri bildirim alır.
Ayırt ediciyi ölçü olarak kullanmak
Bir üreticinin kalitesini sezgisel ölçmenin yolu, gerçek ve sahte örneklere yeni bir sınıflandırıcı eğitmektir (C2ST testi). Sınıflandırıcı ne kadar zorlanırsa üretici o kadar iyidir:
X = np.r_[gercek, sahte].reshape(-1, 1)
y = np.r_[np.ones(n), np.zeros(n)]
skor = cross_val_score(LogisticRegression(), X, y, cv=5).mean()
Not: doğrusal bir sınıflandırıcı yalnızca ortalama farkını görebilir; varyans farkı için daha esnek bir model ya da öznitelik (x²) gerekir.
Uygulama C2ST ile üretici sınamak
c2st(gercek, sahte) fonksiyonunu yaz: örnekleri birleştir, öznitelik olarak [x, x**2] kullan, LogisticRegression ile 5 katlı çapraz doğrulama doğruluğunu döndür. Verilen üç üretici için (kötü, orta, iyi) skorları round(..., 2) ile aynı satırda yazdır.
Örnek çözümü göster
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
rng = np.random.default_rng(0)
n = 2000
gercek = rng.normal(4, 1.5, n)
ureticiler = [rng.normal(0, 1, n), rng.normal(4, 0.5, n), rng.normal(4, 1.5, n)]
def c2st(gercek, sahte):
x = np.r_[gercek, sahte]
X = np.c_[x, x ** 2]
y = np.r_[np.ones(len(gercek)), np.zeros(len(sahte))]
return cross_val_score(LogisticRegression(max_iter=1000), X, y, cv=5).mean()
print(*[round(c2st(gercek, s), 2) for s in ureticiler])
Kendini test et
-
Ayırt edicinin doğruluğu 0.5'e düşerse bu ne anlama gelir?
- Üretici çöktü
- Veri yanlış etiketli
- Gerçek ve sahte ayırt edilemiyor; üretici başarılı
- Ayırt edici çok iyi
Cevabı göster
Gerçek ve sahte ayırt edilemiyor; üretici başarılı — 0.5 doğruluk, ikili sınıflandırmada şans seviyesidir.
-
Ayırt edicide negatif bölgede de gradyan geçir.
nn.Linear(784, 256), nn.____(0.2)
Cevabı göster
nn.Linear(784, 256), nn.LeakyReLU(0.2)
-
Eşleştir.
- gerçek etiketi
- 1
- sahte etiketi
- 0
- doğruluk ≈ 0.5
- İyi üretici
- doğruluk ≈ 1
- Kötü üretici
Sıradaki ders: VAE nedir?