Yapay zeka modelleri ve platformları
Diffüzyon Modellerini Anlama: Üretken AI’nin Derinliklerine Bir Bakış
Öne çıkan noktalarDiffusion models generate images by learning to reverse a gradual noise addition…
Daha fazla göster
- Diffusion models generate images by learning to reverse a gradual noise addition process through stochastic differential equations.
- Latent diffusion models like Stable Diffusion operate in compressed spaces for faster high-resolution image generation.
- Classifier-free guidance blends conditional and unconditional models to strengthen control over outputs like text prompts.
Diffüzyon modelleri, üretken AI’de güçlü bir yaklaşım olarak ortaya çıkmış ve görüntü, ses ve video oluşturma konusunda devlet-sanatlı sonuçlar üretmiştir. Bu derin teknik makalede, diffüzyon modellerinin nasıl çalıştığını, ana yeniliklerini ve neden bu kadar başarılı olduklarını keşfedeceğiz. Matematiksel temellerini, eğitim sürecini, örnek alma algoritmalarını ve bu heyecan verici yeni teknolojinin ileri uygulamalarını kapsayacağız.
Diffüzyon Modellerine Giriş
Diffüzyon modelleri , yavaş yavaş gürültüyü temizleyerek verilere öğrenme yoluyla gürültü ekleyen bir sınıf üretken modellerdir. Temel fikir, saf gürültü ile başlamaktır ve yüksek kaliteli bir örnek oluşturmak için onu iteratif olarak iyileştirmektir.
Bu yaklaşım, dengesiz termodinamiğin özel bir süreci olan gürültünün tersine çevrilmesi ile ilham almıştır. Makine öğrenimi bağlamında, bunu gürültünün yavaş yavaş verilere eklenmesinin tersine çevrilmesi olarak düşünebiliriz.
Diffüzyon modellerinin bazı önemli avantajları şunlardır:
- GAN’ları birçok durumda geçen devlet-sanatlı görüntü kalitesi
- Düştükçe karşıt dinamikler olmadan kararlı eğitim
- Yüksek derecede paralelleştirilebilirlik
- Esnek mimari – aynı boyutlardaki girişleri ve çıktıları eşleştiren herhangi bir model kullanılabilir
- Güçlü teorik temel
Gelin diffüzyon modellerinin nasıl çalıştığına daha derinlemesine bakalım.

Kaynak: Song et al.
Stokastik Differential Denklemler, diffüzyon modellerindeki ileri ve geri işlemleri yönetir. İleri SDE, verilere gürültü ekler ve yavaş yavaş onu gürültü dağılımına dönüştürür. Ters SDE, öğrenilen bir puan fonksiyonu ile yönlendirilir ve gerçekçi görüntüleri oluşturmak için gürültüyü ilerlemeli olarak kaldırır. Bu yaklaşım, sürekli durum uzaylarında yüksek kaliteli üretken performansa ulaşmak için anahtardır.
İleri Gürültü Süreci
İleri gürültü süreci, gerçek veri dağılımından örneklenen bir veri noktası x₀ ile başlar ve T zaman adımlarında artan gürültü eklenerek x₁, x₂, …, xT gibi giderek daha gürültülü sürümler oluşturur.
Her zaman adımında t, küçük bir miktar gürültü eklenir:
x_t = √(1 - β_t) * x_{t-1} + √(β_t) * ε
Burada:
- β_t , her adımda eklenen gürültüyü kontrol eden varyans zamanlamasını temsil eder
- ε , rasgele Gaussian gürültüyü temsil eder
Bu süreç, xT neredeyse saf Gaussian gürültü olana kadar devam eder.
Matematiksel olarak, bunu bir Markov zinciri olarak tanımlayabiliriz:
q(x_t | x_{t-1}) = N(x_t; √(1 - β_t) * x_{t-1}, β_t * I)
Burada N, Gaussian dağılımı temsil eder.
β_t zamanlaması genellikle küçük olarak seçilir ve zamanla artar. Sık kullanılan seçenekler arasında lineer, kosinüs veya sigmoid zamanlamaları bulunur.
Ters Gürültü Süreci
Bir diffüzyon modelinin amacı, bu sürecin tersini öğrenmektir – saf gürültü xT ile başlamaktır ve onu temiz bir örnek x₀’ye ilerlemeli olarak temizlemektir.
Bu ters süreci aşağıdaki gibi modelleyebiliriz:
p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_θ^2(x_t, t))
Burada μ_θ ve σ_θ^2 , öğrenilen fonksiyonlardır (tipik olarak sinir ağları) ve θ parametresine bağlıdır.
Ana yenilik, tam ters dağılımı açıkça modellemeye gerek olmamasıdır. Bunun yerine, bilinen ileri süreci kullanarak onu parametrize edebiliriz.
Özellikle, optimal ters işlem ortalama μ* için aşağıdaki ifadeyi gösterebiliriz:
μ* = 1/√(1 - β_t) * (x_t - β_t/√(1 - α_t) * ε_θ(x_t, t))
Burada:
- α_t = 1 – β_t
- ε_θ , öğrenilen bir gürültü tahmini ağıdır
Bu, basit bir objetivo verir – bir sinir ağını her adımda eklenen gürültüyü tahmin etmek için eğitmek.
Eğitim Amacı
Diffüzyon modellerinin eğitim amacı, varyasyonel çıkarıma dayanır. Basitleştirmelerden sonra, basit bir L2 kaybına ulaşırız:
L = E_t,x₀,ε [ ||ε - ε_θ(x_t, t)||² ]
Burada:
- t , 1’den T’ye uniform olarak örneklendirilir
- x₀ , eğitim verisinden örneklendirilir
- ε , Gaussian gürültü olarak örneklendirilir
- x_t , ileri processo göre x₀’ya gürültü ekleme yoluyla oluşturulur
Diğer bir deyişle, modeli her adımda eklenen gürültüyü tahmin etmeye eğitiyoruz.
Model Mimarisi

Kaynak: Ronneberger et al.
U-Net mimarisi, diffüzyon modelindeki gürültü temizleme adımının merkezinde yer alır. Kodlayıcı-dekodlayıcı yapısı, ince ayrıntıların korunmasına yardımcı olan atlama bağlantılarına sahiptir. Kodlayıcı, girişi ilerlemeli olarak küçültür ve yüksek seviyeli özellikler yakalar, dekodlayıcı ise kodlanan özellikleri girişi yeniden oluşturmak için yukarı örnekler. Bu mimari, özellikle görüntü segmentasyonu gibi kesin konumlandırmayı gerektiren görevler için özellikle etkili olur.
Gürültü tahmini ağı ε_θ , girişleri ve çıktıları aynı boyutlardaki herhangi bir mimariyi kullanabilir. U-Net tarzı mimariler, özellikle görüntü oluşturma görevleri için popüler bir seçimdir.
Tipik bir mimari şöyle olabilir:
<p>class DiffusionUNet(nn.Module): def __init__(self): super().__init__()</p> <p># Downsampling self.down1 = UNetBlock(3, 64) self.down2 = UNetBlock(64, 128) self.down3 = UNetBlock(128, 256)</p> <p># Bottleneck self.bottleneck = UNetBlock(256, 512)</p> <p># Upsampling self.up3 = UNetBlock(512, 256) self.up2 = UNetBlock(256, 128) self.up1 = UNetBlock(128, 64)</p> # Output self.out = nn.Conv2d(64, 3, 1) <p>def forward(self, x, t): # Embed timestep t_emb = self.time_embedding(t)</p> <p># Downsample d1 = self.down1(x, t_emb) d2 = self.down2(d1, t_emb) d3 = self.down3(d2, t_emb)</p> <p># Bottleneck bottleneck = self.bottleneck(d3, t_emb)</p> <p># Upsample u3 = self.up3(torch.cat([bottleneck, d3], dim=1), t_emb) u2 = self.up2(torch.cat([u3, d2], dim=1), t_emb) u1 = self.up1(torch.cat([u2, d1], dim=1), t_emb)</p> # Output return self.out(u1)














