AI-modeller och plattformar

Förstå diffusionmodeller: En djupdykning i generativ AI

mm
Lägg till Unite.AI bland dina föredragna källor på Google

Diffusionmodeller har uppstått som en kraftfull approach inom generativ AI, producerande state-of-the-art-resultat i bild-, ljud- och videogenerering. I denna djupgående tekniska artikel kommer vi att utforska hur diffusionmodeller fungerar, deras nyckelinnovationer och varför de har blivit så framgångsrika. Vi kommer att täcka de matematiska grunderna, träningsprocessen, sampelalgoritmer och de senaste tillämpningarna av denna spännande nya teknologi.

Introduktion till diffusionmodeller

Diffusionmodeller är en klass av generativa modeller som lär sig att gradvis rena data genom att vända en diffusionsprocess. Kärnidén är att börja med ren brus och iterativt förbättra det till en högkvalitativ sampel från måldistributionen.

Denna approach inspirerades av icke-jämvikts-termodynamik – specifikt, processen att vända diffusion för att återställa struktur. I sammanhanget med maskinlärning kan vi tänka på det som att lära sig att vända den gradvisa tillägg av brus till data.

Några nyckelfördelar med diffusionmodeller inkluderar:

  • State-of-the-art-bildkvalitet, överträffande GANs i många fall
  • Stabil träningsprocess utan adversarial dynamik
  • Högst parallelliserbar
  • Flexibel arkitektur – vilken modell som helst som kartar indata till utdata av samma dimensionalitet kan användas
  • Stark teoretisk grund

Låt oss dyka djupare in i hur diffusionmodeller fungerar.

Källa: Song et al.

Källa: Song et al.

Stokastiska differentialekvationer styr den främre och bakre processen i diffusionmodeller. Den främre SDE lägger till brus till data, gradvis omvandlar det till en brusfördelning. Den bakre SDE, guidad av en lärd poängfunktion, progressivt avlägsnar brus, vilket leder till generering av realistiska bilder från slumpmässigt brus. Denna approach är nyckeln till att uppnå högkvalitativ generativ prestanda i kontinuerliga tillståndsrum

Den främre diffusionsprocessen

Den främre diffusionsprocessen börjar med en datapunkt x₀ sampad från den verkliga datadistributionen och lägger gradvis till Gaussiskt brus under T tidssteg för att producera alltmer bullriga versioner x₁, x₂, …, xT.

Vid varje tidssteg t lägger vi till en liten mängd brus enligt:

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

Där:

  • β_t är en variansschema som kontrollerar hur mycket brus som läggs till vid varje steg
  • ε är slumpmässigt Gaussiskt brus

Denna process fortsätter tills xT är nästan rent Gaussiskt brus.

Matematiskt kan vi beskriva detta som en Markov-kedja:

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

Där N betecknar en Gaussisk fördelning.

β_t-schemat väljs vanligtvis att vara litet för tidiga tidssteg och ökar över tiden. Vanliga val inkluderar linjära, cosinus eller sigmoid-scheman.

Den bakre diffusionsprocessen

Målet med en diffusionmodell är att lära sig den omvända processen – att börja med rent brus xT och progressivt rena det för att återställa en ren sampel x₀.

Vi modellerar denna omvända process som:

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

Där μ_θ och σ_θ^2 är lärd funktioner (vanligtvis neurala nätverk) parameteriserade av θ.

Nyckelinnovationen är att vi inte behöver explicit modellera den fullständiga omvända fördelningen. Istället kan vi parameterisera den i termer av den främre processen, som vi känner till.

Specifikt kan vi visa att den optimala omvända processen medel μ* är:

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

Där:

  • α_t = 1 – β_t
  • ε_θ är en lärd brusprediktionsnätverk

Detta ger oss ett enkelt mål – träna ett neurala nätverk ε_θ för att förutsäga bruset som lades till vid varje steg.

Träningsmål

Träningsmålet för diffusionmodeller kan härledas från variational inferens. Efter någon förenkling, anländer vi till ett enkelt L2-förlust:

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

Där:

  • t är sampad uniformt från 1 till T
  • x₀ är sampad från träningsdata
  • ε är sampad Gaussiskt brus
  • x_t är konstruerad genom att lägga till brus till x₀ enligt den främre processen

Med andra ord, tränar vi modellen för att förutsäga bruset som lades till vid varje tidssteg.

Modellarkitektur

U-Net-arkitekturen är central för den reningsskede i diffusionmodellen. Den har en encoder-decoder-struktur med hoppeanslutningar som hjälper till att bevara fina detaljer under rekonstruktionsprocessen. Encodern sampar progressivt ner indata medan den fångar högnivåfunktioner, och decodern sampar upp de kodade funktionerna för att rekonstruera bilden. Denna arkitektur är särskilt effektiv i uppgifter som kräver exakt lokaliseringsförmåga, såsom bildsegmentering.

Brusprediktionsnätverket ε_θ kan använda vilken arkitektur som helst som kartar indata till utdata av samma dimensionalitet. U-Net-liknande arkitekturer är ett populärt val, särskilt för bildgenereringsuppgifter.

En typisk arkitektur kan se ut så här:


<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 viktigaste komponenterna är:

  • U-Net-liknande arkitektur med hoppeanslutningar
  • Tidsinbäddning för att villkora på tidssteg
  • Flexibel djup och bredd

Sampelalgoritm

När vi har tränat vårt brusprediktionsnätverk ε_θ, kan vi använda det för att generera nya sampel. Den grundläggande sampelalgoritmen är:

  1. Börja med rent Gaussiskt brus xT
  2. För t = T till 1:
    • Förutsäg brus: ε_θ(x_t, t)
    • Beräkna medel: μ = 1/√(1-β_t) * (x_t - β_t/√(1-α_t) * ε_θ(x_t, t))
    • Sampel: x_{t-1} ~ N(μ, σ_t^2 * I)
  3. Returnera x₀

Denna process renar gradvis sampeln, guidad av vår lärd brusprediktionsnätverk.

I praktiken finns det olika sampelmetoder som kan förbättra kvalitet eller hastighet:

  • DDIM-sampel: En deterministisk variant som tillåter färre sampelsteg
  • Ancestral sampel: Inkorporerar den lärd variansen σ_θ^2
  • Trunkerad sampel: Stannar tidigt för snabbare generering

Här är en grundläggande implementering av sampelalgoritmen:


<p>def sample(model, n_samples, device):
# Börja med rent brus
x = torch.randn(n_samples, 3, 32, 32).to(device)</p>

<p>for t in reversed(range(1000)):
# Lägg till brus för att skapa 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># Förutsäg och ta bort brus
pred_noise = model(x_t, t_batch)
x = remove_noise(x_t, pred_noise, t)</p>

<p># Lägg till brus för nästa steg (utom vid t=0)
if t &gt; 0:
noise = torch.randn_like(x)
x = add_noise(x, noise, t-1)</p>

return x

Matematiken bakom diffusionmodeller

För att verkligen förstå diffusionmodeller, är det avgörande att gräva djupare i matematiken som ligger till grund för dem. Låt oss utforska några nyckelbegrepp i mer detalj:

Markov-kedja och stokastiska differentialekvationer

Den främre diffusionsprocessen i diffusionmodeller kan ses som en Markov-kedja eller, i den kontinuerliga gränsen, som en stokastisk differentialekvation (SDE). SDE-formuleringen ger en kraftfull teoretisk ram för att analysera och utöka diffusionmodeller.

Den främre SDE kan skrivas som:

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

Där:

  • f(x,t) är drifthastigheten
  • g(t) är diffusionskoefficienten
  • dw är en Wiener-process (bruniansk rörelse)

Olika val av f och g leder till olika typer av diffusionsprocesser. Till exempel:

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

Att förstå dessa SDE:er tillåter oss att härleda optimala sampelstrategier och utöka diffusionmodeller till nya domäner.

Poängmatchning och rening av poäng

Anslutningen mellan diffusionmodeller och poängmatchning ger en annan värdefull perspektiv. Poängfunktionen definieras som gradienten av log-sannolikhetstätheten:

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

Rening av poäng syftar till att uppskatta denna poängfunktion genom att träna en modell för att rena lätt perturberade datapunkter. Detta mål visar sig vara ekvivalent med diffusionmodellens träningsmål i den kontinuerliga gränsen.

Denna anslutning tillåter oss att utnyttja tekniker från poängbaserad generativ modellering, såsom annealed Langevin-dynamik för sampel.

Avancerade träningsmetoder

Viktad sampel

Den standardmässiga diffusionmodellsträningen sampar tidssteg uniformt. Men inte alla tidssteg är lika viktiga för lärande. Viktad sampeltekniker kan användas för att fokusera träningen på de mest informativa tidsstegen.

En approach är att använda en icke-uniform fördelning över tidssteg, viktad av den förväntade L2-normen av poängen:

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

Detta kan leda till snabbare träning och förbättrad sampelkvalitet.

Progressiv destillering

Progressiv destillering är en teknik för att skapa snabbare sampelmodeller utan att offra kvalitet. Processen fungerar som följer:

  1. Träna en basdiffusionmodell med många tidssteg (t.ex. 1000)
  2. Skapa en elevmodell med färre tidssteg (t.ex. 100)
  3. Träna eleven för att matcha basmodellens reningssprocess
  4. Upprepa steg 2-3, progressivt reducerande tidssteg

Detta tillåter högkvalitativ generering med betydligt färre reningsssteg.

Arkitektoniska innovationer

Transformatorbaserade diffusionmodeller

Medan U-Net-arkitekturer har varit populära för bild-diffusionmodeller, har nylig forskning utforskat användningen av transformatorarkitekturer. Transformatorer erbjuder flera potentiella fördelar:

  • Bättre hantering av långväga beroenden
  • Mer flexibla villkorsmekanismer
  • Lättare skalning till större modellstorlekar

Modeller som DiT (Diffusion Transformers) har visat lovande resultat, vilket potentiellt kan erbjuda en väg till ännu högre kvalitetsgenerering.

Hierarkiska diffusionmodeller

Hierarkiska diffusionmodeller genererar data på flera skalor, vilket möjliggör både global sammanhållning och fina detaljer. Processen involverar vanligtvis:

  1. Generera en lågupplöst utdata
  2. Progressivt öka och förbättra

Denna approach kan vara särskilt effektiv för högupplöst bildgenerering eller långformigt innehållsgenerering.

Avancerade ämnen

Klassificeringsfri vägledning

Klassificeringsfri vägledning är en teknik för att förbättra sampelkvalitet och kontrollerbarhet. Nyckelidén är att träna två diffusionmodeller:

  1. En ovillkorlig modell p(x_t)
  2. En villkorlig modell p(x_t | y) där y är någon villkorsinformation (t.ex. textprompt)

Under sampel interpolerar vi mellan dessa modeller:

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

Där w > 0 är en vägledningsskala som kontrollerar hur mycket vi ska betona den villkorliga modellen.

Detta tillåter starkare villkor utan att behöva omträna modellen. Det har varit avgörande för framgången med text-till-bild-modeller som DALL-E 2 och Stable Diffusion.

Latent diffusion

Latent Diffusion Model (LDM) processen involverar att koda indata i ett latent utrymme där diffusionsprocessen sker. Modellen lägger gradvis till brus till den latenta representationen av bilden, vilket leder till generering av en bullrig version, som sedan rengörs med en U-Net-arkitektur. U-Net, guidad av cross-attention-mekanismer, integrerar information från olika villkorskällor som semantiska kartor, text och bildrepresentationer, och återställer slutligen bilden i pixelutrymmet. Denna process är avgörande för att generera högkvalitativa bilder med kontrollerad struktur och önskade attribut.

Detta erbjuder flera fördelar:

  • Snabbare träning och sampel
  • Bättre hantering av högupplösta bilder
  • Lättare att införa villkor

Processen fungerar som följer:

  1. Träna en autoencoder för att komprimera bilder till ett latent utrymme
  2. Träna en diffusionmodell i detta latenta utrymme
  3. För generering, sampel i latent utrymme och avkoda till pixlar

Denna approach har varit mycket framgångsrik och driver modeller som Stable Diffusion.

Konsistensmodeller

Konsistensmodeller är en ny innovation som syftar till att förbättra hastigheten och kvaliteten på diffusionmodeller. Nyckelidén är att träna en enda modell som kan kartas från vilken brusnivå som helst direkt till den slutliga utmatningen, utan att kräva iterativ rening.

Detta uppnås genom en noggrant utformad förlustfunktion som tvingar konsistens mellan förutsägelser på olika brusnivåer. Resultatet är en modell som kan generera högkvalitativa sampel i en enda framåtriktad pass, dramatiskt påskyndande inferens.

Praktiska tips för att träna diffusionmodeller

Att träna högkvalitativa diffusionmodeller kan vara utmanande. Här är några praktiska tips för att förbättra träningsstabilitet och resultat:

  1. Gradientklippning: Använd gradientklippning för att förhindra exploderande grader, särskilt tidigt i träningen.
  2. EMA av modellvikter: Håll ett exponentiellt glidande medelvärde av modellvikter för sampel, vilket kan leda till mer stabil och högkvalitativ generering.
  3. Dataaugmentering: För bildmodeller, enkla augmenteringar som slumpmässiga horisontella vändningar kan förbättra generaliserbarhet.
  4. Brusschema: Experimentera med olika brusscheman (linjära, cosinus, sigmoid) för att hitta vad som fungerar bäst för din data.
  5. Blandad precisionsträning: Använd blandad precisionsträning för att minska minnesanvändning och påskynda träning, särskilt för stora modeller.
  6. Villkorsgenerering: Även om ditt slutmål är ovillkorlig generering, kan träning med villkor (t.ex. på bildklasser) förbättra övergripande sampelkvalitet.

Utvardering av diffusionmodeller

Att utvärdera generativa modeller är avgörande men utmanande. Här är några vanliga mått och tillvägagångssätt:

Fréchet Inception Distance (FID)

FID är ett allmänt använt mått för att utvärdera kvalitet och mångfald hos genererade bilder. Det jämför statistiken för genererade sampel med riktiga data i funktionrymden för en förtränad klassificerare (vanligtvis InceptionV3).

Lägre FID-poäng indikerar bättre kvalitet och mer realistiska fördelningar. Men FID har begränsningar och bör inte vara det enda måttet som används.

Inception-poäng

Inception-poäng mäter både kvalitet och mångfald hos genererade bilder. Det använder en förtränad Inception-nätverk för att beräkna:

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

Där p(y|x) är den villkorliga klassfördelningen för genererad bild x.

Högre IS indikerar bättre kvalitet och mångfald, men det har kända begränsningar, särskilt för datamängder som är mycket olika ImageNet.

Negativ log-sannolikhet

För diffusionmodeller kan vi beräkna den negativa log-sannolikheten för hållna ut data. Detta ger en direkt mått på hur väl modellen passar den sanna datadistributionen.

Men NLL kan vara beräkningsmässigt dyrt att uppskatta exakt för högdimensionella data.

Mänsklig utvärdering

För många tillämpningar, särskilt kreativa, förblir mänsklig utvärdering avgörande. Detta kan involvera:

  • Sidan-till-sidan-jämförelser med andra modeller
  • Turing-test-liknande utvärderingar
  • Uppgiftsspecifika utvärderingar (t.ex. bildbeskrivning för text-till-bild-modeller)

Medan subjektiv, kan mänsklig utvärdering fånga aspekter av kvalitet som automatiserade mått missar.

Diffusionmodeller i produktion

Att distribuera diffusionmodeller i produktionsmiljöer presenterar unika utmaningar. Här är några överväganden och bästa praxis:

Optimering för inferens

  1. ONNX-export: Konvertera modeller till ONNX-format för snabbare inferens över olika hårdvara.
  2. Kvantifiering: Använd tekniker som INT8-kvantifiering för att minska modellstorlek och förbättra inferenshastighet.
  3. Cachning: För villkorsmodeller, cacha mellanliggande resultat för den ovillkorliga modellen för att påskynda klassificeringsfri vägledning.
  4. Batchbearbetning: Utnyttja batchbearbetning för att göra effektivt användning av GPU-resurser.

Skalning

  1. Distribuerad inferens: För höghastighetstillämpningar, implementera distribuerad inferens över flera GPU:er eller maskiner.
  2. Adaptiv sampel: Dynamiskt justera antalet sampelsteg baserat på önskad kvalitet-hastighetsavvägning.
  3. Progressiv generering: För stora utmatningar (t.ex. högupplösta bilder), generera progressivt från låg till hög upplösning för att tillhandahålla snabbare initiala resultat.

Säkerhet och filtrering

  1. Innehållsfiltrering: Implementera robusta innehållsfiltreringssystem för att förhindra generering av skadligt eller olämpligt innehåll.
  2. Vattenstämpel: Överväg att införa osynliga vattenstämplar i genererat innehåll för spårbarhet.

Tillämpningar

Diffusionmodeller har funnit framgång i en mängd olika generativa uppgifter:

Bildgenerering

Bildgenerering är där diffusionmodeller först fick uppmärksamhet. Några noterbara exempel inkluderar:

  • DALL-E 3: OpenAI:s text-till-bild-modell, som kombinerar en CLIP-textencoder med en diffusion-bilddekoder
  • Stable Diffusion: En öppen källkods-latent diffusionmodell för text-till-bild-generering
  • Imagen: Googles text-till-bild-diffusionmodell

Dessa modeller kan generera högkvalitativa och kreativa bilder från textbeskrivningar, överträffande tidigare GAN-baserade tillvägagångssätt.

Videogenerering

Diffusionmodeller har också applicerats på videogenerering:

  • Video Diffusion Models: Genererar video genom att behandla tid som en extra dimension i diffusionsprocessen
  • Make-A-Video: Metas text-till-video-diffusionmodell
  • Imagen Video: Googles text-till-video-diffusionmodell

Dessa modeller kan generera korta videoklipp från textbeskrivningar, öppnande upp nya möjligheter för innehållsskapande.

3D-generering

Nylig forskning har utökat diffusionmodeller till 3D-generering:

  • DreamFusion: Text-till-3D-generering med 2D-diffusionmodeller
  • Point-E: OpenAI:s punktmolndiffusionmodell för 3D-objektgenerering

Dessa tillvägagångssätt möjliggör skapandet av 3D-tillgångar från textbeskrivningar, med tillämpningar inom spel, VR/AR och produktutformning.

Utmaningar och framtida riktningar

Medan diffusionmodeller har visat anmärkningsvärd framgång, finns det fortfarande flera utmaningar och områden för framtida forskning:

Beräkningseffektivitet

Den iterativa sampelprocessen i diffusionmodeller kan vara långsam, särskilt för högupplösta utmatningar. Tillvägagångssätt som latent diffusion och konsistensmodeller syftar till att adressera detta, men ytterligare förbättringar i effektivitet är ett aktivt forskningsområde.

Kontrollerbarhet

Medan tekniker som klassificeringsfri vägledning har förbättrat kontrollerbarhet, finns det fortfarande arbete att göra för att tillåta mer finmaskig kontroll över genererade utmatningar. Detta är särskilt viktigt för kreativa tillämpningar.

Multimodal generering

Nuvarande diffusionmodeller excellerar på enkelmodal generering (t.ex. bilder eller ljud). Utveckling av verkligt multimodala diffusionmodeller som kan generera sömlöst över modaliteter är ett spännande område för framtida arbete.

Teoretisk förståelse

Medan diffusionmodeller har starka empiriska resultat, finns det fortfarande mer att förstå om varför de fungerar så bra. Utveckling av en djupare teoretisk förståelse kunde leda till ytterligare förbättringar och nya tillämpningar.

Slutsats

Diffusionmodeller representerar ett steg framåt i generativ AI, erbjuda högkvalitativa resultat över en mängd olika modaliteter. Genom att lära sig att vända en brus-tilläggsprocess, erbjuder de en flexibel och teoretiskt grundad approach till generering.

Från kreativa verktyg till vetenskapliga simuleringar, förmågan att generera komplexa, högdimensionella data har potentialen att transformera många fält. Men det är viktigt att närma sig dessa kraftfulla teknologier med omsorg, övervägande både deras enorma potential och de etiska utmaningar de presenterar.

Jag har tillbringat de senaste fem åren med att dyka djupt in i den fascinerande världen av Maskinlärning och Djupinlärning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också lett mig mot Naturlig Språkbehandling, ett område som jag är angelägen om att utforska vidare.