Generative Adversarial Network (GAN)
Üretici çekişmeli ağ (GAN), örnekleri gerçekmiş gibi görünene kadar bir üreticiyi bir ayırt ediciye karşı eğitir. Eğitim, çeşitler ve kullanım alanları ele alınır.
Üretici çekişmeli ağ (GAN), birbirine karşı eğitilen iki sinir ağından oluşan bir üretken yapay zekâ modelidir: Üretici rastgele gürültüyü örneklere dönüştürür, ayırt edici ise bu örnekleri gerçek eğitim verilerinden ayırmaya çalışır. Eğitim tamamlandığında üretici, tek bir ileri geçişte yeni görüntüler, sesler veya tablo kayıtları oluşturur. Ian Goodfellow ve Université de Montréal'deki çalışma arkadaşları, GAN'leri 2014 tarihli Generative Adversarial Nets makalesinde tanıttı; GAN'ler, 2021'de difüzyon modelleri öne geçene kadar görüntü sentezine öncülük etti.
GAN Eğitimi Nasıl Çalışır#
İki ağ bir minimaks oyunu oynar. Ayırt edici, girdisinin gerçek olma olasılığını veren ikili bir sınıflandırıcıdır; gerçek örnekleri 1, üretilenleri 0 olarak puanlaması için çapraz entropili bir kayıp fonksiyonuyla eğitilir. Üretici gerçek verileri hiçbir zaman görmez; yalnızca ayırt edicinin gradyanlarından öğrenir. Oyunun teorik optimumunda üretilen dağılım veri dağılımına eşit olur ve ayırt edici her girdi için 0,5 çıktısı verir. Eğitimin başlarında sahteleri ayırt etmek kolay olduğunda özgün üretici hedefi neredeyse hiç gradyan sağlamaz; bu, kaybolan gradyan sorununun bir biçimidir. Bu nedenle Goodfellow'un makalesi, üreticinin ayırt edicinin örneklerini gerçek olarak sınıflandırma olasılığını en üst düzeye çıkarmasını sağladı. Aşağıdaki kodda bu doygunlaşmayan kayıp kullanılır.
PyTorch ile yazılmış tek boyutlu bir GAN, yalnızca örneklerden bir Gauss dağılımı öğrenir:
import torch
from torch import nn
torch.manual_seed(0)
# Generator maps 8-D noise to a number; discriminator scores a number as real (high) or fake (low)
generator = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 1))
discriminator = nn.Sequential(nn.Linear(1, 32), nn.LeakyReLU(0.2), nn.Linear(32, 1))
opt_g = torch.optim.Adam(generator.parameters(), lr=1e-3)
opt_d = torch.optim.Adam(discriminator.parameters(), lr=1e-3)
bce = nn.BCEWithLogitsLoss()
real_label, fake_label = torch.ones(64, 1), torch.zeros(64, 1)
for step in range(3000):
real = 4.0 + 1.25 * torch.randn(64, 1) # training data: samples from N(4, 1.25^2)
fake = generator(torch.randn(64, 8))
# Discriminator step: label real samples 1 and generated samples 0
loss_d = bce(discriminator(real), real_label) + bce(discriminator(fake.detach()), fake_label)
opt_d.zero_grad()
loss_d.backward()
opt_d.step()
# Generator step: push the discriminator to label generated samples 1
loss_g = bce(discriminator(fake), real_label)
opt_g.zero_grad()
loss_g.backward()
opt_g.step()
samples = generator(torch.randn(10000, 8)).detach()
print(f"Generated mean {samples.mean():.2f}, std {samples.std():.2f} (data: 4.00, 1.25)")
print(f"Discriminator's average P(real) on generated samples: {torch.sigmoid(discriminator(samples)).mean():.2f}")3.000 dönüşümlü adımın ardından üretilen örneklerin ortalaması 3,95, standart sapması 1,20 olurken verilerin ortalaması 4,00, standart sapması 1,25'tir; ayırt edici bu örneklerin gerçek olma olasılığına ortalama 0,51 verir. Bu değer, teorik optimumdaki yazı tura olasılığı olan 0,5'e yakındır.
Önemli GAN Varyantları#
- DCGAN: Alec Radford, Luke Metz ve Soumith Chintala'nın 2015 tasarımı, evrişimli üreticilerin ve ayırt edicilerin güvenilir biçimde eğitilmesini sağladı; havuzlama katmanlarını adımlı evrişimlerle değiştirdi ve toplu normalleştirme ekledi.
- Koşullu GAN'ler ve pix2pix: Her iki ağa da bir sınıf etiketi veya girdi görüntüsü vermek, üreticinin istenen çıktıyı üretmesini sağlar. Phillip Isola ve çalışma arkadaşlarının pix2pix modeli (2017), etiket haritalarından sokak fotoğraflarına ve kenarlardan ürün fotoğraflarına eşlenmiş dönüşümleri öğrenir.
- CycleGAN: Atları zebralara veya yaz manzaralarını kış manzaralarına dönüştürmek gibi, eşleştirilmiş örnekler olmadan iki görüntü koleksiyonu arasında dönüşüm öğrenir. Bunun için dönüştürülmüş görüntünün özgün görüntüye geri eşlenmesini şart koşar.
- Wasserstein GAN (WGAN): Martin Arjovsky ve çalışma arkadaşları, sınıflandırıcının yerine gerçek ve üretilmiş veriler arasındaki Wasserstein uzaklığını tahmin eden bir eleştirmen koydu (2017); böylece iki dağılım neredeyse hiç örtüşmediğinde bile gradyanlar işe yarar durumda kalır.
- StyleGAN: NVIDIA'nın StyleGAN (2018) ve StyleGAN2 (2019) modelleri, öğrenilmiş bir stil vektörünü her üretici katmanına iletir. StyleGAN2, FFHQ veri kümesindeki 1024 x 1024 boyutlu yüzlerde 2,84 Fréchet Inception Distance (FID) değerine ulaştı.
Uygulamalar#
- Süper çözünürlük: SRGAN (2017), ESRGAN (2018) ve Real-ESRGAN (2021), büyütme ağlarına çekişmeli kayıp ekler; böylece piksel bazlı kaybın tek başına bulanıklaştırdığı yerlerde net dokuları geri kazandırır.
- Tıbbi görüntü artırma: Maayan Frid-Adar ve çalışma arkadaşları, 182 karaciğer lezyonuna ait BT taramalarında GAN'leri eğitip sentetik lezyonları eğitime ekledi; bunun sonucunda sınıflandırıcının duyarlılığı %78,6'dan %85,7'ye, özgüllüğü ise %88,4'ten %92,4'e yükseldi.
- Deepfake: Sophie Nightingale ve Hany Farid'in 2022 tarihli bir çalışmasında katılımcılar, StyleGAN2 yüzlerinin gerçek mi sentetik mi olduğunu %48 doğrulukla belirledi; bu oran şanstan biraz daha düşüktü. Katılımcılar sentetik yüzleri daha güvenilir buldu.
GAN ile üretilen görüntüler, gerçek örneklerin az olduğu durumlarda sentetik veri olarak ve çevirme ile döndürme gibi geometrik dönüşümlere ek bir veri artırma katmanı olarak kullanılır. Bu görüntüler, diğer görüntüler gibi bir YOLO26 eğitim kümesine eklenir: Ultralytics algılama veri kümesi YAML dosyasındaki train bölümü dizin listesi kabul eder; bu nedenle sentetik görüntüleri gerçek görüntülerin yanındaki ayrı klasörlerinde tutabilir, tek satırı düzenleyerek ekleyebilir veya kaldırabilirsin.
GAN'ler, Difüzyon Modelleri ve VAE'ler Karşılaştırması#
OpenAI'den Prafulla Dhariwal ve Alex Nichol, 2021'de bir difüzyon modelinin o dönemdeki en güçlü GAN olan BigGAN-deep'ten daha iyi FID puanı aldığını bildirdikten sonra difüzyon modelleri görüntü kalitesinde GAN'leri geride bıraktı. Difüzyon eğitimi, rakibin olmadığı kararlı bir regresyon problemidir ve verilerin çeşitliliğini daha eksiksiz kapsar. GAN eğitimi yakınsamadan salınım yapabilir veya üreticinin ayırt ediciyi kandıran birkaç çıktıya yerleşip diğerlerini üretmeyi bıraktığı mod çökmesine uğrayabilir. Değişkenli otomatik kodlayıcılar da kararlı biçimde eğitilir ancak daha bulanık örnekler üretir. GAN'lerin kalıcı avantajı hızdır, çünkü örnekleme tek bir ileri geçişte gerçekleşir: Adobe Research, Carnegie Mellon University ve POSTECH'in geliştirdiği GigaGAN, 2023'te 512 piksel boyutunda metinden görüntüye sonuçları 0,13 saniyede üretti. Çekişmeli kayıplar difüzyon sistemlerinde de kullanılmaya devam ediyor. Stable Diffusion otomatik kodlayıcısı yama tabanlı bir ayırt ediciyle eğitilir; Stability AI'nin SDXL Turbo modeli ise ayırt ediciyi kayba ekleyen bir bilgi damıtma biçimi olan çekişmeli difüzyon damıtmasını kullanarak tek adımda görüntü üretir.










