Ezt a cikket eredetileg közzétették AssemblyAI és a szerző engedélyével újra közzétesszük a TOPBOTS-nál.
A diffúziós modellek olyan generatív modellek, amelyek az elmúlt néhány évben jelentős népszerűségre tettek szert, és ennek jó oka van. A 2020-as években kiadott egy maroknyi alapvető tanulmány kizárólag megmutatták a világnak, hogy mire képesek a diffúziós modellek, például a GAN-ok legyőzésére[6] a képszintézisről. Legutóbb a szakemberek diffúziós modelleket láthattak itt DALL-E2, az OpenAI múlt hónapban megjelent képgeneráló modellje.
Tekintettel a Diffusion Models legutóbbi sikerhullámára, sok gépi tanulással foglalkozó szakember minden bizonnyal érdeklődik belső működése iránt. Ebben a cikkben megvizsgáljuk a A diffúziós modellek elméleti alapjai, majd bemutatjuk, hogyan lehet képeket generálni a Diffúziós modell a PyTorch-ban. Merüljünk el!
Ha ez a mélyreható oktatási tartalom hasznos az Ön számára, iratkozz fel AI levelezőlistánkra figyelmeztetni kell, ha új anyagot adunk ki.
Diffúziós modellek – Bevezetés
A diffúziós modellek nemző modellek, ami azt jelenti, hogy a képzésükhöz hasonló adatok létrehozására szolgálnak. A diffúziós modellek alapvetően úgy működnek edzési adatok megsemmisítése a Gauss-zaj egymást követő hozzáadásával, majd megtanulni gyógyulni az adatok által irányváltó ezt a zajos folyamatot. Az edzés után a Diffúziós Modell segítségével egyszerűen generálhatunk adatokat véletlenszerűen mintavételezett zaj átvezetése a tanult zajtalanítási folyamaton.
Pontosabban, a diffúziós modell egy látens változó modell, amely rögzített Markov-lánc segítségével képezi le a látens teret. Ez a lánc fokozatosan zajt ad az adatokhoz, hogy megkapja a hozzávetőleges posterior q(x1:T|x0), ahol x1,…,xT az x-szel azonos dimenziójú látens változók0. Az alábbi ábrán egy ilyen Markov-láncot látunk képadatokhoz manifesztálva.
Végül a kép aszimptotikusan tiszta Gauss-zajtá alakul. Az cél A diffúziós modell képzésének megtanulása a fordított folyamat – azaz képzés pθ(xt-1|xt). Ezen a láncon visszafelé haladva új adatokat generálhatunk.
A diffúziós modellek előnyei
Mint fentebb említettük, a diffúziós modellek kutatása robbanásszerűen megnőtt az elmúlt években. A nem egyensúlyi termodinamika ihlette[1], A diffúziós modellek jelenleg gyártják A legmodernebb képminőség, amelyekre az alábbiakban láthat példákat:
Az élvonalbeli képminőségen túl a diffúziós modellek számos egyéb előnnyel is járnak, többek között nem igényel ellenséges kiképzést. Az ellenséges kiképzés nehézségei jól dokumentáltak; és azokban az esetekben, amikor léteznek nem versengő alternatívák összehasonlítható teljesítménnyel és edzési hatékonysággal, általában a legjobb ezeket kihasználni. Az edzés hatékonyságát illetően a diffúziós modellek további előnyei is vannak skálázhatóság és párhuzamosíthatóság.
Míg a diffúziós modellek szinte légből kapott eredményeket hoznak létre, sok körültekintő és érdekes matematikai választás és részlet ad ezeknek az eredményeknek alapot, és a legjobb gyakorlatok még mindig fejlődnek a szakirodalomban. Nézzük most részletesebben a diffúziós modelleket alátámasztó matematikai elméletet.
Diffúziós modellek – mély merülés
Mint fentebb említettük, a diffúziós modell a következőkből áll előre folyamat (Vagy diffúziós folyamat), amelyben egy adat (általában egy kép) fokozatosan zajos, és a fordított folyamat (Vagy fordított diffúziós folyamat), amelyben a zaj a céleloszlásból származó mintává alakul vissza.
A mintavételi lánc átmenetei az előremenő folyamatban feltételes Gauss-rendszerre állíthatók, ha a zajszint elég alacsony. Ennek a ténynek a Markov-feltevéssel való kombinálása az előrehaladási folyamat egyszerű paraméterezéséhez vezet:
Matematikai jegyzet
Az adatok megsértéséről beszéltünk hozzáadásával Gauss-zaj, de elsőre talán nem világos, hogy hol végezzük ezt a kiegészítést. A fenti egyenlet szerint a lánc minden lépésében egyszerűen egy Gauss-eloszlásból veszünk mintát, amelynek átlaga a lánc előző értéke (azaz kép).
Ez a két állítás egyenértékű. Azaz
Hogy megértsük, miért, enyhén visszaélünk a jelöléssel az állítás során
Ahol a végső implikáció a valószínűségi változók összege és eloszlásaik konvolúciója közötti matematikai ekvivalenciából fakad – ld. ezt a Wikipédia oldalt további információért.
Más szóval megmutattuk, hogy az előzőhöz kötött időlépés eloszlásának állítása egy Gauss-eloszlás átlagán keresztül egyenértékű azzal, hogy egy adott időlépés eloszlása megegyezik az előzőé, Gauss-zaj hozzáadásával. Kihagytuk a variancia ütemterv által bevezetett skalárokat, és az egyszerűség kedvéért ezt egy dimenzióra mutattuk be, de hasonló bizonyíték érvényes a többváltozós Gaussokra is.
Ahol β1,…,βT egy eltérés ütemezése (akár tanult, akár rögzített), amely, ha jól viselkedik, biztosítja ezt xT csaknem izotróp Gauss-féle kellően nagy T számára.
Mint korábban említettük, a diffúziós modellek „varázslata” a fordított folyamat. A képzés során a modell megtanulja megfordítani ezt a diffúziós folyamatot, hogy új adatokat generáljon. Kezdve a tiszta Gauss-zajjal, p(xT):=N(xT,0,I) a modell megtanulja a közös eloszlást pθ(x0:T) mint
ahol megtanulják a Gauss-átmenetek időfüggő paramétereit. Különösképpen vegye figyelembe, hogy a Markov-formula azt állítja, hogy egy adott fordított diffúziós átmenet-eloszlás csak az előző időlépéstől függ (vagy a következő időlépéstől, attól függően, hogyan nézzük):
Képzések
A diffúziós modellt a a fordított Markov-átmenetek megtalálása, amelyek maximalizálják a képzési adatok valószínűségét. A gyakorlatban a képzés egyenértékű a negatív log-valószínűség variációs felső határának minimalizálásából.
Jelölés részlete
Vegye figyelembe, hogy Lstb. technikailag an felső kötött (az ELBO negatívja), amelyet megpróbálunk minimalizálni, de L-nek nevezzükstb. a szakirodalommal való összhang érdekében.
Igyekszünk átírni az L-tstb. tekintve Kullback-Leibler (KL) Eltérések. A KL divergencia egy aszimmetrikus statisztikai távolságmérő, amely megmutatja, hogy mekkora egy valószínűségi eloszlás P eltér egy referenciaeloszlástól Q. Érdeklődünk L. megfogalmazásábanstb. a KL divergenciák szempontjából, mert Markov-láncunkban az átmeneti eloszlások Gauss-ok, és a Gauss-féle KL eltérésnek zárt alakja van.
Mi az a KL eltérés?
A folytonos eloszlások KL divergenciájának matematikai alakja az
Alább látható a változó eloszlás KL divergenciája P (kék) referencia eloszlásból Q (piros). A zöld görbe a fenti KL divergencia definíciójában szereplő integrálon belüli függvényt jelöli, a görbe alatti teljes terület pedig a KL divergenciájának értékét. P ból ből Q adott pillanatban egy érték, amely számszerűen is megjelenik.
Színészválogatás a KL eltérések tekintetében
Mint korábban említettük, lehetséges [1] átírni Lstb. szinte teljesen a KL eltérések tekintetében:
ahol
Levezetés részletei
A variációs korlát egyenlő
Ha az eloszlásokat a Markov-feltevésünk alapján a definícióikra cseréljük, azt kapjuk
Naplószabályokkal alakítjuk át a kifejezést naplók összegévé, majd kihúzzuk az első tagot
Bayes tételét és Markov-feltevésünket felhasználva ez a kifejezés azzá válik
Ezután a középső tagot naplószabályok segítségével felosztjuk
A második kifejezést elkülönítve látjuk
Ezt visszaillesztve az L-re vonatkozó egyenletünkbestb., nekünk van
Naplószabályok segítségével átrendezzük
Ezután megjegyezzük a következő ekvivalenciát a KL divergenciájára bármely két eloszlás esetén:
Végül ezt az ekvivalenciát az előző kifejezésre alkalmazva eljutunk a
Az előre irányuló folyamat utólagos kondicionálása x-en0 L-bent-1 követhető formát eredményez, amely oda vezet minden KL eltérés Gauss-féle összehasonlítás. Ez azt jelenti, hogy az eltérések pontosan kiszámíthatók zárt formájú kifejezésekkel, nem pedig Monte Carlo becslésekkel[3].
Modellválasztások
A célfüggvényünk matematikai alapjainak megteremtésével most több döntést kell hoznunk a diffúziós modellünk megvalósításával kapcsolatban. A továbbítási folyamathoz egyetlen választási lehetőség a variancia ütemezés meghatározása, amelynek értékei általában nőnek a forward folyamat során.
A fordított folyamathoz sokkal inkább a Gauss-eloszlásparaméterezési/modellarchitektúra(oka)t választjuk. Jegyezze meg a nagyfokú rugalmasság hogy a Diffusion Models megengedheti magának – az csak Az architektúránkkal szemben támasztott követelmény, hogy a bemeneti és kimeneti dimenziók azonosak legyenek.
Az alábbiakban részletesebben megvizsgáljuk e választások részleteit.
Forward Process és LT
Ahogy fentebb megjegyeztük, a forward folyamatot illetően meg kell határoznunk az eltérés ütemezését. Különösen mi határoztuk meg őket időfüggő állandók, figyelmen kívül hagyva azt a tényt, hogy megtanulhatók. Például[3], lineáris ütemezés β-tól1= 10-4 β-raT=0.2 használható, vagy esetleg geometriai sorozat.
A választott értékektől függetlenül az a tény, hogy az eltérés ütemezése rögzített, L-t eredményezT konstanssá válik a tanulható paramétereink készlete tekintetében, ami lehetővé teszi számunkra, hogy figyelmen kívül hagyjuk, ami a képzést illeti.
Fordított folyamat és L1:T-1
Most a fordított folyamat meghatározásához szükséges választási lehetőségeket tárgyaljuk. Emlékezzünk vissza a fentiekből, hogy a fordított Markov-átmeneteket Gauss-féleként határoztuk meg:
Most meg kell határoznunk μ funkcionális alakjaitθ vagy Σθ. Míg Σ paraméterezésére vannak bonyolultabb módok isθ[5], egyszerűen beállítjuk
Vagyis feltételezzük, hogy a többváltozós Gauss-féle független Gauss-ok szorzata azonos szórással, olyan varianciaértékkel, amely idővel változhat. Mi állítsa be ezeket a szórásokat úgy, hogy egyenértékűek legyenek az előremenő folyamatok eltérési ütemtervével.
Adott Σ új megfogalmazásaθ, nekünk van
amely lehetővé teszi számunkra az átalakulást
nak nek
ahol a különbség első tagja x lineáris kombinációjat és x0 ez a β variancia ütemezéstől függt. Ennek a függvénynek a pontos formája nem releváns céljaink szempontjából, de megtalálható a [3].
A fenti arány jelentősége az μ legegyszerűbb paraméterezéseθ egyszerűen megjósolja a diffúziós hátsó átlagot. Fontos, hogy a szerzők [3] valójában azt találta, hogy a képzés μθ hogy megjósolja a zaj komponens bármely adott időpontban jobb eredményeket ad. Konkrétan hadd
ahol
Ez a következő alternatív veszteségfüggvényhez vezet, amelyet a szerzők [3] stabilabb edzéshez és jobb eredményekhez vezet:
A szerzők [3] megjegyzi a diffúziós modellek e megfogalmazásának összefüggéseit a Langevin-dinamikán alapuló, pontegyeztető generatív modellekkel. Valójában úgy tűnik, hogy a diffúziós modellek és a pontszám alapú modellek ugyanannak az éremnek a két oldala lehet, ami hasonló a hullámalapú kvantummechanika és a mátrix alapú kvantummechanika független és egyidejű fejlődéséhez, amelyek ugyanazon jelenségek két egyenértékű megfogalmazását tárják fel.[2].
Hálózati architektúra
Míg az egyszerűsített veszteségfüggvényünk egy ϵ modellt próbál betanítaniθ, még mindig nem határoztuk meg ennek a modellnek az architektúráját. Vegye figyelembe, hogy a csak A modell követelménye, hogy a bemeneti és kimeneti dimenziója azonos legyen.
Tekintettel erre a korlátozásra, talán nem meglepő, hogy a képdiffúziós modelleket általában U-Net-szerű architektúrákkal valósítják meg.
Reverse Process Decoder és L0
A fordított folyamat mentén haladó út számos transzformációból áll folyamatos feltételes Gauss-eloszlás mellett. A fordított folyamat végén emlékezzünk arra, hogy megpróbálunk előállítani egy kép, amely egész számú pixelértékekből áll. Ezért meg kell találnunk a megszerzésének módját diszkrét (log) valószínűségek minden lehetséges pixelértékhez az összes pixelben.
Ezt úgy lehet megtenni, hogy a fordított diffúziós lánc utolsó átmenetét an-ra állítjuk független diszkrét dekóder. Adott x kép valószínűségének meghatározásához0 adott x1, először függetlenséget írunk elő az adatdimenziók között:
ahol D az adatok és a felső index dimenziója i egy koordináta kinyerését jelzi. A cél most az, hogy meghatározzuk, mennyire valószínű az egyes egész értékek egy adott pixel esetében adott az enyhén zajos kép megfelelő pixelének lehetséges értékei közötti eloszlás t=1 időpontban:
ahol a pixeleloszlások t=1 esetén az alábbi többváltozós Gauss-ból származnak, amelynek átlós kovariancia mátrixa lehetővé teszi, hogy az eloszlást egyváltozós Gauss-féle szorzatra bontsuk, az adatok minden dimenziójához egyet:
Feltételezzük, hogy a képek 0,1,…,255-ös egész számokból állnak (a szabványos RGB képekhez hasonlóan), amelyeket lineárisan [−1,1]-re skáláztunk. Ezután a valódi vonalat kis „vödrökre” bontjuk, ahol egy adott skálázott pixelértékhez x, az adott tartományhoz tartozó gyűjtőhely: [x−1/255, x+1/255]. Egy pixelérték valószínűsége x, adott x-ben a megfelelő pixel egyváltozós Gauss-eloszlása1, az a az egyváltozós Gauss-eloszlás alatti terület a vödör közepén x.
Az alábbiakban láthatja az egyes gyűjtők területét a 0-ás középérték Gauss-féle valószínűségével, amely ebben az összefüggésben egy 255/2 (félfényesség) átlagos pixelértékkel rendelkező eloszlásnak felel meg. A piros görbe egy adott pixel eloszlását ábrázolja a t = 1 kép, és a területek megadják a megfelelő pixelérték valószínűségét a t = 0 kép.
Műszaki megjegyzés
Az első és az utolsó csoport az -inf és +inf értékig terjed a teljes valószínűség megőrzése érdekében.
Adott a t = 0 pixel értéke minden pixelhez, a p értékeθ(x0|x1) egyszerűen az ő termékük. Ezt a folyamatot tömören a következő egyenlet foglalja össze:
ahol
és a
Adott ez az egyenlet pθ(x0|x1), kiszámíthatjuk L végső tagjátstb. amely nem KL divergenciaként van megfogalmazva:
Végső célkitűzés
Amint az utolsó részben említettük, a szerzők [3] azt találta, hogy a kép zajkomponensének előrejelzése adott időlépésben a legjobb eredményt hozta. Végül a következő célt használják:
Ezért a diffúziós modellünk betanító és mintavételi algoritmusai tömören megragadhatók az alábbi ábrán:
Diffúziós modellelmélet összefoglalása
Ebben a részben részletesen belemerültünk a diffúziós modellek elméletébe. Könnyen belemerülhetünk a matematikai részletekbe, ezért az alábbiakban megjegyezzük a legfontosabb pontokat ebben a részben, hogy madártávlatból tájékozódjunk:
- Diffúziós modellünk paraméterezve a Markov lánc, ami azt jelenti, hogy látens változóink x1,…,xT csak az előző (vagy a következő) időlépéstől függ.
- A átmeneti eloszlások a Markov-láncban vannak Gauss, ahol a továbbítási folyamat variancia ütemezést igényel, és a fordított folyamat paraméterei megtanulásra kerülnek.
- A diffúziós folyamat biztosítja, hogy xT is aszimptotikus eloszlású izotróp Gauss-féle kellően nagy T-hez.
- Esetünkben a szórási ütemtervet rögzítették, de tanulható is. Rögzített ütemezések esetén a geometriai progresszió követése jobb eredményeket biztosíthat, mint a lineáris progresszió. Mindkét esetben a szórások általában növekszenek az idő előrehaladtával a sorozatban (azaz βi<βj az i
- A diffúziós modellek rendkívül rugalmas és engedje meg bármilyen olyan architektúra, amelynek bemeneti és kimeneti dimenziója azonos. Sok implementációt használ U-Net-szerű architektúrák.
- A képzési cél a képzési adatok valószínűségének maximalizálása. Ez a modell paramétereinek hangolásában nyilvánul meg minimalizálja az adatok negatív logaritmi valószínűségének variációs felső határát.
- A célfüggvényben szereplő szinte minden kifejezés beírható KL eltérések Markov-feltevésünk eredményeként. Ezek az értékek kiszámíthatóvá válik Tekintettel arra, hogy Gauss-rendszert használunk, ezért kihagyjuk a Monte Carlo-közelítés végrehajtásának szükségességét.
- Végső soron a egyszerűsített képzési cél Egy adott látens változó zajkomponensét megjósló függvény betanítása a legjobb és legstabilabb eredményt adja.
- A diszkrét dekóder A fordított diffúziós folyamat utolsó lépéseként a pixelértékek logó valószínűségének meghatározására szolgál.
A diffúziós modellek eme magas szintű áttekintésével elménkben, nézzük meg, hogyan használhatunk diffúziós modelleket a PyTorchban.
Diffúziós modellek a PyTorchban
Noha a diffúziós modelleket még nem demokratizálták olyan mértékben, mint a gépi tanulás más régebbi architektúráit/megközelítéseit, továbbra is rendelkezésre állnak megvalósítások. A diffúziós modell használatának legegyszerűbb módja a PyTorchban a denoising-diffusion-pytorch
csomag, amely az ebben a cikkben tárgyalthoz hasonló képdiffúziós modellt valósít meg. A csomag telepítéséhez egyszerűen írja be a következő parancsot a terminálba:
pip install denoising_diffusion_pytorch
Minimális példa
A modell betanításához és a képek generálásához először importáljuk a szükséges csomagokat:
import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion
Ezután meghatározzuk a hálózati architektúránkat, jelen esetben egy U-Net-et. Az dim
paraméter határozza meg a tereptárgyleképezések számát az első lefelé mintavétel előtt, és a dim_mults
paraméter szorzószámokat biztosít ehhez az értékhez és az egymást követő lefelé mintavételezéshez:
model = Unet(
dim = 64,
dim_mults = (1, 2, 4, 8)
)
Most, hogy a hálózati architektúránk definiált, meg kell határoznunk magát a diffúziós modellt. Átadjuk az imént definiált U-Net modellt számos paraméterrel együtt – a generálandó képek mérete, a diffúziós folyamat időlépéseinek száma, valamint az L1 és L2 normák közötti választás.
diffusion = GaussianDiffusion(
model,
image_size = 128,
timesteps = 1000, # number of steps
loss_type = 'l1' # L1 or L2
)
Most, hogy a diffúziós modellt meghatározták, itt az ideje a képzésnek. Véletlenszerű adatokat generálunk a betanításhoz, majd a szokásos módon betanítjuk a diffúziós modellt:
training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()
A modell betanítása után végre képeket generálhatunk a segítségével sample()
módszer a diffusion
tárgy. Itt 4 képet generálunk, amelyek csak zajok, mivel edzési adataink véletlenszerűek voltak:
sampled_images = diffusion.sample(batch_size = 4)
Képzés az egyéni adatokról
A denoising-diffusion-pytorch
csomag lehetővé teszi a diffúziós modell betanítását egy adott adatkészletre. Egyszerűen cserélje ki a 'path/to/your/images'
karakterlánc az adatkészlet-könyvtár elérési útjával a Trainer()
alatt lévő objektumot, és módosítsa image_size
a megfelelő értékre. Ezután egyszerűen futtassa a kódot a modell betanításához, majd mintavételezéssel, mint korábban. Vegye figyelembe, hogy a PyTorch-ot úgy kell lefordítani, hogy a CUDA engedélyezve legyen a használatához Trainer
osztály:
from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet(
dim = 64,
dim_mults = (1, 2, 4, 8)
).cuda()
diffusion = GaussianDiffusion(
model,
image_size = 128,
timesteps = 1000, # number of steps
loss_type = 'l1' # L1 or L2
).cuda()
trainer = Trainer(
diffusion,
'path/to/your/images',
train_batch_size = 32,
train_lr = 2e-5,
train_num_steps = 700000, # total training steps
gradient_accumulate_every = 2, # gradient accumulation steps
ema_decay = 0.995, # exponential moving average decay
amp = True # turn on mixed precision
)
trainer.train()
Alább látható a progresszív zajtalanítás a többváltozós Gauss-zajtól a fordított diffúzióhoz hasonló MNIST számjegyig:
Utószó
A diffúziós modellek koncepcionálisan egyszerű és elegáns megközelítést jelentenek az adatgenerálás problémájára. A legkorszerűbb eredményeik a nem versengő képzéssel kombinálva nagy magasságokba lendítették őket, és kialakuló státuszukat tekintve további javulás várható a következő években. A diffúziós modelleket különösen lényegesnek találták az olyan élvonalbeli modellek teljesítményéhez, mint például DALL-E2.
Referenciák
[1] Mély, felügyelet nélküli tanulás a nem egyensúlyi termodinamikával
[2] Generatív modellezés az adateloszlás gradienseinek becslésével
[3] Zajtalanító diffúziós valószínűségi modellek
[4] Továbbfejlesztett technikák a pontszám alapú generatív modellek képzéséhez
[5] Továbbfejlesztett zajcsökkentő diffúziós valószínűségi modellek
[6] A diffúziós modellek felülmúlják a GAN-okat a képszintézisben
[7] GLIDE: A fotorealisztikus képgenerálás és szerkesztés felé szövegvezérelt diffúziós modellekkel
[8] Hierarchikus szöveg-feltételes képgenerálás CLIP látensekkel
Tetszett ez a cikk? Iratkozzon fel további AI-kutatási frissítésekért.
Értesíteni fogunk, ha több ehhez hasonló összefoglaló cikket adunk ki.
Összefüggő