2 puan yazan GN⁺ 2024-03-12 | 1 yorum | WhatsApp'ta paylaş
  • Difüzyon modelleri, görüntü üretiminin ötesinde ses, video, 3D, protein tasarımı ve robot yol planlama gibi çok modlu dağılımlardan örnekleme gerektiren problemlerde kullanılıyor; bu eğitim ise optimizasyon perspektifiyle eğitimi ve örneklemeyi birbirine bağlıyor
  • Eğitim süreci, veriye gürültü karıştırılmış (x_\sigma=x_0+\sigma\epsilon) oluşturur ve sinir ağı (\epsilon_\theta(x,\sigma))'nın gürültü yönünü tahmin etmesi için ortalama kare hatayı en aza indirir
  • Eğitilmiş denoiser, veri kümesi (\mathcal{K})'ye yönelik yaklaşık izdüşüm olarak yorumlanabilir; ideal denoiser ise (\sigma)-yumuşatılmış kare uzaklık fonksiyonunun gradyanıyla bağlantılıdır
  • DDIM örneklemesi, (f(x)=\frac{1}{2}\mathrm{dist}_{\mathcal{K}}(x)^2) üzerinde yaklaşık gradyan inişi olarak görülebilir ve (\sigma_t) takvimi, yineleme sayısını ve denoiser değerlendirme maliyetini belirler
  • Gradyan kestirim güncellemesi ile gürültü eklemeyi birleştirince DDIM, DDPM ve yazarların geliştirilmiş örnekleyicisi gam ve mu parametreleri ile birlikte ele alınabilir; bu da toy model ve latent diffusion örneklerine uzanır

Optimizasyon Perspektifinden Difüzyon Modelleri

  • Difüzyon modelleri, çok modlu dağılımlardan örnek üretmede güçlüdür; Stable Diffusion gibi metinden görüntü üretim araçlarının yanı sıra ses, video, 3D üretimi, protein tasarımı ve robot yol planlamasında da kullanılır
  • Eğitimin kuramsal temeli, ICML 2024 makalesinin ve ilgili makalenin optimizasyon yorumudur
  • Uygulama ağırlıklı olarak smalldiffusion referans alınarak hazırlanmıştır; metindeki kod, asıl kütüphaneye göre eğitim amaçlı olarak sadeleştirilmiştir

Eğitim: Gürültü Yönünü Tahmin Etme

  • Difüzyon modeli, eğitim örneklerinden veri kümesi (\mathcal{K})'yi öğrenmeyi ve bu kümeden örnek üretmeyi amaçlar
    • Görüntüler için (\mathcal{K} \subset \mathbb{R}^{c\times h \times w}), gerçekçi görüntülere karşılık gelen piksel değerleri kümesidir
    • Aynı çerçeve; ses, video, robot yörüngeleri ve metin gibi ayrık alanlara da uygulanır
  • Eğitim prosedürü üç adımda görülebilir
    • (x_0 \sim \mathcal{K}), (\sigma) ve (\epsilon \sim N(0,I)) örneklenir
    • (x_\sigma=x_0+\sigma\epsilon) ile gürültü karıştırılmış veri oluşturulur
    • (\epsilon_\theta(x_\sigma,\sigma))'nın (\epsilon)'yi tahmin etmesi için kare kaybı en aza indirilir
  • Kodda training_loop, her x0 batch'i için generate_train_sample ile sigma ve eps üretir ve model(x0 + sigma * eps, sigma) çıktısı ile eps arasındaki MSE'yi optimize eder
  • (\sigma), sürekli bir aralıktan uniform örneklemek yerine (N) adet değere ayrılmış bir (\sigma) takviminden seçilir
    • Schedule sınıfı, olası sigmas listesini sarar ve eğitim sırasında batch bazında değer örnekler
    • Metindeki örnek ScheduleLogLinear(N, sigma_min=0.02, sigma_max=10) kullanır
    • ScheduleDDPM, piksel uzayı difüzyon modelleri için; ScheduleLDM ise Stable Diffusion gibi latent diffusion modelleri için kullanılan takvimdir

Swissroll toy örneği

  • Toy veri kümesi, ilk difüzyon makalelerinden biri olan Sohl-Dickstein et al. 2015'te kullanılan spiral nokta kümesidir ve (\mathcal{K}\subset\mathbb{R}^2) şeklindedir
  • Basit veri kümesinde denoiser bir MLP olarak uygulanır
    • Girdi, (x\in\mathbb{R}^2) ile (\sigma)'nın 2 boyutlu embedding'inin birleştirilmiş halidir
    • Çıktı, gürültü (\epsilon\in\mathbb{R}^2) için tahmin değeridir
    • Birçok difüzyon modeli (\sigma) için sinusoidal positional embedding kullanır; ancak bu örnekte basit bir 2 boyutlu embedding de iyi çalışır
  • Örnek eğitim ayarı ScheduleLogLinear(N=200, sigma_min=0.005, sigma_max=10) ve epochs=15000 kullanır
  • Eğitilmiş denoiser, (x-\sigma\epsilon_\theta(x,\sigma)) çizilerek vektör alanı olarak görselleştirilebilir
    • (\sigma) büyük olduğunda denoiser, veri ortalamasını tahmin etme eğilimindedir
    • (\sigma) düşük ve girdi (x) veriye yakın olduğunda gerçek veri noktalarını tahmin eder

Denoising'i İzdüşüm Olarak Yorumlamak

  • Veri kümesi (\mathcal{K}) için uzaklık fonksiyonu, (\mathrm{dist}_{\mathcal{K}}(x)=\min{|x-x_0|:x_0\in\mathcal{K}}) olarak tanımlanır
  • (x)'in izdüşümü (\mathrm{proj}_{\mathcal{K}}(x)), bu uzaklığı sağlayan (\mathcal{K}) içindeki noktalar kümesidir
  • (\mathcal{K}) kapalı bir küme, (x\notin\mathcal{K}) ve izdüşüm tekil ise kare uzaklık fonksiyonunun gradyanı (x-\mathrm{proj}_{\mathcal{K}}(x)) olur
  • Uzaklık fonksiyonu (\mathrm{dist}_{\mathcal{K}}) her yerde türevlenebilir olmadığından, min yerine softmin kullanılarak (\sigma) ile yumuşatılmış kare uzaklık fonksiyonu tanıtılır
  • Yumuşatılmış uzaklık fonksiyonunun gradyanı, (x)'in belirlediği ağırlıklara göre (\mathcal{K})'deki noktaların ağırlıklı ortalamasına doğru yönelir

İdeal denoiser ve bağıl hata modeli

  • İdeal denoiser (\epsilon^*), belirli bir (\sigma) için eğitim kaybını tam olarak en aza indiren denoiser'dır
  • Veri, sonlu bir (\mathcal{K}) kümesi üzerindeki ayrık uniform dağılım ise ideal denoiser kapalı form bir ifadeyle yazılabilir
    • Her veri noktasının ağırlığı, (x_\sigma) ile o nokta arasındaki uzaklığa göre belirlenir
    • Küçük veri kümelerinde bu doğrudan IdealDenoiser ile hesaplanabilir
  • Toy veride ideal denoiser, (\sigma) büyükken veri ortalamasına; (\sigma) küçükken en yakın veri noktasına yönelir
  • Temel teorem, tüm (\sigma>0), (x\in\mathbb{R}^n) için (\frac{1}{2}\nabla_x \mathrm{dist}^2_{\mathcal{K}}(x,\sigma)=\sigma\epsilon^*(x,\sigma)) ilişkisini verir
  • Bağıl hata modeli, (x-\sigma\epsilon_\theta(x,\sigma))'nın (\mathrm{proj}_{\mathcal{K}}(x))'yi iyi yaklaşıklandırdığı koşulu kullanır
    • (\sqrt{n}\sigma), (\mathrm{dist}_{\mathcal{K}}(x))'yi sabit katsayı çerçevesinde iyi tahmin ettiğinde uygulanır
    • Hatanın (\eta\mathrm{dist}_{\mathcal{K}}(x))'i aşmadığı varsayılır
    • Düşük gürültüde, manifold hipotezi altında eklenen gürültünün çoğu veri manifoldu'na dik olduğundan denoising izdüşümü yaklaşıklar
    • Yüksek gürültüde, (\sigma) (\mathcal{K})'nin çapından büyükse veri ağırlıklı ortalamasını tahmin eden denoiser da küçük bağıl hataya sahiptir
  • CIFAR-10, ideal denoiser hesaplamasının mümkün olduğu büyüklüktedir; deneylerde örnekleme yörüngesi üzerindeki tam izdüşüm ile ideal denoiser çıktısı arasındaki bağıl hata küçük görünür

Örnekleme: yinelemeli denoising ve DDIM

  • Eğitilmiş bir denoiser varsa, gürültü karışmış (x_t) ve gürültü seviyesi (\sigma_t) için (\hat{x}0^t=x_t-\sigma_t\epsilon\theta(x_t,\sigma_t)) ile (x_0) tahmin edilir
  • Başlangıç noktası için (\sigma_T), (\mathcal{K})'nin çapına göre büyük seçilir ve (x_T), (N(0,\sigma_T))'den bağımsız örneklenerek (\mathcal{K})'den uzağa yerleştirilir
  • Yüksek gürültüde, denoiser'ın tek bir çağrısı bağıl hata küçük olsa bile mutlak hata büyük olabilir; ideal denoiser tahmini de veri ortalamasına yakın olur
  • Bu yüzden örnekleme, (\sigma_t) takvimi boyunca denoiser'ı tekrar tekrar çağırarak (x_T,\ldots,x_0) dizisini üretir
  • (x_{t-1}=x_t-(\sigma_t-\sigma_{t-1})\epsilon_\theta(x_t,\sigma_t)) güncellemesi, bir koordinat dönüşümünden sonra deterministik DDIM örnekleme algoritması ile aynıdır
    • DDIM ile eşdeğerliğin ispatı makalenin Appendix A bölümündedir

Uzaklık minimizasyonu olarak DDIM

  • DDIM, (f(x)=\frac{1}{2}\mathrm{dist}_{\mathcal{K}}(x)^2) üzerinde yaklaşık gradyan inişi olarak yorumlanır
    • Adım büyüklüğü (1-\sigma_{t-1}/\sigma_t)'dir
    • (\nabla f(x_t)), (\epsilon_\theta(x_t,\sigma_t)) ile kestirilir
  • (\sigma_t) takvimi, örnekleme sırasında gradyan adımlarının sayısını ve büyüklüğünü belirler
    • Adım sayısı çok azsa (\mathrm{dist}_{\mathcal{K}}(x_t)) azalmayabilir ve yakınsama gerçekleşmeyebilir
    • Çok sayıda küçük adım kullanmak, denoiser değerlendirme sayısını artırarak hesaplama maliyetini yükseltir
  • Admissible schedule, her yinelemede (\sqrt{n}\sigma_t)'nin (\mathrm{dist}_{\mathcal{K}}(x_t)) ile sabit katsayı sınırları içinde eşleşmesini sağlayan takvimdir
    • Geometrik olarak azalan log-linear (\sigma_t) dizisi admissible schedule'dır
  • Teoreme göre, DDIM ile üretilen (x_t)'lerde (\nabla\mathrm{dist}{\mathcal{K}}(x)) mevcutsa ve (\mathrm{dist}{\mathcal{K}}(x_T)=\sqrt{n}\sigma_T) ise, (x_t) kare uzaklık fonksiyonu üzerinde gradyan inişiyle üretilir ve (\mathrm{dist}_{\mathcal{K}}(x_t)/\sqrt{n}\approx\sigma_t) korunur
  • Toy örnekte, özgün log-linear takvimden alt örnekleme yapılarak 20 adımlı bir DDIM örnekleyici uygulanır; örneklerin çoğu orijinal veriye yakındır ama hâlâ iyileştirme alanı vardır

Gradyan kestirimi tabanlı geliştirilmiş örnekleyici

  • (\nabla\mathrm{dist}{\mathcal{K}}(x))'nin (x) ile (\mathrm{proj}{\mathcal{K}}(x)) arasında değişmez olması kullanılarak, mevcut tahmin ile önceki tahmini karıştıran bir güncelleme uygulanır
  • (\bar{\epsilon}t=\gamma\epsilon\theta(x_t,\sigma_t)+(1-\gamma)\epsilon_\theta(x_{t+1},\sigma_{t+1})) güncellemesi, bir önceki adımın hatasını mevcut tahminle düzelten bir yöntemdir
  • Toy model örneklerinde bu yaklaşım DDIM'den daha hızlı yakınsar ve örnekler orijinal veriye daha çok yaklaşır
  • DDIM ile karşılaştırıldığında bu örnekleyiciye momentum eklenmiş bir yorum getirilebilir; yörünge overshoot yapabilir ama daha hızlı yakınsayabilir
  • Üretim sürecinde gürültü eklemek, deneysel olarak örnekleme kalitesini iyileştirir
    • Orijinal (\sigma_t) takvimini korumak için, daha küçük bir (\sigma_{t'})'ye kadar denoise edildikten sonra (w_t\sim N(0,I)) gürültüsü yeniden eklenir
    • (\mu=\frac{1}{2}) olduğunda DDPM sampler tam olarak geri elde edilir
  • Tam güncelleme (x_{t-1}=x_t-(\sigma_t-\sigma_{t'})\bar{\epsilon}_t+\eta w_t), üç örnekleyiciyi geneller
    • DDIM: gam=1, mu=0
    • DDPM: gam=1, mu=0.5
    • Gradyan kestirim örnekleyicisi: gam=2, mu=0

Daha büyük modeller ve kaynaklar

  • Yukarıdaki eğitim kodu, yalnızca toy veri için değil, görüntü difüzyon modellerini sıfırdan eğitmek için de kullanılabilir
  • FashionMNIST örneği, FashionMNIST veri kümesi üzerinde eğitilerek Papers with Code leaderboard'unda FID bazında 2. sırayı alan bir örnek olarak sunuluyor
  • Örnekleme kodu, herhangi bir değişiklik yapılmadan önceden eğitilmiş latent diffusion modelleriyle de kullanılabilir
    • Örnekte ScheduleLDM(1000) ve ModelLatentDiffusion('stabilityai/stable-diffusion-2-1-base') kullanılır
    • Metin koşulu An astronaut riding a horse olarak ayarlanır, 50 adet (\sigma) adımıyla örnekleme yapılır ve ardından latent decode edilir
  • (\gamma) momentum teriminin etkisi, yüksek çözünürlüklü metinden görüntü üretiminde karşılaştırmalı görselleştirmelerle gösterilir
  • Ayrıca bakılabilecek kaynaklar

1 yorum

 
GN⁺ 2024-03-12
Hacker News yorumları
  • Yazarıyım. Difüzyon modellerini anlamaya çalışırken kodu ve matematiği ciddi biçimde sadeleştirmenin mümkün olduğunu fark ettim; bu yüzden bu blog yazısını ve difüzyon kütüphanesini oluşturdum.
    Sorularınız varsa yanıtlayabilirim.
    • Bir araştırmacı olarak hoşuma gitmeyen çok sayıda difüzyon modeli blogu var, ama bu yazı gerçekten iyiydi. Doğrudan özüne giriyor; sıkça içine düşülen karmaşık kısımları gösterirken yolunu kaybetmiyor ya da dağılmıyor.
      Özellikle yörünge tartışmasını beğendim; çünkü zamanlayıcılar gibi konularda birçok kişinin zorlandığı noktaları anlamak için iyi bir motivasyon sağlıyor. Song’un ya da Lilian’ın yazıları kadar eksiksiz olmasa da çok daha erişilebilir, bu yüzden başkalarına önermeyi düşünüyorum.
      Bu arada bir arkadaşımın daha önce yazdığı minimal bir difüzyon uygulaması var; DDPM açısından biraz daha “eksiksiz” sayılır ve faydalı olmuştu: https://github.com/VSehwag/minimal-diffusion/
    • Son örnek görselde momentum terimi, evin dijital resmine zarar vermiş gibi görünüyor. gamma = 2.0 görselinde kapı kaybolmuş; bu yüzden gradyan bilgisini kullanan DDIM örnekleyicisinin etkisini sezgisel olarak anlamak için o örneğin ayrıntılarını daha çok merak ediyorum.
      Stable Diffusion’da örnekleme prosedürüyle biraz deneme yapmış biri olarak, DDIM’e kıyasla yakınsama süresi ve adım sayısı karşılaştırmasını da görmek isterdim. Momentum, yakınsama ve hata arasında bir ilişki olup olmadığını merak ediyorum. Örneğin 16 adımlı momentum örnekleyicisinin DDIM’in 20 adımı ± hata terimiyle neredeyse eşdeğer olup olmadığı gibi bir karşılaştırma iyi olurdu.
    • get_sigma_embeds(batches, sigma) ilk girdiyi kullanmıyor gibi görünüyor. Acaba amaç sigma(batches, 1) biçimine broadcast etmek miydi?
    • Bu kavramların bazılarının fizik ilkelerinden gelip gelmediğini merak ediyorum. Sinir ağlarının biyolojik sinir ağlarından esinlendiğini söylemeye benzer bir durum mu; bu bakış açısına dair bir içgörünüz var mı, bilmek isterim.
  • Bir başka iyi yazının başlığı da Diffusion Models From Scratch: https://www.tonyduan.com/diffusion/index.html
    Matematiksel ayrıntılara çok daha derin giriyor ve yanında 500 satırdan kısa, çok anlaşılır bir minimal uygulama sunuyor.
  • Kod olması güzel. Difüzyon makaleleri çok denklem içermeleriyle ünlü (https://twitter.com/cto_junior/status/1766518604395155830), ama geri kalanımız için kod çok daha okunabilir ve hatta daha doğru olabilir. Bence tüm teorik makalelerle birlikte referans uygulama kodu da gelmeli.
    Sora’yı ve diğer video üretim modellerini çalıştıran difüzyon transformer sürümlerine de genişletilse iyi olurdu. Bu yazıyla https://jaykmody.com/blog/gpt-from-scratch/ birleştirilerek “sıfırdan difüzyon transformer” türünde bir giriş yazısı hazırlanabilir gibi görünüyor.
    • Difüzyon makalelerinin çok denklem içermeleriyle ünlü olduğu doğru, ama açıkçası tanıdığım difüzyon araştırmacılarının çoğu da aynı tepkiyi veriyor. Birçok kişi aynı denklemleri tekrar tekrar yazıyor; bence o denklemler fiilen daha çok tekrar/özet amaçlı.
      Buna karşılık gerçekten derine inmek istiyorsanız Kingma, Gao, Ricky Tian Qi Chen ve Max Welling’in öğrencilerinin çalışmalarını (Tomczak postdoc, Hoogeboom vb.) ve ayrıca gizli emek sahibi Aapo Hyvärinen’in çalışmalarını okumanızı öneririm. Kingma & Gao’nun nispeten daha hafif taraftaki çalışmalarından, SD3 makalesiyle de ilgili bir örnek burada: https://arxiv.org/abs/2303.00848
      Üzücü tarafı, önceki çalışmaları bilme ve anlama bağımlılığının büyük olması nedeniyle erişilebilirliğin düşmesi; ama buna anlamlı bir eleştiri demek de zor. Sonuçta bu araştırma, halka yönelik eğitim materyali değil.
    • Sadece U-net’i bir transformer encoder ile değiştirmeniz yeterli. Embedding’i kaldırıp görüntü patch’lerini n_embd boyutunda vektörlere projekte edebilirsiniz; difüzyon sürecinin kendisi aynı kalabilir.
  • Güzel bir yazı, ama difüzyon modellerinin skor fonksiyonunu (log olasılığın türevi) modellediği önemli özellik[1] ve difüzyon örneklemesinin Langevin dinamiğine[2] benzemesi eksik kalmış gibi. Bu bakış açılarının, GAN’lere göre eğitimin neden daha kolay olduğunu iyi açıkladığını düşünüyorum. Çünkü modelleme hedefi daha kolay.
    [1] https://yang-song.net/blog/2021/score/
    [2] https://lilianweng.github.io/posts/2021-07-11-diffusion-mode...
    • Doğru. Bu blog yazıları, metinde anlattığımız “veriye projeksiyon” bakış açısından farklı difüzyon modeli yorumları sunuyor. Aynı eğitim hedefini ve örnekleme sürecini yorumlamanın birden fazla yolu olarak görülebilir.
      Bizim bakış açımızda difüzyon modellerinin eğitilmesinin kolay olmasının nedeni, tam mesafe fonksiyonunun gradyanını tahmin etmek yerine yumuşatılmış mesafe fonksiyonunun gradyanını tahmin etmeye dayalı bir eğitim hedefi kullanmaları. Difüzyon modeli örneklemesi, birkaç kez yaklaşık gradyan adımı atmaya benzer.
      Difüzyon modellerini daha derin anlamak için bu blog yazılarının hepsini okuyup farklı yorumları öğrenmenizi öneririm.
  • Çok ilginç. Aklıma hemen Iterative alpha-(de)Blending[1] geldi. Bu çalışma da kavramsal olarak daha basit bir difüzyon modeli kurmaya çalışıyor ve yaklaşık, yinelemeli bir projeksiyon süreci olarak formüle edilebileceği sonucuna varıyor.
    Ancak bu yazının yaklaşımı, gürültü giderici hata analizi gibi daha ilginç deneylere olanak sağlıyor gibi görünüyor.
    [1] https://arxiv.org/pdf/2305.03486.pdf
  • Teori açıklaması iyi. Veri kümesinden bağımsız bir açıklama gibi görünüyor; ama gerçek görüntü üretiminin somut kısımlarını merak ediyorum.
    Örneğin görüntü üreteçlerinin piyano tuşları üretmekte zorlanmasının nedeni nedir? Siyah tuşların ikili ve üçlü gruplar halinde dönüşümlü geldiği yapıyı üretmek için orta mesafe kısıtlarını daha iyi ifade etmek gerekiyormuş gibi görünüyor.
    • Bu, parmak problemiyle aynı. Sayı, boyut, açı, konum vb. her seferinde hepsinin doğru olması gerekiyor; biri bile yanlışsa insanlar bunu çok hızlı fark ediyor. Dallanma yerleri “yanlış” olsa bile insanların pek fark etmediği ağaç dalları gibi nesnelerden farklı.
  • Difüzyon fikrinin bir kısmı eğitim verisini muazzam ölçüde artırmak mı? Rastgele difüze edilmiş görüntüleri, özgün ve difüze edilmemiş görüntülerle karşılaştırabilir hale gelmek gibi mi, merak ediyorum.
  • Tüm makine öğrenimi modelleri konvolüsyondur. Göreceksiniz.
    • Bunu birkaç kez yazdığınızı sanıyorum; biraz daha ayrıntılı açıklayabilir misiniz? Örneğin pekiştirmeli öğrenmeyi konvolüsyon olarak görmek bana zor geliyor.