Xlera8

Sissejuhatus masinõppe difusioonimudelitesse

See artikkel oli algselt avaldatud AssambleeAI ja avaldati autori loal uuesti TOPBOTSis.

Difusioonmudelid on generatiivsed mudelid, mis on viimastel aastatel kogunud märkimisväärset populaarsust ja seda mõjuval põhjusel. Peotäis põhjapanevaid töid, mis avaldati 2020. aastatel üksi on näidanud maailmale, milleks difusioonimudelid on võimelised, näiteks GAN-ide võitmiseks[6] pildi sünteesil. Viimasel ajal on praktikud näinud difusioonimudelite kasutamist DALL-E2, eelmisel kuul välja antud OpenAI piltide genereerimise mudel.

Erinevad DALL-E 2 loodud pildid (allikas).

Arvestades Diffusion Modelsi hiljutist edulainet, on paljud masinõppe praktikud kindlasti huvitatud oma sisemisest tööst. Selles artiklis uurime difusioonimudelite teoreetilised alusedja seejärel demonstreerige, kuidas luua a abil pilte Difusioonimudel PyTorchis. Sukeldume sisse!

Kui see põhjalik hariv sisu on teile kasulik, liituge meie AI meililistiga hoiatada, kui avaldame uut materjali. 

Difusioonimudelid – sissejuhatus

Difusioonimudelid on generatiivne mudelid, mis tähendab, et neid kasutatakse andmete genereerimiseks, mis on sarnased nendega, mille kohta neid koolitatakse. Põhimõtteliselt toimivad difusioonimudelid treeningandmete hävitamine Gaussi müra järjestikuse lisamise kaudu ja seejärel taastuma õppimine andmed poolt tagasikäik see müra tekitav protsess. Pärast koolitust saame kasutada difusioonimudelit andmete lihtsalt genereerimiseks juhuslikult valitud müra läbimine läbi õpitud müra vähendamise protsessi.

Hajutusmudeleid saab kasutada piltide genereerimiseks mürast (kohandatud allikas)

Täpsemalt on difusioonimudel varjatud muutuja mudel, mis kaardistatakse fikseeritud Markovi ahela abil varjatud ruumiga. See ahel lisab andmetele järk-järgult müra, et saada ligikaudne tagumine q(x1:T|x0), kus x1,…,xT on varjatud muutujad, mille mõõtmed on samad kui x0. Alloleval joonisel näeme sellist Markovi ahelat, mis on manifesteeritud pildiandmete jaoks.

Lõppkokkuvõttes muudetakse pilt asümptootiliselt puhtaks Gaussi müraks. The eesmärk difusioonimudeli väljaõpe on õppida tagasikäik protsess – st koolitus lkθ(xt-1|xt). Mööda seda ahelat tagurpidi liikudes saame genereerida uusi andmeid.

Difusioonmudelite eelised

Nagu eespool mainitud, on difusioonimudelite uurimine viimastel aastatel plahvatuslikult kasvanud. Inspireeritud mittetasakaalulisest termodünaamikast[1], Difusioonimudelid toodavad praegu Tipptasemel pildikvaliteet, mille näiteid näete allpool:

Lisaks tipptasemel pildikvaliteedile on difusioonimudelitel palju muid eeliseid, sealhulgas ei nõua võistlevat väljaõpet. Võistleva väljaõppe raskused on hästi dokumenteeritud; ja juhtudel, kui on olemas mittekonkureerivad alternatiivid, millel on võrreldav jõudlus ja treeningute tõhusus, on tavaliselt kõige parem neid kasutada. Treeningu tõhususe teemal on difusioonimudelitel ka täiendavad eelised skaleeritavus ja paralleelsus.

Kuigi tundub, et difusioonimudelid toodavad tulemusi peaaegu tühjast küljest, on nende tulemuste aluseks palju hoolikaid ja huvitavaid matemaatilisi valikuid ja üksikasju ning parimad tavad on kirjanduses endiselt arenemas. Vaatame nüüd üksikasjalikumalt difusioonimudelite aluseks olevat matemaatilist teooriat.

Difusioonimudelid – sügav sukeldumine

Nagu eespool mainitud, koosneb difusioonimudel a edasi protsess (Või difusiooniprotsess), milles nullpunktile (tavaliselt kujutisele) tehakse järk-järgult müra, ja a vastupidine protsess (Või pöörddifusiooniprotsess), milles müra muudetakse sihtjaotusest tagasi prooviks.

Kui müratase on piisavalt madal, saab edasisuunamisprotsessi diskreetimisahela üleminekuid seada tingimuslikele Gaussidele. Selle fakti kombineerimine Markovi eeldusega viib edasiliikumise protsessi lihtsa parameetriteni:

Matemaatiline märkus

Oleme rääkinud andmete rikkumisest lisades Gaussi müra, kuid esialgu võib olla ebaselge, kus me seda lisamist teostame. Ülaltoodud võrrandi kohaselt võtame ahela igas etapis lihtsalt valimi Gaussi jaotusest, mille keskmine on ahela eelmine väärtus (st kujutis).

Need kaks väidet on samaväärsed. See on

Põhjuse mõistmiseks kasutame väites tähistusviisi kerget kuritarvitamist

Kui lõplik implikatsioon tuleneb juhuslike suuruste summa ja nende jaotuste konvolutsiooni vahelisest matemaatilisest samaväärsusest – vt. sellel Wikipedia lehel rohkem informatsiooni.

Teisisõnu oleme näidanud, et eelmisest tingimusest tingitud ajasammu jaotuse kinnitamine Gaussi jaotuse keskmise kaudu on samaväärne väitega, et antud ajasammu jaotus on eelmise jaotus, millele on lisatud Gaussi müra. Jätsime kõrvale dispersioonigraafikuga kasutusele võetud skalaarid ja näitasime seda lihtsuse huvides ühe dimensiooni kohta, kuid sarnane tõestus kehtib ka mitme muutujaga Gausside kohta.

Kus β1,…,βT on dispersioonigraafik (kas õpitud või fikseeritud), mis hea käitumise korral tagab selle xT on piisavalt suure T jaoks peaaegu isotroopne Gauss.

Arvestades Markovi eeldust, on varjatud muutujate ühine jaotus Gaussi tingimuslike ahelasiirete korrutis (muudetud allikas).

Nagu varem mainitud, tuleb difusioonimudelite "maagia" sisse vastupidine protsess. Koolituse käigus õpib mudel seda difusiooniprotsessi ümber pöörama, et uusi andmeid genereerida. Alustades puhtast Gaussi mürast p(xT):=N(xT,0,I) mudel õpib ühisjaotuse pθ(x0:T) nagu

kus õpitakse tundma Gaussi üleminekute ajast sõltuvaid parameetreid. Pange tähele, et Markovi formulatsioon kinnitab, et antud pöörddifusioonisiirde jaotus sõltub ainult eelmisest ajaetapist (või järgmisest ajast, olenevalt sellest, kuidas te seda vaatate):

koolitus

Difusioonimudelit koolitab vastupidiste Markovi üleminekute leidmine, mis maksimeerivad treeningandmete tõenäosust. Praktikas hõlmab koolitus samaväärselt negatiivse logaritmi tõenäosuse variatsiooni ülemise piiri minimeerimist.

Märke detail

Pange tähele, et Ljne on tehniliselt an ülemine bound (ELBO negatiiv), mida me püüame minimeerida, kuid nimetame seda kui Ljne kooskõla kirjandusega.

Püüame L ümber kirjutadajne poolest Kullback-Leibler (KL) Lahknevused. KL Divergents on asümmeetriline statistiline kauguse mõõt, mis näitab, kui palju on üks tõenäosusjaotus P erineb võrdlusjaotusest Q. Oleme huvitatud L sõnastusestjne KL-i lahknemiste osas, sest meie Markovi ahela üleminekujaotused on Gaussi ja Gausside vahelisel KL-i lahknemisel on suletud vorm.

Mis on KL-i erinevus?

KL-i lahknemise matemaatiline kuju pidevjaotuste jaoks on

Topeltribad näitavad, et funktsioon ei ole oma argumentide suhtes sümmeetriline.

Allpool näete erineva jaotuse KL-i lahknemist P (sinine) võrdlusjaotusest Q (punane). Roheline kõver näitab funktsiooni integraali sees ülaltoodud KL-i lahknemise definitsioonis ja kõveraalune kogupindala tähistab KL-i lahknemise väärtust. P Alates Q igal ajahetkel väärtus, mis kuvatakse ka numbriliselt.

Valamine Lvlb KL-i lahknevuste osas

Nagu eelnevalt mainitud, on võimalik [1] L ümber kirjutadajne peaaegu täielikult KL-i erinevuste osas:

kus

Tuletamise üksikasjad

Variatsioonipiir on võrdne

Asendades jaotused nende definitsioonidega, arvestades meie Markovi eeldust, saame

Kasutame logireegleid, et muuta avaldis logide summaks, ja seejärel tõmbame välja esimese liikme

Kasutades Bayesi teoreemi ja meie Markovi eeldust, muutub see avaldis

Seejärel jagame logireeglite abil keskmise termini pooleks

Isoleerides teise termini, näeme

Ühendades selle tagasi meie võrrandisse Ljne, meil on

Kasutades logireegleid, korraldame ümber

d8

Järgmisena märgime järgmise samaväärsuse KL-i lahknevuse jaoks mis tahes kahe jaotuse korral:

Lõpuks, rakendades seda samaväärsust eelmisele avaldisele, jõuame selleni

Edaspidise protsessi konditsioneerimine x-il0 aastal Lt-1 tulemuseks on jälgitav vorm, mis viib kõik KL lahknevused on võrdlused Gausside vahel. See tähendab, et lahknevusi saab täpselt arvutada pigem suletud vormiga avaldiste kui Monte Carlo hinnangute abil[3].

Mudeli valikud

Kui meie eesmärgifunktsiooni matemaatiline alus on loodud, peame nüüd tegema mitu valikut, kuidas meie difusioonimudelit rakendada. Edasisuunamisprotsessi jaoks on ainus nõutav valik dispersioonigraafiku määratlemine, mille väärtused edastusprotsessi ajal üldiselt suurenevad.

Pöördprotsessi jaoks valime palju Gaussi jaotuse parameetrite/mudeli arhitektuuri(d). Pange tähele kõrge paindlikkuse tase mida difusioonimudelid endale lubavad – ainult Meie arhitektuuri nõue on, et selle sisendil ja väljundil oleks sama mõõtmed.

Nende valikute üksikasju uurime allpool üksikasjalikumalt.

Edasi protsess ja LT

Nagu eespool märgitud, peame edastusprotsessi osas määratlema dispersiooni ajakava. Eelkõige seadsime need olema ajast sõltuvad konstandidjättes tähelepanuta asjaolu, et neid saab õppida. Näiteks[3], lineaarne ajakava alates β1= 10-4 β-leTVõib kasutada =0.2 või geomeetrilist seeriat.

Olenemata valitud konkreetsetest väärtustest annab asjaolu, et dispersioonigraafik on fikseeritud, LT muutudes meie õpitavate parameetrite kogumi konstantiks, võimaldades meil seda koolituse osas ignoreerida.

Pöördprotsess ja L1:T-1

Nüüd käsitleme pöördprotsessi määratlemisel vajalikke valikuid. Tuletame meelde ülalt, et Markovi vastupidised üleminekud määratlesime Gaussi üleminekuna:

Nüüd peame määratlema μ funktsionaalsed vormidθ või Σθ. Kuigi Σ parameetrite määramiseks on keerulisemaid viiseθ[5], me lihtsalt seadsime

See tähendab, et eeldame, et mitme muutujaga Gauss on identse dispersiooniga sõltumatute Gausside korrutis, dispersiooniväärtus, mis võib aja jooksul muutuda. Meie seadke need kõrvalekalded võrdväärseteks meie edasiste protsesside dispersioonide ajakavaga.

Arvestades seda Σ uut sõnastustθ, meil on

mis võimaldab meil muutuda

et

kus erinevuse esimene liige on x lineaarne kombinatsioont ja x0 mis sõltub dispersioonigraafikust βt. Selle funktsiooni täpne vorm ei ole meie eesmärkide jaoks asjakohane, kuid selle leiate [3].

Ülaltoodud proportsiooni tähtsus seisneb selles μ kõige lihtsam parameetrite määramineθ lihtsalt ennustab difusiooni tagumist keskmist. Oluline on see, et autorid [3] leidis tegelikult, et koolitus μθ ennustada müra mis tahes ajahetkel annab paremaid tulemusi. Eelkõige lase

kus

See toob kaasa järgmise alternatiivse kadufunktsiooni, mille autorid [3] on leitud, et see toob kaasa stabiilsema treeningu ja paremad tulemused:

Autorid [3] märgivad ka selle difusioonimudelite formulatsiooni seoseid Langevini dünaamikal põhinevate skoori sobitavate generatiivsete mudelitega. Tõepoolest, näib, et difusioonimudelid ja skooripõhised mudelid võivad olla sama mündi kaks külge, mis sarnaneb lainepõhise kvantmehaanika ja maatriksipõhise kvantmehaanika sõltumatu ja samaaegse arenguga, mis paljastab sama nähtuse kaks samaväärset formulatsiooni.[2].

Võrgu arhitektuur

Kuigi meie lihtsustatud kadufunktsioon püüab treenida mudelit ϵθ, pole me veel selle mudeli arhitektuuri määratlenud. Pange tähele, et ainult Mudeli nõue on, et selle sisendi ja väljundi mõõtmed oleksid identsed.

Arvestades seda piirangut, pole võib-olla üllatav, et kujutise hajutusmudeleid rakendatakse tavaliselt U-Neti-sarnaste arhitektuuridega.

Pöördprotsessi dekooder ja L0

Pöördprotsessi tee koosneb paljudest teisendustest pideva tingimusliku Gaussi jaotuse korral. Pöördprotsessi lõpus tuletage meelde, et proovime luua pilt, mis koosneb täisarvulistest pikslite väärtustest. Seetõttu peame leidma viisi, kuidas seda saada diskreetsed (log) tõenäosused iga võimaliku piksli väärtuse kohta kõigis pikslites.

Seda tehakse nii, et pöörddifusiooniahela viimaseks üleminekuks määratakse an sõltumatu diskreetne dekooder. Antud kujutise x tõenäosuse määramiseks0 antud x1, kehtestame esmalt andmete mõõtmete vahel sõltumatuse:

kus D on andmete ja ülaindeksi mõõtmed i tähistab ühe koordinaadi väljavõtmist. Nüüd on eesmärk kindlaks teha, kui tõenäoline on iga täisarv antud piksli jaoks antud jaotus väikese müraga pildi vastava piksli võimalike väärtuste vahel ajahetkel t=1:

kus pikslite jaotused t=1 jaoks on tuletatud allolevast mitme muutujaga Gaussi maatriksist, mille diagonaalne kovariatsioonimaatriks võimaldab jagada jaotuse ühemõõtmeliste Gaussi korrutisteks, üks iga andmemõõtme kohta:

Eeldame, et pildid koosnevad täisarvudest 0,1,…,255 (nagu standardsed RGB-pildid), mis on skaleeritud lineaarselt väärtuseni [−1,1]. Seejärel jagame tegeliku rea väikesteks "ämbriteks", kus antud skaleeritud piksliväärtuse jaoks x, on selle vahemiku salp [x−1/255, x+1/255]. Piksli väärtuse tõenäosus x, arvestades vastava piksli ühemõõtmelist Gaussi jaotust x-is1, on ala selle ühemõõtmelise Gaussi jaotuse all ämbris, mille keskpunkt on x.

Altpoolt näete kõigi nende salkade pindala koos nende tõenäosustega Gaussi keskväärtuse 0 jaoks, mis antud kontekstis vastab jaotusele keskmise piksli väärtusega 255/2 (pool heledus). Punane kõver tähistab konkreetse piksli jaotust t = 1 pilt ja alad annavad vastava piksli väärtuse tõenäosuse t = 0 pilt.

Tehniline märkus

Esimene ja viimane salm ulatuvad välja -inf ja +inf, et säilitada kogu tõenäosus.

Arvestades a t = 0 piksli väärtus iga piksli jaoks, p väärtusθ(x0|x1) on lihtsalt nende toode. See protsess on lühidalt kapseldatud järgmise võrrandiga:

kus

ja

Arvestades seda võrrandit pθ(x0|x1), saame arvutada L lõpliku liikmejne mis ei ole sõnastatud KL-i lahknemisena:

Lõplik eesmärk

Nagu viimases osas mainitud, autorid [3] leidis, et pildi mürakomponendi ennustamine antud ajahetkel andis parimad tulemused. Lõppkokkuvõttes kasutavad nad järgmist eesmärki:

Seetõttu saab meie difusioonimudeli koolitus- ja proovivõtu algoritme lühidalt kujutada alloleval joonisel:

Difusioonimudeli teooria kokkuvõte

Selles osas sukeldusime üksikasjalikult difusioonimudelite teooriasse. Matemaatilistesse üksikasjadesse võib olla lihtne takerduda, seega märgime allpool selle jaotise kõige olulisemad punktid, et hoida end linnulennult orienteeritud:

  1. Meie difusioonimudel on parameetritega a Markovi kett, mis tähendab, et meie varjatud muutujad x1,…,xT sõltuvad ainult eelmisest (või järgmisest) ajasammust.
  2. üleminekujaotused Markovi ahelas on Gaussi keel, kus edasisuunamise protsess nõuab dispersioonigraafikut ja pöördprotsessi parameetrid õpitakse.
  3. Difusiooniprotsess tagab, et xT is asümptootiliselt jaotunud isotroopse Gaussina piisavalt suure T jaoks.
  4. Meie puhul on variatsioonigraafik fikseeriti, aga seda saab ka õppida. Fikseeritud ajakavade puhul võib geomeetrilise progressiooni järgimine anda paremaid tulemusi kui lineaarne progressioon. Mõlemal juhul suurenevad dispersioonid üldiselt aja jooksul seerias (st βij i jaoks
  5. Difusioonimudelid on väga paindlik ja lubada mistahes arhitektuur, mille sisendi ja väljundi mõõtmed on samad. Kasutatakse paljusid rakendusi U-Neti moodi arhitektuurid.
  6. koolituse eesmärk on treeningandmete tõenäosuse maksimeerimiseks. See väljendub mudeli parameetrite häälestamises minimeerida andmete negatiivse logaritmi tõenäosuse variatsiooni ülemist piiri.
  7. Peaaegu kõiki sihtfunktsiooni termineid saab üle kanda kui KL lahknevused meie Markovi oletuse tulemusena. Need väärtused muutuda talutavaks arvutamiseks arvestades, et me kasutame Gaussi, jättes seetõttu Monte Carlo lähendamise vajaduse tegemata.
  8. Lõppkokkuvõttes kasutades a lihtsustatud koolituse eesmärk Funktsiooni treenimine, mis ennustab antud varjatud muutuja mürakomponenti, annab parimad ja stabiilsemad tulemused.
  9. diskreetne dekooder kasutatakse pöördhajutusprotsessi viimase etapina piksliväärtuste logaritmiliste tõenäosuste saamiseks.

Kui meie mõtetes on see kõrgetasemeline ülevaade difusioonimudelitest, vaatame edasi, kuidas PyTorchis difusioonimudeleid kasutada.

Difusioonimudelid PyTorchis

Kuigi hajutusmudeleid ei ole veel samal määral demokratiseeritud kui teisi masinõppe vanemaid arhitektuure/lähenemisviise, on endiselt saadaval rakendusi. Lihtsaim viis difusioonimudeli kasutamiseks PyTorchis on kasutada denoising-diffusion-pytorch pakett, mis rakendab selles artiklis käsitletud kujutise hajutamise mudelit. Paketi installimiseks tippige lihtsalt terminali järgmine käsk:

pip install denoising_diffusion_pytorch

Minimaalne näide

Mudeli koolitamiseks ja piltide genereerimiseks impordime esmalt vajalikud paketid:

import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion

Järgmisena määratleme oma võrguarhitektuuri, antud juhul U-Neti. The dim parameeter määrab objektikaartide arvu enne esimest allaproovimist ja dim_mults parameeter pakub selle väärtuse korrutised ja järjestikused allaproovid:

model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
)

Nüüd, kui meie võrguarhitektuur on määratletud, peame defineerima difusioonimudeli enda. Edastame äsja määratletud U-Neti mudeli koos mitme parameetriga – genereeritavate piltide suurus, ajasammude arv difusiooniprotsessis ja valik L1 ja L2 normide vahel.

diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
)

Nüüd, kui difusioonimudel on määratletud, on aeg treenida. Loome juhuslikud andmed treenimiseks ja seejärel treenime difusioonimudelit tavapärasel viisil:

training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()

Kui mudel on koolitatud, saame lõpuks luua pilte kasutades sample() meetod diffusion objektiks. Siin genereerime 4 pilti, mis on ainult müra, kuna meie treeningandmed olid juhuslikud:

sampled_images = diffusion.sample(batch_size = 4)

Kohandatud andmete koolitus

denoising-diffusion-pytorch pakett võimaldab teil treenida ka konkreetse andmestiku difusioonimudelit. Lihtsalt asendage 'path/to/your/images' string koos andmestiku kataloogi teega Trainer() objekti allpool ja muuta image_size sobiva väärtuseni. Pärast seda lihtsalt käivitage kood mudeli koolitamiseks ja seejärel proovige nagu varem. Pange tähele, et PyTorch peab olema kompileeritud nii, et CUDA on lubatud, et seda kasutada Trainer klass:

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()

Allpool näete progresseeruvat müra vähendamist mitme muutujaga Gaussi mürast kuni MNIST-i numbriteni, mis sarnanevad pöörddifusiooniga:

Lõppsõna

Difusioonimudelid on kontseptuaalselt lihtne ja elegantne lähenemine andmete genereerimise probleemile. Nende tipptasemel tulemused koos mittekonkureeriva väljaõppega on viinud nad kõrgele ja lähiaastatel on oodata edasist paranemist, arvestades nende kujunevat staatust. Eelkõige on leitud, et difusioonmudelid on tipptasemel mudelite, nagu näiteks, jõudluse jaoks olulised DALL-E2.

viited

[1] Sügav juhendamata õppimine mittetasakaalulise termodünaamika abil

[2] Generatiivne modelleerimine andmejaotuse gradientide hindamisel

[3] Denoising difusiooni tõenäosusmudelid

[4] Täiustatud tehnikad skooripõhiste generatiivsete mudelite treenimiseks

[5] Täiustatud müra summutamise difusiooni tõenäosuslikud mudelid

[6] Difusioonmudelid võidavad GAN-e kujutise sünteesil

[7] GLIDE: fotorealistliku kujutise genereerimise ja redigeerimise poole tekstiga juhitud hajutusmudelitega

[8] Hierarhiline tekstitingimustega kujutise genereerimine CLIP-i latentidega

Kas teile meeldib see artikkel? Registreeruge, et saada rohkem AI-uuringute värskendusi.

Anname teile teada, kui avaldame rohkem selliseid kokkuvõtlikke artikleid.

Jututuba koos meiega

Tere! Kuidas ma teid aidata saan?