Preskočiť na obsah
coden

Difúzne modely: ako sa z čistého šumu stane obrázok

Dopredný proces pridávania šumu, sieť, ktorá odhaduje šum, DDPM a DDIM napísané od nuly, osem zhlukov bez kolapsu módov, koľko krokov vzorkovania je potrebných, porovnanie s VAE a GAN na číslicach a cesta k obrázkom podľa textu.

12 minút Matěj Žalmánek 2026-10-16

Séria Základy AI Diel 46 z 52
  1. Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
  2. Stručná história umelej inteligencie: od Turinga po jazykové modely
  3. Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
  4. Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
  6. Funkcie a zobrazenia: prečo je každý model v AI funkcia
  7. Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
  8. Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
  9. Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
  10. Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
  11. Gradientný zostup: ako sa model učí
  12. Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
  13. Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
  14. Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
  15. Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
  16. Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
  17. Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
  18. Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
  19. Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
  20. Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
  21. Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
  22. Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
  23. Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
  24. Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
  25. Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
  26. Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
  27. Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
  28. Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
  29. Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
  30. Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
  31. Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
  32. Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
  33. Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
  34. Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
  35. Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
  36. Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
  38. Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
  39. Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
  40. Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
  41. Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
  42. Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
  43. Prompty, kontext a RAG: ako modelu dať správne informácie
  44. Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
  45. Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
  46. Difúzne modely: ako sa z čistého šumu stane obrázok
  47. Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
  48. Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
  49. Policy gradient a PPO: učenie priamo stratégie
  50. Ako funguje AI agent: jazykový model v slučke s nástrojmi
  51. Programovanie s AI agentmi: zadanie, testy a kontrola
  52. Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť

Celá osnova série Hotovo: 52 z 83 tém

Čo si odnesiete
  • Ako funguje dopredný a spätný proces difúzie.
  • Prečo sa difúzia učí stabilnejšie než GAN a čo stojí počet krokov.
  • Ako sa z difúzie stane generátor obrázkov podľa textu.

Čo sa hodí vedieť vopred: Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi, Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru

Stable Diffusion, Midjourney, DALL·E 3 aj modely, ktoré generujú video, stoja na tom istom nápade, a ten je prekvapivo jednoduchý. Obrázok je ľahké zničiť — stačí doň postupne pridávať šum, až zostane len šum. Keby sme sa naučili každý malý krok vrátiť, mohli by sme začať z čistého šumu a krok za krokom z neho vylúpnuť obrázok. V tomto diele to naprogramujeme od nuly a porovnáme s VAE a GAN na rovnakých dátach.

Nadväzuje na diely Generatívne adversariálne siete a Variačné autoenkodéry.

1. Dopredný proces: obrázok sa rozpúšťa v šume

Definícia — dopredný (difúzny) proces

Nech d ≥ 1 je rozmer dát, x0 ∈ ℝd obrázok z dát, T ≥ 1 počet krokov a β1, …, βT ∈ (0, 1) plán rozptylov. Nech ε1, …, εT ~ N(0, I) sú navzájom nezávislé náhodné vektory, nezávislé od x0 (I je jednotková matica d × d). Dopredný (difúzny) proces je postupnosť náhodných vektorov x1, …, xT ∈ ℝd daná rekurenciou

xt = √1 − βt · xt−1 + √βt · εt,   t = 1, …, T.

Označme

ᾱt = ∏s=1t (1 − βs)   pre t = 1, …, T,   ᾱ0 = 1.

Potom pre každé t platí uzavretý tvar (veta nižšie)

xt = √ᾱt · x0 + √1 − ᾱt · ε,   ε ~ N(0, I) nezávislé od x0,

t. j. pri danom x0 má xt rozdelenie N(√ᾱt x0, (1 − ᾱt) I). Postupnosť ᾱt je klesajúca, a keď je pre dosť veľké t takmer nulová, má xt takmer rozdelenie N(0, I) — čistý šum, v ktorom po x0 nezostala skoro žiadna stopa.

Laicky povedané

Kvapka atramentu v pohári vody: chvíľu je vidieť tvar kvapky, potom sa rozplýva, nakoniec je voda rovnomerne zafarbená a pôvodný tvar sa nedá rozpoznať. Uzavretý vzorec hovorí, že do ktoréhokoľvek okamihu sa dá skočiť priamo — nemusíme simulovať všetky kroky.

xt = √ᾱt · x0 + √1 − ᾱt · ε

xt
zašumený obrázok v kroku t — presne to, čo sieť pri učení dostane na vstup
√ᾱt
koľko zostalo z pôvodného obrázka; ᾱt je súčin všetkých (1 − βs) do kroku t, takže s každým krokom klesá
x0
pôvodný obrázok z dát
√1 − ᾱt
koľko je tam šumu; odmocniny sú preto, že sa sčítajú rozptyly: (√ᾱ)² + (√1 − ᾱ)² = 1, takže dáta s rozptylom 1 majú rozptyl 1 v každom kroku a na konci plynulo prejdú do N(0, I)
ε
jedna vzorka šumu z N(0, I) — práve ju bude sieť hádať; to, že ju poznáme, robí z učenia obyčajnú regresiu
Veta — prečo stačí jeden skok

Nech x0, x1, …, xT je dopredný proces s plánom β1, …, βT ∈ (0, 1) a ᾱt = ∏s=1t (1 − βs). Potom pre každé t = 1, …, T existuje náhodný vektor ε ~ N(0, I) nezávislý od x0 taký, že

xt = √ᾱt x0 + √1 − ᾱt ε.

Dôkaz. Indukciou podľa t. Pre t = 1 je to priamo definícia kroku, pretože ᾱ1 = 1 − β1. Nech tvrdenie platí pre t − 1, t. j. xt−1 = √ᾱt−1 x0 + √1 − ᾱt−1 ε′ s ε′ ~ N(0, I) nezávislým od x0. Dosadíme do kroku t:

xt = √1 − βt √ᾱt−1 x0 + √1 − βt √1 − ᾱt−1 ε′ + √βt εt.

Prvý člen je √ᾱt x0, pretože ᾱt = (1 − βt) ᾱt−1. Zvyšné dva sú nezávislé normálne vektory so stredom 0 (ε′ závisí len od x0 a ε1, …, εt−1); ich súčet je opäť normálny so stredom 0 a rozptyly sa sčítajú:

(1 − βt)(1 − ᾱt−1) + βt = 1 − (1 − βt) ᾱt−1 = 1 − ᾱt.

Súčet sa teda rovná √1 − ᾱt ε pre ε ~ N(0, I) nezávislé od x0. ∎

Príklad — náš plán šumu v číslach

β rastie lineárne: βt = β1 + (βT − β1) · t − 1/T − 1, teda o βT − β1/T − 1 = 0,00101 na krok.

tβtᾱt√ᾱt (signál)√1 − ᾱt (šum)
10,000100,99991,0000,010
20,001110,99880,9990,035
250,024320,73510,8570,515
370,036430,50450,7100,704
380,037440,48560,6970,717
500,049550,28300,5320,847
1000,100000,00560,0750,997

Druhý riadok overíme ručne: ᾱ2 = (1 − β1)(1 − β2) = 0,9999 · 0,99889 = 0,99879. Signál a šum sa vyrovnajú (ᾱ = 0,5) medzi krokmi 37 a 38; v kroku 100 má pôvodný obrázok váhu len 0,075 oproti 0,997 pri šume (farby podľa vzorca vyššie).

U nás T = 100 a β rastie lineárne od 0,0001 do 0,1. Podiel pôvodného signálu √ᾱt je v kroku 25 0,86, v kroku 50 0,53 a v kroku 100 už len 0,07.

Trojka v doprednom procese (zľava t = 0, 10, 25, 50, 75, 100)

2. Spätný proces: sieť, ktorá háda šum

Definícia — DDPM (denoising diffusion probabilistic model)

Nech T, β1, …, βT a ᾱt sú ako v doprednom procese, pdata je rozdelenie dát na ℝd a εθ : ℝd × {1, …, T} → ℝd je neurónová sieť s parametrami θ, ktorá zo zašumeného obrázka a čísla kroku odhaduje pridaný šum. DDPM (denoising diffusion probabilistic model; Jonathan Ho, Ajay Jain a Pieter Abbeel, 2020; myšlienka Jaschu Sohl-Dicksteina a kol., 2015) je dvojica postupov:

  1. Učenie: parametre θ sa volia minimalizáciou strednej kvadratickej chyby L(θ) = Ex0, t, ε ‖ε − εθ(√ᾱt x0 + √1 − ᾱt ε, t)‖², kde x0 ~ pdata, t je rovnomerne rozdelené na {1, …, T}, ε ~ N(0, I) a všetky tri sú nezávislé.
  2. Vzorkovanie (vstup: naučená sieť εθ; výstup: vzorka x0 ∈ ℝd):
    1. vylosuj xT ~ N(0, I);
    2. pre t = T, T − 1, …, 1 vylosuj z ~ N(0, I) (pre t = 1 polož z = 0) a vypočítaj xt−1 = 1/√1 − βt (xt − βt/√1 − ᾱt · εθ(xt, t)) + √βt · z;
    3. po kroku t = 1 vráť x0.

Sieť sa teda učí obyčajnou regresiou odhadnúť šum a pri vzorkovaní ho krok za krokom odčítava.

Laicky povedané

Sieť dostane rozmazanú, zašumenú fotku a otázku „koľko šumu v nej je a ako vyzerá?“. Keď ho vie odhadnúť, vie ho aj trochu odčítať. Opakujeme to stokrát, zakaždým s trochou čerstvej náhody — a zo šumu sa vynorí obrázok. Učenie je pritom obyčajná regresia: žiadny súper ako pri GAN, žiadne kompromisy ako pri VAE.

L(θ) = Ex0, t, ε ‖ε − εθ(√ᾱt x0 + √1 − ᾱt ε, t)‖²

ε
šum, ktorý sme do obrázka sami pridali — správna odpoveď, preto ho poznáme bez akéhokoľvek označovania dát
εθ(…, t)
odhad šumu sieťou; dostáva aj číslo kroku t, pretože pri t = 2 má šumu nájsť málo a pri t = 100 je v xt skoro len šum
√ᾱt x0 + √1 − ᾱt ε
zašumený obrázok xt vyrobený jedným skokom — vďaka uzavretému vzorcu stačí pre každý príklad vylosovať t a ε, nič sa nesimuluje krok za krokom
Stredná hodnota je cez obrázky z dát, rovnomerne vylosovaný krok t ∈ {1, …, T} a šum ε ~ N(0, I); v praxi priemer cez dávku. Ho a kol. túto jednoduchú stratu dostali zjednodušením variačnej dolnej hranice (tej, ktorú optimalizuje aj VAE) — vypustili v nej váhy jednotlivých krokov.

xt−1 = 1/√1 − βt · (xt − βt/√1 − ᾱt · εθ(xt, t)) + √βt · z

xt
súčasný zašumený stav — začína sa od čistého šumu xT ~ N(0, I)
εθ(xt, t)
odhad šumu, ktorý je v xt
βt/√1 − ᾱt
aký veľký kus odhadnutého šumu odčítať — len podiel zodpovedajúci jednému kroku (βt), prepočítaný na celkovú úroveň šumu √1 − ᾱt; u nás 0,01 v kroku 1 a 0,10 v kroku 100
1/√1 − βt
vracia zmenšenie z dopredného kroku (tam sa násobilo √1 − βt); v kroku 100 je to 1,054
√βt · z
čerstvý šum z ~ N(0, I) (v poslednom kroku z = 0) — spätný proces je náhodný ako dopredný; bez neho by sa vzorky sťahovali k priemerným obrázkom. Veľkosť √βt je jedna z dvoch volieb, ktoré Ho a kol. skúšali
Zátvorka vynásobená prvým činiteľom je odhad stredu obrázka o krok menej zašumeného; potom sa k nemu pridá toľko náhody, koľko jej do kroku patrí.
# učenie (DDPM)
opakuj 16 000×:
    pre každý zo 64 príkladov dávky:
        x₀ = náhodný príklad z dát
        t  = náhodne z 1 … 100
        ε  = vektor náhodných čísel z N(0, 1)
        x_t = √ᾱ_t · x₀ + √(1 − ᾱ_t) · ε
        chyba = ‖ε − ε_θ(x_t, kód(t))‖² / rozmer
    krok Adamu na priemernej chybe

# vzorkovanie (DDPM, 100 krokov)
x = vektor z N(0, 1)
pre t = 100, 99, …, 1:
    ε̂ = ε_θ(x, kód(t))
    z = vektor z N(0, 1), v kroku t = 1 nula
    x = (x − β_t / √(1 − ᾱ_t) · ε̂) / √(1 − β_t) + √β_t · z
vráť x
Definícia — sínusový kód času

Nech T ≥ 1 je počet krokov a t ∈ {1, …, T}. Sínusový kód času je vektor kód(t) ∈ [−1, 1]8,

kód(t) = (sin πt/T, cos πt/T, sin 2πt/T, cos 2πt/T, sin 4πt/T, cos 4πt/T, sin 8πt/T, cos 8πt/T),

t. j. dvojice (sin fπt/T, cos fπt/T) pre frekvencie f = 1, 2, 4, 8. Sieť dostane namiesto čísla t týchto osem čísel. Pomalé frekvencie hovoria „zhruba kde v procese sme“, rýchle rozlíšia susedné kroky; všetky čísla sú medzi −1 a 1, takže žiadny vstup neprevýši ostatné.

Pre t = 25 (štvrtina procesu, uhly π/4, π/2, π a 2π): kód(25) = (0,707; 0,707; 1,000; 0,000; 0,000; −1,000; 0,000; 1,000).

Naša sieť je obyčajná viacvrstvová sieť z dielu o GAN: na vstupe xt a osem čísel sínusového kódu času t (ako pozičné kódovanie v transformeri), na výstupe odhad šumu. Na kružnici má dve skryté vrstvy po 64 neurónoch, na číslicach po 128. Učí sa Adamom 16 000 krokov.

3. Osem zhlukov bez kolapsu

Rovnaké dáta ako v minulom diele: osem zhlukov na kružnici. Takto vyzerá 400 vzoriek počas spätného procesu:

t = 100 t = 50 t = 25 t = 10 t = 0 súradnica x₁ (bez jednotky) x₂ (bez jednotky)
Spätný proces: od šumu (t = 100) k dátam (t = 0)

Ešte v kroku 25 sú body skoro rovnomerne rozhádzané (kvalita 3 %), v kroku 10 sa rysuje kružnica a v posledných desiatich krokoch sa body zbehnú do zhlukov. Na konci sú pokryté všetky 8 zhluky a každý dostal 28 až 50 z 500 vzoriek. Kvalita (podiel do 3σ od stredu) je 63 %.

Rozdiel oproti GAN nie je v kvalite, ale v spoľahlivosti. GAN pokryl všetkých osem zhlukov len v jednom zo štyroch behov; difúzia to urobila v jedinom behu, ktorý sme spustili (jeden beh nie je dôkaz, ale je to v súlade s tým, čo sa o difúzii vie). Strata difúzie totiž nie je hra, ale regresia, a sieť je trestaná za každú vzorku dát — na žiadny zhluk sa nedá „vykašľať“.

4. Koľko krokov je potrebných

Definícia — DDIM

Nech εθ je naučená sieť DDPM, ᾱt ako v doprednom procese a ᾱ0 = 1. Pre časy 0 ≤ s < t ≤ T a stav xt ∈ ℝd definujeme odhad čistého obrázka a krok DDIM z času t do času s:

x̂0 = xt − √1 − ᾱt εθ(xt, t)/√ᾱt,   xs = √ᾱs x̂0 + √1 − ᾱs εθ(xt, t).

Vzorkovanie DDIM s n krokmi (Jiaming Song, Chenlin Meng a Stefano Ermon, 2020):

  1. zvoľ časy T = tn > tn−1 > … > t0 = 0 (u nás rovnomerne rozložené);
  2. vylosuj xT ~ N(0, I);
  3. pre i = n, n − 1, …, 1 urob krok DDIM z času ti do času ti−1;
  4. vráť x0 (v poslednom kroku je ᾱ0 = 1, takže x0 = x̂0).

DDIM teda používa tú istú naučenú sieť ako DDPM, ale po voľbe xT už nič nelosuje (je deterministické) a môže skákať po ľubovoľne veľkých krokoch.

Laicky povedané

Namiesto sto drobných krôčikov urobíme dvadsať väčších. V každom sa sieť opýta „ako by asi vyzeral hotový obrázok?“ a podľa toho skočí kus cesty. Keď sú skoky príliš veľké, sieť sa netrafí.

xs = √ᾱs · x̂0 + √1 − ᾱs · εθ(xt, t),   x̂0 = xt − √1 − ᾱt εθ/√ᾱt

xt
stav, v ktorom práve sme
εθ
odhad šumu — tá istá sieť ako pri DDPM, nič sa nepreúča
x̂0
odhad hotového obrázka: uzavretý vzorec dopredného procesu obrátený pre x0; delí sa √ᾱt, ktoré je na začiatku malé, takže tu je odhad najmenej presný
√ᾱs
koľko obrázka má byť v cieľovom čase s — rovnaký činiteľ ako v doprednom procese, len pre iný čas
√1 − ᾱs
koľko šumu má zostať; DDIM pritom použije ten istý odhadnutý šum, žiadny nový nelosuje — preto je deterministické
Krok je „odšumuj úplne a potom znova zašum na úroveň času s“. DDIM tak môže skočiť ľubovoľne ďaleko.
Príklad — prečo dva kroky nestačia (zjednodušene)

DDIM s n krokmi ide po rovnomerne rozložených časoch: s 5 krokmi 100 → 80 → 60 → 40 → 20 → 0, s 2 krokmi 100 → 50 → 0. Prvý skok je vždy z t = 100, kde √ᾱ100 = 0,075.

Keď sa sieť v odhade šumu pomýli o δ, pomýli sa odhad x̂0 o δ · √1 − ᾱ100/√ᾱ100 = 13,3 δ — chyba sa zosilní viac než desaťkrát. Po dosadení do skoku do času s sa nový stav líši od správneho o δ · (√1 − ᾱs − √ᾱs · 13,3) (farby podľa vzorca DDIM vyššie):

  • 5 krokov, skok 100 → 80: činiteľ −1,59,
  • 2 kroky, skok 100 → 50: činiteľ −6,23,

Pri malom skoku sa zlý odhad x̂0 primieša s malou váhou √ᾱ80 = 0,19 a ďalšie kroky ho opravujú. Pri skoku do polovice procesu vstúpi s váhou √ᾱ50 = 0,53 a zostáva jediný krok. Úvaha sleduje len jednu chybu v jednom kroku a predpokladá, že inak sieť odhaduje presne; ukazuje však, prečo sú prvé, najzašumenejšie kroky najcitlivejšie.

0 %25 %50 %75 %100 % 63 · 8/8 100 79 · 8/8 50 77 · 8/8 20 70 · 8/8 10 60 · 8/8 5 0 · 0/8 2 kroky vzorkovania (počet) kvalita (% vzoriek do 3σ)
Kvalita a pokrytie na kružnici podľa počtu krokov vzorkovania DDPM (100 krokov) DDIM najlepší beh GAN

DDIM s 50 krokmi dosiahne kvalitu 79 % — viac než DDPM so 100 krokmi (63 %), najskôr preto, že nepridáva náhodný šum, ktorý naša nepresná sieť nestihne v posledných krokoch odstrániť. Ešte s 10 krokmi je to 70 %, s 5 krokmi 60 %. Pri 2 krokoch sa vzorkovanie rozpadne (0 %). Počet krokov je hlavná cena difúzie: každý krok je jeden prechod sieťou, kým GAN vygeneruje obrázok jedným prechodom.

5. Číslice: porovnanie troch generátorov

Na číslicach 8 × 8 (pixely prevedené do rozsahu −1 až 1) sa sieť učí 16 000 krokov.

difúzia GAN, semienko 2 VAE
Prvých desať vzoriek
modelvzdialenosť k najbližšej číslicinajmenej zastúpená cifra (z 200)cifier s menej než 10 vzorkami
VAE (k = 8)0,054100
GAN, semienko 10,04933
GAN, semienko 20,04206
difúzia (100 krokov)0,063120

Tu treba byť poctivý: naša difúzia má vzdialenosť 0,063, horšie než VAE (0,054) aj GAN (0,042). Na obrázkoch je vidieť zvyškový šum. Zastúpenie cifier je však vyrovnané — najmenej častá cifra má 12 vzoriek, pri GAN so semienkom 2 chýbajú dve cifry úplne.

Prečo je ostrosť horšia? Malá viacvrstvová sieť musí odšumovať obrázky vo všetkých sto úrovniach šumu naraz, a to je ťažšia úloha než jedno zobrazenie šum → obrázok pri GAN. Zato sa poctivo zlepšuje s výpočtom: vzdialenosť vzoriek klesala počas učenia 0,096 (krok 4 000), 0,082 (krok 8 000), 0,068 (krok 12 000), 0,063 (krok 16 000) (rýchly odhad zo 100 vzoriek DDIM s 20 krokmi). Žiadny kolaps ani výkyvy. Skutočné difúzne modely používajú konvolučné siete U-Net alebo transformery so stovkami miliónov parametrov a učia sa týždne — a potom vyhrávajú aj ostrosťou.

6. Od číslic k obrázkom podľa textu

  • Podmienka. Sieť εθ(xt, t, c) dostane navyše popis c — embedding textu z jazykového modelu, pripojený cez pozornosť (diel o pozornosti). Učí sa na miliardách dvojíc obrázok–popis.
  • Navádzanie bez klasifikátora (classifier-free guidance, Jonathan Ho a Tim Salimans, 2021). Sieť sa učí s popisom aj bez neho a pri vzorkovaní sa odhad posunie v smere „s popisom mínus bez popisu“, zosilnený koeficientom. Obrázok potom viac zodpovedá zadaniu za cenu menšej pestrosti.
  • Latentná difúzia. Difúzia beží v malom latentnom priestore autoenkodéra, nie v pixeloch — pozri diel o VAE. Stable Diffusion (2022) vďaka tomu beží aj na hernej karte.
  • Menej krokov. Lepšie vzorkovače a destilácia (sieť sa naučí napodobniť mnoho krokov v jednom či niekoľkých) skrátili generovanie zo stoviek krokov na jednotky.

ε̃ = εθ(xt, t, ∅) + w · (εθ(xt, t, c) − εθ(xt, t, ∅))

εθ(…, ∅)
odhad šumu bez popisu (prázdna podmienka ∅) — „ako vyzerá ľubovoľný obrázok“; sieť sa ho naučí tým, že pri učení popis občas náhodne zahodí
εθ(…, c) − εθ(…, ∅)
o čo sa odhad zmení, keď sieť popis pozná — smer, ktorým popis obrázok ťahá
w
sila navádzania: w = 0 ignoruje popis, w = 1 je obyčajný podmienený model, w > 1 vplyv popisu zveličuje — obrázok viac zodpovedá zadaniu, ale vzorky sú si podobnejšie
Pri vzorkovaní sa ε̃ dosadí namiesto εθ; cenou sú dva prechody sieťou na krok. Ho a Salimans píšu ten istý vzorec ako (1 + w′) εθ(…, c) − w′ εθ(…, ∅), teda w = 1 + w′. Knižnica diffusers má pre Stable Diffusion predvolené w = 7,5.

7. Zhrnutie

  • Dopredný proces postupne pridáva šum; do ktoréhokoľvek kroku sa dá skočiť vzorcom √ᾱ x₀ + √1 − ᾱ ε.
  • Sieť sa učí odhadnúť pridaný šum — obyčajná regresia. Generuje sa spätne od čistého šumu.
  • Na ôsmich zhlukoch pokryla difúzia všetky v jedinom behu (DDIM s 50 krokmi 79 %); GAN len v jednom zo štyroch behov.
  • Menej krokov (DDIM) zrýchli vzorkovanie; s 10 krokmi je kvalita 70 %, s 2 krokmi sa rozpadne.
  • Na číslicach pokrýva difúzia všetky cifry, ostrosťou s našou malou sieťou zaostáva; zlepšuje sa však stabilne s výpočtom.

Chcete si to vyskúšať? Nechajte AI agenta naučiť malý DDPM na dvojrozmerných dátach (napríklad body v tvare vašich iniciál) a vykresliť, ako sa body počas spätného procesu skladajú do písmen.

Máte na to iný názor? Napíšte na support@coden-app.com.

Agent na vašom počítači, ovládaný z telefónu