07 · Architektury · 5 min czytania · aktualizacja
Jak działają modele dyfuzyjne, które generują obrazy z szumu?
W skrócie
Model dyfuzyjny uczy się usuwać szum z obrazu. Zaczynając od czystego szumu i odszumiając go krok po kroku, tworzy całkiem nowe obrazy.
Co to jest
Model dyfuzyjny to model generatywny, który uczy się odwracać stopniowe zaszumianie danych. W procesie w przód do obrazu dodaje się w wielu krokach odrobinę szumu gaussowskiego, aż zostaje sam szum. Sieć neuronowa uczy się procesu wstecz: z lekko zaszumionego obrazu przewidzieć, jaki szum do niego dodano, i go usunąć. Generowanie polega na wylosowaniu czystego szumu i wielokrotnym odszumianiu go — aż powstanie obraz, którego nie było w danych.
Intuicja: rzeźbiarz, który widzi w bryle kamienia posąg i usuwa wszystko, co nim nie jest — tylko po trochu, w setkach małych ruchów. Pojedynczy krok jest łatwy (usunąć odrobinę szumu, gdy obraz jest prawie czysty, albo zgadnąć ogólny zarys, gdy jest prawie sam szum), a złożenie wielu łatwych kroków daje coś bardzo trudnego: realistyczny obraz od zera.
Podstawy położyli Sohl-Dickstein i współpracownicy (2015), a przełomową, praktyczną wersję (DDPM) przedstawili Ho, Jain i Abbeel (2020). Na tym podejściu opierają się popularne generatory obrazów z tekstu, a także modele wideo, dźwięku i struktur białek.
Mechanizm — dlaczego tak działa
Proces w przód ma wygodną postać zamkniętą: x_t = √ᾱ_t · x_0 + √(1 − ᾱ_t) · ε, gdzie ε ∼ N(0, I), a ᾱ_t to iloczyn (1 − β_s) dla kroków s = 1…t przy małych wariancjach szumu β_s. Nie trzeba więc dodawać szumu krok po kroku — można od razu wygenerować obraz zaszumiony do dowolnego poziomu t. Przy dużym t sygnał znika, a x_t ma rozkład praktycznie N(0, I) — z którego łatwo losować.
Trening jest zaskakująco prosty: weź obraz, wylosuj krok t i szum ε, utwórz x_t ze wzoru powyżej i naucz sieć ε_θ(x_t, t) przewidywać ε. Strata to zwykły błąd średniokwadratowy ‖ε − ε_θ(x_t, t)‖². To zadanie regresji, bez rywalizacji dwóch sieci jak w GAN — dlatego trening jest stabilny i nie cierpi na załamanie trybów. Siecią jest zwykle U-Net (sieć konwolucyjna z połączeniami skrótowymi) lub transformer, a numer kroku t podaje się jej jako dodatkowe wejście.
Dlaczego przewidywanie szumu wystarcza do generowania? Przewidziany szum wskazuje kierunek od obrazu zaszumionego w stronę „bardziej prawdopodobnych” danych — formalnie jest proporcjonalny do gradientu logarytmu gęstości danych (tzw. funkcji score). Generowanie to wędrówka pod górę tej gęstości, z dodawaniem odrobiny losowości, żeby nie skończyć zawsze w tym samym miejscu. Song i współpracownicy pokazali, że DDPM i modele oparte na funkcji score to dwa ujęcia tego samego procesu, opisywalnego równaniem różniczkowym.
Dlaczego wiele małych kroków? Gdy szumu dodano mało, rozkład „co było przed tym krokiem” jest prawie gaussowski i łatwy do modelowania. Jeden wielki krok od szumu do obrazu wymagałby modelowania bardzo złożonego rozkładu naraz — to właśnie trudność, z którą zmagają się GAN-y i VAE.
Ceną jest wolne generowanie: oryginalny DDPM wymagał 1000 przejść sieci na jeden obraz. Metody takie jak DDIM pozwalają zejść do kilkudziesięciu kroków, a destylacja — do kilku. Drugim ważnym usprawnieniem jest dyfuzja w przestrzeni ukrytej (Stable Diffusion): obraz 512×512 kompresuje się autoenkoderem do siatki 64×64 i tam przeprowadza dyfuzję, co wielokrotnie zmniejsza koszt. Sterowanie tekstem odbywa się przez uwagę krzyżową do embeddingów opisu i tzw. classifier-free guidance.
Na przykładzie
W DDPM użyto T = 1000 kroków i wariancji szumu rosnących liniowo od 0,0001 do 0,02. Policzmy, ile sygnału zostaje: po 100 krokach ᾱ_t ≈ 0,897, czyli obraz jest mnożony przez 0,947, a szum ma odchylenie 0,32; po 250 krokach ᾱ_t ≈ 0,524 — sygnał i szum mają prawie równą wariancję; po 500 krokach ᾱ_t ≈ 0,079; po 1000 krokach ᾱ_t ≈ 0,00004, a współczynnik przy obrazie to 0,0064 — praktycznie czysty szum.
Zastosowaliśmy ten proces do pierwszego obrazu ze zbioru Digits (zero przeskalowane do przedziału [−1, 1]) i zmierzyliśmy korelację zaszumionego obrazu z oryginałem, uśrednioną po 2000 losowaniach szumu: 0,97 po 50 krokach, 0,89 po 100, 0,56 po 250, 0,19 po 500 i 0,01 po 1000. Model uczy się odwracać każdy z tych etapów: przy t = 50 poprawia drobne szczegóły, przy t = 500 musi zgadnąć, że to w ogóle jest owalny kształt. Na zbiorze CIFAR-10 oryginalny DDPM osiągnął FID 3,17 (im mniej, tym lepiej) — wynik na poziomie najlepszych ówczesnych GAN-ów.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- Gotowe modele i schedulery: biblioteka Hugging Face
diffusers(DDPMScheduler,DDIMScheduler,StableDiffusionPipeline). - Pętla treningowa:
t = torch.randint(0, T, (B,)),noise = torch.randn_like(x0),xt = scheduler.add_noise(x0, noise, t), strataF.mse_loss(model(xt, t), noise). - Liczba kroków przy generowaniu to kompromis jakość–czas: 20–50 kroków DDIM daje zwykle dobre obrazy.
- Skala guidance (np. 5–9 w Stable Diffusion) wzmacnia zgodność z opisem kosztem różnorodności; zbyt duża daje przesycone, nienaturalne obrazy.
- Jakość mierzy się FID i CLIP score, ale zawsze warto obejrzeć próbki — miary nie łapią wszystkich błędów.
Najczęstsze pytania
- Czym model dyfuzyjny różni się od GAN?
- GAN generuje obraz jednym przejściem sieci, ale trenuje się go niestabilną grą dwóch sieci. Model dyfuzyjny trenuje się prostą regresją szumu, stabilnie i z dobrym pokryciem różnorodności danych, za to generowanie wymaga wielu przejść sieci.
- Skąd model wie, co narysować, gdy dostaje opis tekstowy?
- Sieć odszumiająca dostaje dodatkowo embedding tekstu (np. z kodera CLIP lub T5) i korzysta z niego przez uwagę krzyżową. Podczas treningu uczy się odszumiać obrazy zgodnie z ich opisami, więc przy generowaniu „kieruje” szum w stronę obrazów pasujących do podanego tekstu.
- Czy model dyfuzyjny kopiuje obrazy z danych treningowych?
- Zwykle tworzy nowe kombinacje, ale badania pokazały, że duże modele potrafią niemal dosłownie odtworzyć niektóre obrazy, zwłaszcza te wielokrotnie powtórzone w danych. To ważny problem prawny i etyczny.
Źródła
- Sohl-Dickstein, Weiss, Maheswaranathan, Ganguli „Deep Unsupervised Learning using Nonequilibrium Thermodynamics”, ICML 2015.
- Ho, Jain, Abbeel „Denoising Diffusion Probabilistic Models”, NeurIPS 2020, arXiv:2006.11239.
- Song i in. „Score-Based Generative Modeling through Stochastic Differential Equations”, ICLR 2021.
- Song, Meng, Ermon „Denoising Diffusion Implicit Models”, ICLR 2021.
- Rombach, Blattmann, Lorenz, Esser, Ommer „High-Resolution Image Synthesis with Latent Diffusion Models”, CVPR 2022.