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.
Séria Základy AI Diel 46 z 52
- Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
- Stručná história umelej inteligencie: od Turinga po jazykové modely
- Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
- Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
- Funkcie a zobrazenia: prečo je každý model v AI funkcia
- Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
- Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
- Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
- Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
- Gradientný zostup: ako sa model učí
- Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
- Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
- Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
- Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
- Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
- Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
- Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
- Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
- Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
- Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
- Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
- Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
- Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
- Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
- Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
- Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
- Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
- Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
- Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
- Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
- Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
- Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
- Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
- Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
- Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
- Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
- Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
- Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
- Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
- Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
- Prompty, kontext a RAG: ako modelu dať správne informácie
- Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
- Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
- Difúzne modely: ako sa z čistého šumu stane obrázok
- Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
- Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
- Policy gradient a PPO: učenie priamo stratégie
- Ako funguje AI agent: jazykový model v slučke s nástrojmi
- Programovanie s AI agentmi: zadanie, testy a kontrola
- Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť
Celá osnova série Hotovo: 52 z 83 tém
- 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.
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) |
|---|---|---|---|---|
| 1 | 0,00010 | 0,9999 | 1,000 | 0,010 |
| 2 | 0,00111 | 0,9988 | 0,999 | 0,035 |
| 25 | 0,02432 | 0,7351 | 0,857 | 0,515 |
| 37 | 0,03643 | 0,5045 | 0,710 | 0,704 |
| 38 | 0,03744 | 0,4856 | 0,697 | 0,717 |
| 50 | 0,04955 | 0,2830 | 0,532 | 0,847 |
| 100 | 0,10000 | 0,0056 | 0,075 | 0,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.
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:
- 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é.
- Vzorkovanie (vstup: naučená sieť εθ; výstup: vzorka x0 ∈ ℝd):
- vylosuj xT ~ N(0, I);
- 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;
- po kroku t = 1 vráť x0.
Sieť sa teda učí obyčajnou regresiou odhadnúť šum a pri vzorkovaní ho krok za krokom odčítava.
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
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
# 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:
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):
- zvoľ časy T = tn > tn−1 > … > t0 = 0 (u nás rovnomerne rozložené);
- vylosuj xT ~ N(0, I);
- pre i = n, n − 1, …, 1 urob krok DDIM z času ti do času ti−1;
- 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.
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é
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.
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.
| model | vzdialenosť k najbližšej číslici | najmenej zastúpená cifra (z 200) | cifier s menej než 10 vzorkami |
|---|---|---|---|
| VAE (k = 8) | 0,054 | 10 | 0 |
| GAN, semienko 1 | 0,049 | 3 | 3 |
| GAN, semienko 2 | 0,042 | 0 | 6 |
| difúzia (100 krokov) | 0,063 | 12 | 0 |
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
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.