AI-modeller og platforme

Forståelse af Diffusionsmodeller: En Dybdykkende Undersøgelse af Generative AI

mm
Føj Unite.AI til dine foretrukne kilder på Google

Diffusionsmodeller er fremkommet som en kraftfuld tilgang i generativ AI, og producerer statiske resultater i billed-, lyd- og video-generering. I denne dybdegående tekniske artikel, vil vi udforske, hvordan diffusionsmodeller fungerer, deres nøgle-innovationer, og hvorfor de er blevet så succesfulde. Vi vil dække de matematiske grundlag, træningsprocessen, sampel-algoritmerne og de nyeste anvendelser af denne spændende nye teknologi.

Introduktion til Diffusionsmodeller

Diffusionsmodeller er en klasse af generative modeller, der lærer at gradvist fjernstøje data ved at omvende en diffusionsproces. Den centrale idé er at starte med ren støj og iterativt forfine den til en højkvalitetsprøve fra måldistributionen.

Denne tilgang blev inspireret af ikke-ligevægts termodynamik – specifikt, processen med at omvende diffusionsproces for at genskabe struktur. I sammenhæng med maskinel læring, kan vi tænke på det som at lære at omvende den gradvise tilføjelse af støj til data.

Nogle af de vigtigste fordele ved diffusionsmodeller inkluderer:

  • Statisk billedkvalitet, overgående GAN’er i mange tilfælde
  • Stabil træning uden adversarial dynamik
  • Høj parallelisering
  • Fleksibel arkitektur – enhver model, der kan kortlægge input til output af samme dimension, kan bruges
  • Stærk teoretisk grundlag

Lad os dykke dybere i, hvordan diffusionsmodeller fungerer.

Stokastiske differentialligninger styrer den fremadgående og omvendte proces i diffusionsmodeller. Den fremadgående SDE tilføjer støj til data, og gradvist transformerer det til en støjfordeling. Den omvendte SDE, styret af en lært score-funktion, fjerner progressivt støj, hvilket fører til generering af realistiske billeder fra tilfældig støj. Denne tilgang er nøgle til at opnå høj kvalitet i generative ydelse i kontinuerte tilstandsrum.

Den Fremadgående Diffusionsproces

Den fremadgående diffusionsproces starter med en datapunkt x₀, der er samplet fra den reelle datadistribution, og gradvist tilføjer gaussisk støj over T tidssteg til at producere stadig mere støjende versioner x₁, x₂, …, xT.

Ved hver tidssteg t, tilføjer vi en lille mængde støj i henhold til:

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

Hvor:

  • β_t er en variansschedule, der styrer, hvor meget støj der tilføjes ved hver trin
  • ε er tilfældig gaussisk støj

Denne proces fortsætter, indtil xT er næsten ren gaussisk støj.

Matematisk kan vi beskrive dette som en Markov-kæde:

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

Hvor N angiver en gaussisk distribution.

β_t-schedule er typisk valgt til at være lille for tidlige tidssteg og øge over tid. Almindelige valg inkluderer lineær, cosinus eller sigmoid-schedules.

Den Omvendte Diffusionsproces

Målet for en diffusionsmodel er at lære den omvendte proces – at starte med ren støj xT og gradvist fjernstøje den for at genskabe en ren prøve x₀.

Vi modellerer denne omvendte proces som:

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

Hvor μ_θ og σ_θ^2 er lært funktioner (typisk neurale netværk) parameteriseret af θ.

Den centrale innovation er, at vi ikke behøver at udtrykkelig modellere den fulde omvendte distribution. I stedet kan vi parameterisere den i forhold til den fremadgående proces, som vi kender.

Specifikt kan vi vise, at den optimale omvendte proces-gennemsnit μ* er:

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

Hvor:

  • α_t = 1 – β_t
  • ε_θ er en lært støjprediktionsnetværk

Dette giver os et simpelt mål – træne et neuralt netværk ε_θ til at forudsige støjen, der blev tilføjet ved hver trin.

Træningsmål

Træningsmålet for diffusionsmodeller kan udledes fra variationel inferens. Efter nogen forenkling, kommer vi til et simpelt L2-tab:

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

Hvor:

  • t er samplet uniformt fra 1 til T
  • x₀ er samplet fra træningsdata
  • ε er samplet gaussisk støj
  • x_t er konstrueret ved at tilføje støj til x₀ i henhold til den fremadgående proces

Med andre ord, træner vi modellen til at forudsige støjen, der blev tilføjet ved hver trin.

Modellaritektur

U-Net-arkitekturen er central for den afstøjningsproces i diffusionsmodellen. Den har en encoder-decoder-struktur med hop-forbindelser, der hjælper med at bevare fin-grænset detaljer under genskabelsesprocessen. Encoderen sampler progressivt inputbilledet, mens den samtidig fanger højniveaufunktioner, og decoderen sampler op de kodede funktioner for at genskabe billedet. Denne arkitektur er særligt effektiv i opgaver, der kræver præcis lokalisation, såsom billedsegmentering.

Støjprediktionsnetværket ε_θ kan bruge enhver arkitektur, der kortlægger input til output af samme dimension. U-Net-lignende arkitekturer er et populært valg, især til billedgenereringsopgaver.

En typisk arkitektur kan se således ud:


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

De centrale komponenter er:

  • U-Net-lignende arkitektur med hop-forbindelser
  • Tidsembedding til at konditionere på tidssteg
  • Fleksibel dybde og bredde

Sampelalgoritme

Når vi har trænet vores støjprediktionsnetværk ε_θ, kan vi bruge det til at generere nye prøver. Den grundlæggende sampelalgoritme er:

  1. Start med ren gaussisk støj xT
  2. For t = T til 1:
    • Forudsige støj: ε_θ(x_t, t)
    • Beregn gennemsnit: μ = 1/√(1-β_t) * (x_t - β_t/√(1-α_t) * ε_θ(x_t, t))
    • Samp: x_{t-1} ~ N(μ, σ_t^2 * I)
  3. Returnér x₀

Denne proces fjerner gradvist støj fra prøven, styret af vores lært støjprediktionsnetværk.

I praksis findes der forskellige sampelteknikker, der kan forbedre kvalitet eller hastighed:

  • DDIM-sampel: En deterministisk variant, der tillader færre sampeltrin
  • Ancestral sampel: Inkorporerer den lært varians σ_θ^2
  • Afvkortet sampel: Stopper tidligt for hurtigere generering

Her er en grundlæggende implementering af sampelalgoritmen:


<p>def sample(model, n_samples, device):
# Start med ren støj
x = torch.randn(n_samples, 3, 32, 32).to(device)</p>

<p>for t in reversed(range(1000)):
# Tilføj støj for at skabe 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># Forudsige og fjern støj
pred_noise = model(x_t, t_batch)
x = remove_noise(x_t, pred_noise, t)</p>

<p># Tilføj støj til næste trin (undtagen ved t=0)
if t &gt; 0:
noise = torch.randn_like(x)
x = add_noise(x, noise, t-1)</p>

return x

Matematikken Bag Diffusionsmodeller

For at virkelig forstå diffusionsmodeller, er det afgørende at dykke dybere i den matematik, der ligger til grund for dem. Lad os udforske nogle nøglekoncepter i mere detaljer:

Markov-kæde og Stokastiske Differentialligninger

Den fremadgående diffusionsproces i diffusionsmodeller kan ses som en Markov-kæde eller, i den kontinuerte grænse, som en stokastisk differentialligning (SDE). SDE-formuleringen giver en kraftfuld teoretisk ramme for at analysere og udvide diffusionsmodeller.

Den fremadgående SDE kan skrives som:

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

Hvor:

  • f(x,t) er drift-termen
  • g(t) er diffusionskoefficienten
  • dw er en Wiener-proces (Browniansk bevægelse)

Forskellige valg af f og g fører til forskellige typer diffusionsprocesser. For eksempel:

  • Varians Exploderende (VE) SDE: dx = √(d/dt σ²(t)) dw
  • Varians Bevarende (VP) SDE: dx = -0.5 β(t)xdt + √(β(t)) dw

At forstå disse SDE’er giver os mulighed for at udlede optimale sampelstrategier og udvide diffusionsmodeller til nye domæner.

Score Matching og Denoising Score Matching

Forbindelsen mellem diffusionsmodeller og score matching giver en anden værdifuld perspektiv. Score-funktionen defineres som gradienten af log-sandsynligheden:

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

Denoising score matching sigter mod at estimere denne score-funktion ved at træne en model til at fjernstøje lidt forstyrrede datapunkter. Dette mål viser sig at være ækvivalent til diffusionsmodel-træningsmålet i den kontinuerte grænse.

Denne forbindelse giver os mulighed for at udnytte teknikker fra score-baseret generativ modellering, såsom annealed Langevin-dynamik til sampel.

Avancerede Træningsteknikker

Vigtighedsampling

Den standard diffusionsmodel træning sampler tidssteg uniformt. Dog er ikke alle tidssteg lige vigtige for at lære. Vigtighedsamplingsteknikker kan bruges til at fokusere træning på de mest informative tidssteg.

En tilgang er at bruge en ikke-uniform distribution over tidssteg, vægtet af den forventede L2-norm af scoren:

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

Dette kan føre til hurtigere træning og forbedret prøvekvalitet.

Progressiv Destillation

Progressiv destillation er en teknik til at skabe hurtigere sampelmodeller uden at gå på kompromis med kvaliteten. Processen fungerer som følger:

  1. Træn en basis-diffusionsmodel med mange tidssteg (f.eks. 1000)
  2. Oprettelse af en elevmodel med færre tidssteg (f.eks. 100)
  3. Træn elev til at matche basismodellets afstøjningsproces
  4. Gentag trin 2-3, progressivt reducerer tidssteg

Dette giver mulighed for højkvalitetsgenerering med væsentligt færre afstøjningstrin.

Arkitektoniske Innovationer

Transformer-baserede Diffusionsmodeller

Selvom U-Net-arkitekturer har været populære til billed-diffusionsmodeller, har nyere arbejde udforsket brugen af transformer-arkitekturer. Transformer giver flere potentielle fordele:

  • Bedre håndtering af lange-afstandsafhængigheder
  • Fleksible konditioneringsmekanismer
  • Lettere skalering til større modelstørrelser

Modeller som DiT (Diffusion Transformers) har vist lovende resultater, og kan muligvis tilbyde en vej til endnu højere kvalitetsgenerering.

Hierarkiske Diffusionsmodeller

Hierarkiske diffusionsmodeller genererer data på flere skalaer, hvilket giver mulighed for både global kohærens og fin-grænset detaljer. Processen involverer typisk:

  1. Generering af et lavopløst output
  2. Progressivt op-sampling og forfining

Denne tilgang kan være særligt effektiv til højopløst billedgenerering eller lang-formet indholdsgenerering.

Avancerede Emner

Klassifikator-Fri Vejledning

Klassifikator-fri vejledning er en teknik til at forbedre prøvekvalitet og kontrollabilitet. Den centrale idé er at træne to diffusionsmodeller:

  1. En ubetinget model p(x_t)
  2. En betinget model p(x_t | y) hvor y er nogen konditioneringsinformation (f.eks. tekstprompt)

Under sampel, interpolerer vi mellem disse modeller:

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

Hvor w > 0 er en vejledningsskala, der styrer, hvor meget der skal lægges vægt på den betingede model.

Dette giver mulighed for stærkere konditionering uden at skulle gen-træne modellen. Det har været afgørende for succesen med tekst-til-billed-modeller som DALL-E 2 og Stable Diffusion.

Latent Diffusion

Latent Diffusionsmodel (LDM) processen involverer at kodificere inputdata til et latent rum, hvor diffusionsprocessen finder sted. Modellen tilføjer progressivt støj til den latente repræsentation af billedet, hvilket fører til generering af en støjende version, som derefter fjernstøjes ved hjælp af en U-Net-arkitektur. U-Net, styret af kryds-attention-mekanismer, integrerer information fra forskellige konditioneringskilder som semantiske kort, tekst og billedrepræsentationer, og genskaber billedet i pixelrummet. Denne proces er afgørende for at generere højkvalitetsbilleder med en kontrolleret struktur og ønskede attributter.

Dette giver flere fordele:

  • Hurtigere træning og sampel
  • Bedre håndtering af højopløste billeder
  • Lettere at inkorporere konditionering

Processen fungerer som følger:

  1. Træn en autoencoder til at komprimere billeder til et latent rum
  2. Træn en diffusionsmodel i dette latente rum
  3. Til generering, sampel i latent rum og dekod til pixels

Denne tilgang har været meget succesfuld og driver modeller som Stable Diffusion.

Konsistensmodeller

Konsistensmodeller er en ny innovation, der sigter mod at forbedre hastighed og kvalitet af diffusionsmodeller. Den centrale idé er at træne en enkelt model, der kan kortlægge fra enhver støjniveau direkte til det endelige output, uden at kræve iterativ afstøjning.

Dette opnås gennem en omhyggeligt designed tab-funktion, der påtvinger konsistens mellem forudsigelser på forskellige støjniveauer. Resultatet er en model, der kan generere højkvalitetsprøver i en enkelt fremadgang, hvilket dramatisk reducerer inferenstid.

Praktiske Råd til Træning af Diffusionsmodeller

Træning af højkvalitets diffusionsmodeller kan være udfordrende. Her er nogle praktiske råd til at forbedre træningsstabilitet og resultater:

  1. Gradientklipping: Brug gradientklipping til at forhindre eksploderende grader, især tidligt i træningen.
  2. EMA af modelvægte: Hold en eksponentiel flytende gennemsnit (EMA) af modelvægte til sampel, hvilket kan føre til mere stabil og højere kvalitetsgenerering.
  3. Dataforstyrrelse: For billedmodeller, kan simple forstyrrelser som tilfældige horisontale flips forbedre generalisering.
  4. Støjplanlægning: Eksperimenter med forskellige støjplaner (lineær, cosinus, sigmoid) for at finde, hvad der fungerer bedst for din data.
  5. Blandet præcisionstræning: Brug blandet præcisionstræning til at reducere hukommelsesbrug og accelerere træning, især for store modeller.
  6. Betinget generering: Selvom dit endelige mål er ubetinget generering, kan træning med betingelse (f.eks. på billedklasser) forbedre den overordnede prøvekvalitet.

Evaluering af Diffusionsmodeller

Evaluering af generative modeller er afgørende, men udfordrende. Her er nogle almindelige metrikker og tilgange:

Fréchet Inception Distance (FID)

FID er en bredt brugt metrik til at evaluere kvaliteten og diversiteten af genererede billeder. Den sammenligner statistikken af genererede prøver med reel data i feature-rummet af en fortrænet klassifikator (typisk InceptionV3).

Lavere FID-scores indikerer bedre kvalitet og mere realistiske distributioner. Dog har FID begrænsninger og bør ikke være den eneste metrik, der bruges.

Inception Score (IS)

Inception Score måler både kvaliteten og diversiteten af genererede billeder. Den bruger en fortrænet Inception-netværk til at beregne:

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

Hvor p(y|x) er den betingede klassefordeling for det genererede billede x.

Højere IS indikerer bedre kvalitet og diversitet, men det har kendte begrænsninger, især for datasæt, der er meget forskellige fra ImageNet.

Negativ Log-Sandsynlighed (NLL)

For diffusionsmodeller kan vi beregne den negative log-sandsynlighed af hold-ud-data. Dette giver en direkte måling af, hvor godt modellen passer til den sande datadistribution.

Dog kan NLL være beregningsmæssigt dyrt at estimere nøjagtigt for højdimensional data.

Menneskelig Evaluering

For mange anvendelser, især kreative, forbliver menneskelig evaluering afgørende. Dette kan involvere:

  • Side-ved-side-sammenligninger med andre modeller
  • Turing-test-lignende evalueringer
  • Opgave-specifikke evalueringer (f.eks. billed-underskrift for tekst-til-billed-modeller)

Selvom subjektiv, kan menneskelig evaluering fange aspekter af kvalitet, som automatiske metrikker mangler.

Diffusionsmodeller i Produktion

At implementere diffusionsmodeller i produktionsmiljøer stiller unikke udfordringer. Her er nogle overvejelser og bedste praksis:

Optimering til Inferens

  1. ONNX-eksport: Konverter modeller til ONNX-format for hurtigere inferens på tværs af forskellige hardware.
  2. Kvantificering: Brug teknikker som INT8-kvantificering til at reducere modelstørrelse og forbedre inferenstid.
  3. Caching: For betingede modeller, cache mellemresultater for den ubetingede model til at accelerere klassifikator-fri vejledning.
  4. Batch-behandling: Udnyt batch-behandling til at gøre effektivt brug af GPU-resurser.

Skalering

  1. Distribueret inferens: For høj-gennemstrømningsanvendelser, implementer distribueret inferens på tværs af multiple GPU’er eller maskiner.
  2. Adaptiv sampel: Tilpas dynamisk antallet af sampeltrin baseret på det ønskede kvalitets-hastigheds-tradeoff.
  3. Progressiv generering: For store outputs (f.eks. højopløste billeder), generer progressivt fra lav til høj opløsning for at give hurtigere første resultater.

Sikkerhed og Filtrering

  1. Indholdsfiltre: Implementer robuste indholdsfiltresystemer for at forhindre generering af skadeligt eller upassende indhold.
  2. Vandmærkning: Overvej at inkorporere usynlige vandmærker i genereret indhold for sporbarhed.

Anvendelser

Diffusionsmodeller har fundet succes i en bred vifte af generative opgaver:

Billedgenerering

Billedgenerering er, hvor diffusionsmodeller først opnåede fremragende resultater. Nogle bemærkelsesværdige eksempler inkluderer:

  • DALL-E 3: OpenAI’s tekst-til-billed-model, der kombinerer en CLIP-tekst-encoder med en diffusions-billed-decoder
  • Stable Diffusion: En åben kilde latent diffusionsmodel til tekst-til-billed-generering
  • Imagen: Googles tekst-til-billed-diffusionsmodel

Disse modeller kan generere højrealistiske og kreative billeder fra tekstbeskrivelser, overgående tidligere GAN-baserede tilgange.

Video-generering

Diffusionsmodeller er også blevet anvendt til video-generering:

  • Video Diffusionsmodeller: Genererer video ved at behandle tid som en ekstra dimension i diffusionsprocessen
  • Make-A-Video: Metas tekst-til-video-diffusionsmodel
  • Imagen Video: Googles tekst-til-video-diffusionsmodel

Disse modeller kan generere korte video-klip fra tekstbeskrivelser, åbner nye muligheder for indholdsskabelse.

3D-generering

Seneste arbejde har udvidet diffusionsmodeller til 3D-generering:

  • DreamFusion: Tekst-til-3D-generering ved hjælp af 2D-diffusionsmodeller
  • Point-E: OpenAI’s punkt-sky-diffusionsmodel til 3D-objektgenerering

Disse tilgange giver mulighed for at skabe 3D-aktiver fra tekstbeskrivelser, med anvendelser i gaming, VR/AR og produkt-design.

Udfordringer og Fremtidige Retninger

Selvom diffusionsmodeller har vist bemærkelsesværdig succes, er der stadig flere udfordringer og områder for fremtidig forskning:

Beregningseffektivitet

Den iterative sampelproces i diffusionsmodeller kan være langsom, især for højopløste outputs. Tilgange som latent diffusionsmodeller og konsistensmodeller sigter mod at adressere dette, men yderligere forbedringer i effektivitet er et aktivt forskningsområde.

Kontrollabilitet

Selvom teknikker som klassifikator-fri vejledning har forbedret kontrollabilitet, er der stadig arbejde at gøre for at give mulighed for mere fin-grænet kontrol over genererede outputs. Dette er særligt vigtigt for kreative anvendelser.

Multi-Modal Generering

Nuværende diffusionsmodeller excellerer i enkelt-modal generering (f.eks. billeder eller lyd). Udvikling af sandt multi-modal diffusionsmodeller, der kan generere uhindret på tværs af modalityper, er en spændende retning for fremtidigt arbejde.

Teoretisk Forståelse

Selvom diffusionsmodeller har stærke empiriske resultater, er der stadig mere at forstå om, hvorfor de fungerer så godt. At udvikle en dybere teoretisk forståelse kunne føre til yderligere forbedringer og nye anvendelser.

Konklusion

Diffusionsmodeller repræsenterer et skridt fremad i generativ AI, tilbydende højkvalitetsresultater på tværs af en række modalityper. Ved at lære at omvende en støjtilføjelsesproces, giver de en fleksibel og teoretisk grundlagt tilgang til generering.

Fra kreative værktøjer til videnskabelige simulationer, har evnen til at generere komplekse, højdimensionale data potentialet til at transformere mange fagområder. Dog er det vigtigt at nærme sig disse kraftfulde teknologier med omhu, overvejende både deres enorme potentiale og de etiske udfordringer, de stiller.

Jeg har brugt de sidste fem år på at dykke ned i den fascinerende verden af Machine Learning og Deep Learning. Min passion og ekspertise har ført mig til at bidrage til over 50 forskellige software-ingeniørprojekter, med en særlig fokus på AI/ML. Min fortsatte nysgerrighed har også ført mig mod Natural Language Processing, et felt jeg er ivrig efter at udforske yderligere.