Modele și platforme AI

Înțelegerea modelelor de difuzie: o analiză profundă a inteligenței artificiale generative

mm
Adaugă Unite.AI la sursele tale preferate pe Google

Modelele de difuzie au apărut ca o abordare puternică în inteligența artificială generativă, producând rezultate de ultimă generație în generarea de imagini, audio și video. În acest articol tehnic detaliat, vom explora cum funcționează modelele de difuzie, inovațiile lor cheie și de ce au devenit atât de reușite. Vom acoperi fundamentele matematice, procesul de antrenare, algoritmii de eșantionare și aplicațiile de ultimă generație ale acestei tehnologii noi și interesante.

Introducere în modelele de difuzie

Modelele de difuzie sunt o clasă de modele generative care învață să denoiseze treptat datele prin inversarea unui proces de difuzie. Ideea de bază este să începeți cu zgomot pur și să rafinați treptat într-un eșantion de înaltă calitate din distribuția țintă.

Acestă abordare a fost inspirată de termodinamica neechilibrată – în special, procesul de inversare a difuziei pentru a recupera structura. În contextul învățării automatice, putem gândi la acest proces ca la învățarea de a inversa adăugarea treptată de zgomot la date.

Unele avantaje cheie ale modelelor de difuzie includ:

  • Calitatea imaginilor de ultimă generație, depășind GAN-urile în multe cazuri
  • Antrenare stabilă fără dinamică adversă
  • Paralelizare ridicată
  • Arhitectură flexibilă – orice model care mapăază intrări la ieșiri de aceeași dimensiune poate fi utilizat
  • Fundamente teoretice solide

Să ne adâncim mai mult în modul în care funcționează modelele de difuzie.

Sursă: Song et al.

Sursă: Song et al.

Ecuațiile diferențiale stocastice guvernează procesele directe și inverse în modelele de difuzie. Ecuația diferențială stocastică directă adaugă zgomot la date, transformându-le treptat într-o distribuție de zgomot. Ecuația diferențială stocastică inversă, condusă de o funcție de scor învățată, elimină treptat zgomotul, ducând la generarea de imagini realiste din zgomot aleator. Această abordare este cheia pentru a obține o performanță generativă de înaltă calitate în spații de stare continue.

Procesul de difuzie directă

Procesul de difuzie directă începe cu un punct de date x₀ eșantionat din distribuția reală de date și adaugă treptat zgomot gaussian pe parcursul a T pași de timp pentru a produce versiuni din ce în ce mai zgomotoase x₁, x₂, …, xT.

La fiecare pas de timp t, adăugăm o cantitate mică de zgomot conform:

x_t = √(1 - β_t) * x_{t-1} + √(β_t) * ε

Unde:

  • β_t este un program de varianță care controlează cât zgomot se adaugă la fiecare pas
  • ε este zgomot gaussian aleator

Acest proces continuă până când xT este aproape pur zgomot gaussian.

Matematic, putem descrie acest proces ca o lanț Markov:

q(x_t | x_{t-1}) = N(x_t; √(1 - β_t) * x_{t-1}, β_t * I)

Unde N denotă o distribuție gaussiană.

Programul β_t este de obicei ales să fie mic pentru pașii de timp inițiali și să crească în timp. Opțiuni comune includ programe liniare, cosinus sau sigmoid.

Procesul de difuzie inversă

Scopul unui model de difuzie este de a învăța inversul acestui proces – de a începe cu zgomot pur xT și de a-l denoise treptat pentru a recupera un eșantion curat x₀.

Modelăm acest proces invers ca:

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_θ^2(x_t, t))

Unde μ_θ și σ_θ^2 sunt funcții învățate (de obicei rețele neuronale) parametrizate de θ.

Inovația cheie este că nu avem nevoie să modelăm explicit distribuția inversă completă. În schimb, putem parametriza-o în termeni de procesul direct, pe care îl cunoaștem.

În special, putem arăta că media optimă a procesului invers μ* este:

μ* = 1/√(1 - β_t) * (x_t - β_t/√(1 - α_t) * ε_θ(x_t, t))

Unde:

  • α_t = 1 – β_t
  • ε_θ este o rețea de predicție a zgomotului

Acest lucru ne oferă un obiectiv simplu – antrenați o rețea neuronală ε_θ pentru a prezice zgomotul care a fost adăugat la fiecare pas.

Obiectivul de antrenare

Obiectivul de antrenare pentru modelele de difuzie poate fi derivat din inferența variatională. După o serie de simplificări, ajungem la o pierdere L2 simplă:

L = E_t,x₀,ε [ ||ε - ε_θ(x_t, t)||² ]

Unde:

  • t este eșantionat uniform din 1 la T
  • x₀ este eșantionat din datele de antrenare
  • ε este zgomot gaussian aleator
  • x_t este construit prin adăugarea de zgomot la x₀ conform procesului direct

Cu alte cuvinte, antrenăm modelul pentru a prezice zgomotul care a fost adăugat la fiecare pas.

Arhitectura modelului

Arhitectura U-Net este centrală pentru pașii de denoising în modelul de difuzie. Aceasta prezintă o structură encoder-decoder cu conexiuni de salt care ajută la păstrarea detaliilor fine în timpul procesului de reconstrucție. Encoderul sampilează progresiv imaginea de intrare, capturând caracteristici de nivel înalt, iar decoderul sampilează înapoi caracteristicile encode pentru a reconstrui imaginea. Această arhitectură este deosebit de eficientă în sarcini care necesită localizare precisă, cum ar fi segmentarea imaginilor.

Rețeaua de predicție a zgomotului ε_θ poate utiliza orice arhitectură care mapăază intrări la ieșiri de aceeași dimensiune. Arhitecturile de tip U-Net sunt o alegere populară, în special pentru sarcinile de generare de imagini.

O arhitectură tipică ar putea arăta astfel:


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

Componentele cheie sunt:

  • Arhitectură de tip U-Net cu conexiuni de salt
  • Încorporare a timpului pentru a condiționa pe baza pasului de timp
  • Adâncime și lățime flexibile

Algoritmul de eșantionare

Odată ce am antrenat rețeaua noastră de predicție a zgomotului ε_θ, putem să o utilizăm pentru a genera noi eșantioane. Algoritmul de eșantionare de bază este:

  1. Începeți cu zgomot gaussian pur xT
  2. Pentru t = T la 1:
    • Preziceți zgomotul: ε_θ(x_t, t)
    • Calculați media: μ = 1/√(1-β_t) * (x_t - β_t/√(1-α_t) * ε_θ(x_t, t))
    • Eșantionați: x_{t-1} ~ N(μ, σ_t^2 * I)
  3. Returnați x₀

Acest proces denoisează treptat eșantionul, condus de rețeaua noastră de predicție a zgomotului învățată.

În practică, există diverse tehnici de eșantionare care pot îmbunătăți calitatea sau viteza:

  • DDIM sampling: O variantă deterministă care permite mai puține pași de eșantionare
  • Ancestral sampling: Incorporă varianța învățată σ_θ^2
  • Truncated sampling: Se oprește mai devreme pentru o generare mai rapidă

Iată o implementare de bază a algoritmului de eșantionare:


<p>def sample(model, n_samples, device):
# Începeți cu zgomot
x = torch.randn(n_samples, 3, 32, 32).to(device)</p>

<p>for t in reversed(range(1000)):
# Adăugați zgomot pentru a crea x_t
t_batch = torch.full((n_samples,), t, device=device)
noise = torch.randn_like(x)
x_t = add_noise(x, noise, t)</p>

<p># Preziceți și îndepărtați zgomotul
pred_noise = model(x_t, t_batch)
x = remove_noise(x_t, pred_noise, t)</p>

<p># Adăugați zgomot pentru următorul pas (exceptând la t=0)
if t &gt; 0:
noise = torch.randn_like(x)
x = add_noise(x, noise, t-1)</p>

return x

Matematica din spatele modelelor de difuzie

Pentru a înțelege cu adevărat modelele de difuzie, este crucial să ne adâncim mai mult în matematica care le susține. Să explorăm unele concepte cheie în mai multe detalii:

Lanț Markov și ecuații diferențiale stocastice

Procesul de difuzie direct în modelele de difuzie poate fi văzut ca un lanț Markov sau, în limita continuă, ca o ecuație diferențială stocastică (SDE). Formularea SDE oferă un cadru teoretic puternic pentru analizarea și extinderea modelelor de difuzie.

Ecuația diferențială stocastică directă poate fi scrisă ca:

dx = f(x,t)dt + g(t)dw

Unde:

  • f(x,t) este termenul de derivă
  • g(t) este coeficientul de difuzie
  • dw este un proces Wiener (mișcare browniană)

Alegerea diferită a lui f și g conduce la diferite tipuri de procese de difuzie. De exemplu:

  • Variance Exploding (VE) SDE: dx = √(d/dt σ²(t)) dw
  • Variance Preserving (VP) SDE: dx = -0.5 β(t)xdt + √(β(t)) dw

Înțelegerea acestor SDE ne permite să derivăm strategii de eșantionare optime și să extindem modelele de difuzie în domenii noi.

Potrivirea scorului și potrivirea scorului de denoising

Conexiunea dintre modelele de difuzie și potrivirea scorului oferă o altă perspectivă valoroasă. Funcția de scor este definită ca gradientul log-probabilității de densitate:

s(x) = ∇x log p(x)

Potrivirea scorului de denoising își propune să estimeze această funcție de scor prin antrenarea unui model pentru a denoisa puncte de date ușor perturbate. Acest obiectiv se dovedește a fi echivalent cu obiectivul de antrenare al modelului de difuzie în limita continuă.

Această conexiune ne permite să utilizăm tehnici din modelarea generativă bazată pe scor, cum ar fi dinamica Langevin anihilată pentru eșantionare.

Tehnici avansate de antrenare

Eșantionarea prin importanță

Modelul de difuzie standard eșantionează pașii de timp uniform. Cu toate acestea, nu toți pașii de timp sunt la fel de importanți pentru învățare. Tehnicile de eșantionare prin importanță pot fi utilizate pentru a se concentra antrenarea pe pașii de timp cel mai informativi.

O abordare este de a utiliza o distribuție neuniformă peste pașii de timp, ponderată de norma L2 așteptată a scorului:

p(t) ∝ E[||s(x_t, t)||²]

Acest lucru poate duce la o antrenare mai rapidă și la o calitate a eșantioanelor îmbunătățită.

Distilarea progresivă

Distilarea progresivă este o tehnică pentru a crea modele de eșantionare mai rapide fără a compromite calitatea. Procesul funcționează astfel:

  1. Antrenați un model de difuzie de bază cu mulți pași de timp (de exemplu, 1000)
  2. Creați un model de student cu mai puțini pași de timp (de exemplu, 100)
  3. Antrenați modelul de student pentru a se potrivi cu procesul de denoising al modelului de bază
  4. Repetați pașii 2-3, reducând treptat numărul de pași de timp

Acest lucru permite generarea de înaltă calitate cu mult mai puțini pași de denoising.

Inovații arhitecturale

Modele de difuzie bazate pe transformatori

Deși arhitecturile U-Net au fost populare pentru modelele de difuzie de imagine, lucrările recente au explorat utilizarea arhitecturilor de transformatori. Transformatorii oferă mai multe avantaje potențiale:

  • Manipularea mai bună a dependențelor pe termen lung
  • Mecanisme de condiționare mai flexibile
  • Scala mai ușoară la dimensiuni mai mari de model

Modele precum DiT (Diffusion Transformers) au arătat rezultate promițătoare, oferind poate o cale către o calitate și mai ridicată de generare.

Modele de difuzie ierarhice

Modelele de difuzie ierarhice generează date la multiple scale, permițând atât coerență globală, cât și detalii fine. Procesul tipic implică:

  1. Generarea unei ieșiri de rezoluție joasă
  2. Refinarea progresivă și upsampling

Acestă abordare poate fi deosebit de eficientă pentru generarea de imagini de înaltă rezoluție sau conținut de lungă durată.

Teme avansate

Ghidare fără clasificator

Ghidarea fără clasificator este o tehnică pentru a îmbunătăți calitatea eșantioanelor și controlabilitatea. Ideea cheie este de a antrena două modele de difuzie:

  1. Un model necondiționat p(x_t)
  2. Un model condiționat p(x_t | y), unde y este o informație de condiționare (de exemplu, text prompt)

În timpul eșantionării, interpolăm între aceste modele:

ε_θ = (1 + w) * ε_θ(x_t | y) - w * ε_θ(x_t)

Unde w > 0 este o scară de ghidare care controlează cât de mult se pune accentul pe modelul condiționat.

Acest lucru permite o condiționare mai puternică fără a fi nevoie să reantrenați modelul. A fost crucial pentru succesul modelelor de text-la-imagine precum DALL-E 2 și Stable Diffusion.

Difuzie latentă

Modelul de difuzie latentă (LDM) implică codificarea datelor de intrare într-un spațiu latent în care are loc procesul de difuzie. Modelul adaugă treptat zgomot la reprezentarea latentă a imaginii, ducând la generarea unei versiuni zgomotoase, care este apoi denoizată folosind o arhitectură U-Net. U-Net-ul, ghidat de mecanisme de atenție încrucișată, integrează informații din diverse surse de condiționare, cum ar fi hărți semantice, text și reprezentări de imagine, pentru a reconstrui imaginea în spațiul pixelilor. Acest proces este crucial pentru generarea de imagini de înaltă calitate cu structură controlată și atribute dorite.

Acest lucru oferă mai multe avantaje:

  • Antrenare și eșantionare mai rapide
  • Manipularea mai bună a imaginilor de înaltă rezoluție
  • Incorporarea mai ușoară a condiționării

Procesul funcționează astfel:

  1. Antrenați un autoencoder pentru a comprima imagini într-un spațiu latent
  2. Antrenați un model de difuzie în acest spațiu latent
  3. Pentru generare, eșantionați în spațiul latent și decodați în pixeli

Acestă abordare a fost extrem de de succes, alimentând modele precum Stable Diffusion.

Modele de consistență

Modelele de consistență sunt o inovație recentă care își propune să îmbunătățească viteza și calitatea modelelor de difuzie. Ideea cheie este de a antrena un singur model care poate mapa direct de la orice nivel de zgomot la ieșirea finală, fără a necesita denoising iterativ.

Acest lucru se realizează printr-o funcție de pierdere proiectată cu atenție, care impune consistență între predicțiile la diferite niveluri de zgomot. Rezultatul este un model care poate genera eșantioane de înaltă calitate într-o singură trecere înainte, accelerând dramatic inferența.

Sfaturi practice pentru antrenarea modelelor de difuzie

Antrenarea unor modele de difuzie de înaltă calitate poate fi o provocare. Iată câteva sfaturi practice pentru a îmbunătăți stabilitatea antrenării și rezultatele:

  1. Clipping de gradient: Utilizați clipping de gradient pentru a preveni explozia gradientelor, în special la începutul antrenării.
  2. Media mobilă a greutăților modelului: Păstrați o medie mobilă a greutăților modelului pentru eșantionare, ceea ce poate duce la o generare mai stabilă și de înaltă calitate.
  3. Augmentarea datelor: Pentru modelele de imagine, simplele augmentări cum ar fi fliparea orizontală aleatorie pot îmbunătăți generalizarea.
  4. Programarea zgomotului: Experimentați cu diferite programe de zgomot (liniar, cosinus, sigmoid) pentru a găsi cea mai bună abordare pentru datele dvs.
  5. Antrenarea cu precizie mixtă: Utilizați antrenarea cu precizie mixtă pentru a reduce utilizarea memoriei și a accelera antrenarea, în special pentru modele mari.
  6. Generarea condiționată: Chiar dacă obiectivul final este generarea necondiționată, antrenarea cu condiționare (de exemplu, pe clase de imagini) poate îmbunătăți calitatea generală a eșantioanelor.

Evaluarea modelelor de difuzie

Evaluarea corespunzătoare a modelelor generative este crucială, dar și o provocare. Iată câteva metrice și abordări comune:

Distanța Fréchet Inception (FID)

FID este o metrică larg utilizată pentru evaluarea calității și diversității imaginilor generate. Aceasta compară statisticile eșantioanelor generate cu datele reale în spațiul de caracteristici al unui clasificator preantrenat (de obicei InceptionV3).

Scorurile FID mai mici indică o calitate și o distribuție mai realistă. Cu toate acestea, FID are limitări și nu ar trebui să fie singura metrică utilizată.

Scorul Inception (IS)

Scorul Inception măsoară atât calitatea, cât și diversitatea imaginilor generate. Acesta utilizează o rețea Inception preantrenată pentru a calcula:

IS = exp(E[KL(p(y|x) || p(y))])

Unde p(y|x) este distribuția condiționată a clasei pentru imaginea generată x.

Un scor Inception mai mare indică o calitate și o diversitate mai bună, dar are limitări cunoscute, în special pentru seturi de date foarte diferite de ImageNet.

Log-likelihood negativ (NLL)

Pentru modelele de difuzie, putem calcula log-likelihoodul negativ al datelor reținute. Acesta oferă o măsură directă a cât de bine se potrivește modelul cu distribuția reală de date.

Cu toate acestea, NLL poate fi computațional costisitor de estimat cu acuratețe pentru date de înaltă dimensiune.

Evaluarea umană

Pentru multe aplicații, în special cele creative, evaluarea umană rămâne crucială. Acesta poate implica:

  • Comparații lângă-lângă cu alte modele
  • Evaluări de tip test Turing
  • Evaluări specifice sarcinii (de exemplu, generare de subtitrări pentru modele text-la-imagine)

Deși subiectivă, evaluarea umană poate capta aspecte ale calității pe care metricele automate le omit.

Modele de difuzie în producție

Implementarea modelelor de difuzie în medii de producție prezintă provocări unice. Iată câteva considerații și practici recomandate:

Optimizarea pentru inferență

  1. Export ONNX: Convertiți modelele în format ONNX pentru o inferență mai rapidă pe diverse hardware.
  2. Cuantizare: Utilizați tehnici precum cuantizarea INT8 pentru a reduce dimensiunea modelului și a îmbunătăți viteza de inferență.
  3. Cache: Pentru modele condiționate, cache-uați rezultatele intermediare ale modelului necondiționat pentru a accelera ghidarea fără clasificator.
  4. Procesare în lot: Valorificați batch-urile pentru a face uz eficient de resursele GPU.

Scala

  1. Inferență distribuită: Pentru aplicații de înaltă producție, implementați inferența distribuită pe multiple GPU-uri sau mașini.
  2. Eșantionare adaptivă: Ajustați dinamic numărul de pași de eșantionare în funcție de compromisul dorit între calitate și viteză.
  3. Generare progresivă: Pentru ieșiri mari (de exemplu, imagini de înaltă rezoluție), generați progresiv de la rezoluție joasă la înaltă pentru a oferi rezultate inițiale mai rapide.

Siguranță și filtrare

  1. Filtrare conținut: Implementați sisteme robuste de filtrare a conținutului pentru a preveni generarea de conținut dăunător sau inadecvat.
  2. Marcare watermark: Luați în considerare incorporarea de watermarkuri invizibile în conținutul generat pentru urmărire.

Aplicații

Modelele de difuzie au găsit succes într-o gamă largă de sarcini generative:

Generare de imagini

Generarea de imagini este domeniul în care modelele de difuzie au câștigat inițial prominență. Unele exemple notabile includ:

  • DALL-E 3: Modelul de text-la-imagine al OpenAI, combinând un encoder de text CLIP cu un decoder de imagine de difuzie
  • Stable Diffusion: Un model de difuzie latentă deschis pentru generare de imagini text-la-imagine
  • Imagen: Modelul de text-la-imagine de difuzie al Google (GOOGL )

Aceste modele pot genera imagini extrem de realiste și creative din descrieri textuale, depășind abordările GAN anterioare.

Generare de video

Modelele de difuzie au fost de asemenea aplicate la generarea de video:

  • Modele de difuzie video: Generarea de video prin tratarea timpului ca o dimensiune suplimentară în procesul de difuzie
  • Make-A-Video: Modelul de text-la-video de difuzie al Meta
  • Imagen Video: Modelul de text-la-video de difuzie al Google

Aceste modele pot genera clipuri video scurte din descrieri textuale, deschizând noi posibilități pentru crearea de conținut.

Generare 3D

Lucrări recente au extins modelele de difuzie la generarea 3D:

  • DreamFusion: Generare text-la-3D utilizând modele de difuzie 2D
  • Point-E: Modelul de difuzie de puncte al OpenAI pentru generarea de obiecte 3D

Aceste abordări permit crearea de active 3D din descrieri textuale, cu aplicații în jocuri, VR/AR și design de produs.

Provocări și direcții viitoare

Deși modelele de difuzie au arătat un succes remarcabil, există încă mai multe provocări și domenii de cercetare viitoare:

Eficiență computațională

Procesul de eșantionare iterativ al modelelor de difuzie poate fi lent, în special pentru ieșiri de înaltă rezoluție. Abordări precum difuzia latentă și modelele de consistență își propun să adreseze această problemă, dar îmbunătățirile ulterioare în eficiență reprezintă un domeniu activ de cercetare.

Controlabilitate

Deși tehnici precum ghidarea fără clasificator au îmbunătățit controlabilitatea, există încă lucruri de făcut pentru a permite un control mai fin asupra ieșirilor generate. Acest lucru este deosebit de important pentru aplicații creative.

Generare multi-modală

Modelele de difuzie actuale excelează la generarea mono-modală (de exemplu, imagini sau audio). Dezvoltarea unor modele de difuzie multi-modale care pot genera fără efort între modalități este o direcție de lucru viitoare interesantă.

Înțelegere teoretică

Deși modelele de difuzie au rezultate empirice puternice, există încă multe de înțeles despre de ce funcționează atât de bine. Dezvoltarea unei înțelegeri teoretice mai profunde ar putea duce la îmbunătățiri suplimentare și aplicații noi.

Concluzie

Modelele de difuzie reprezintă un pas înainte în inteligența artificială generativă, oferind rezultate de înaltă calitate într-o gamă de modalități. Prin învățarea de a inversa un proces de adăugare a zgomotului, ele oferă o abordare flexibilă și teoretic fundamentată pentru generare.

De la unelte creative la simulări științifice, capacitatea de a genera date complexe și de înaltă dimensiune are potențialul de a transforma multe domenii. Cu toate acestea, este important să abordăm aceste tehnologii puternice într-un mod gândit, luând în considerare atât potențialul lor imens, cât și provocările etice pe care le prezintă.

Am petrecut ultimii cinci ani scufundându-mă în lumea fascinantă a Machine Learning și Deep Learning. Pasinea și expertiza mea m-au condus să contribui la peste 50 de proiecte diverse de inginerie software, cu un focus deosebit pe AI/ML. Curiozitatea mea în continuare m-a atras și spre Natural Language Processing, un domeniu pe care sunt dornic să îl explorez mai departe.