10 Diffusion Models

Warning

🚧 Հինգ դասախոսության սլայդերը պատրաստ են (L27-L31)։ Տեսանյութերը դեռ չեն ձայնագրվել։ Գործնականը (ներքևում) պատրաստ է՝ ամբողջական walkthrough-ով և սովորեցված մոդելով։

🎲 Random

TBD

📚 Նյութը

Հինգ դասախոսություն (սլայդերը ml/ch10_diffusion/ պանակում)։ Գլուխը շարունակում է L23 (VAE)-ի ավարտը՝ ինչու են VAE-ի նմուշները մշուշոտ, և ինչն է դրանից լավը։

  • L27 — Diffusion I: the forward process: գեներացիան որպես sampling, աղմուկի ավելացման պրոցեսը, variance exploding vs variance preserving, փակ բանաձևը \(q(x_t \mid x_0)\), noise schedule-ները։ PDF
  • L28 — Diffusion II: the loss: maximum likelihood → ELBO → KL-ների գումար → L2 → աղմուկի կանխատեսում․ DDPM-ի կորստի ֆունկցիայի ամբողջական արտածում, և ինչու է դա ընդամենը MSE։ PDF
  • L29 — Diffusion III: sampling: DDPM sampler-ը, score/vector field-ի պատկերացումը, ինչու է sampler-ը ամեն քայլում նոր աղմուկ ավելացնում, DDIM, և FID։ PDF
  • L30 — Diffusion IV: conditioning and guidance: CLIP-ի ընդհանուր տարածությունը, contrastive learning, cross-attention-ով տեքստի ներմուծում, և classifier-free guidance — պատճառը, որ prompt-երն աշխատում են։ PDF
  • L31 — Diffusion V: latent diffusion, video, and cost: Stable Diffusion-ի latent տարածությունը (այսինքն՝ L22/L23-ի autoencoder-ը), flow matching, տեսանյութի մոդելները, և իրական արժեքը՝ և՛ հաշվողական, և՛ էթիկական։ PDF

Գլխի հիմնական միտքը մեկ նախադասությամբ․ երբ բաշխումը հնարավոր չէ ուղղակի մոդելավորել, գտի՛ր պրոցես, որը այն քայլ առ քայլ քանդում է քո վերահսկողությամբ, և սովորի՛ր այդ պրոցեսը հակառակ ուղղությամբ վազեցնել։

Բոլոր գծապատկերները գեներացվում են Python-ով (py_src/fig/)։ L28-ի և L29-ի թվային արդյունքները՝ MNIST-ի նման 8×8 թվանշանների վրա իրական DDPM-ից, որը սովորեցվել է լոկալ (py_src/digits_ddpm.py

Լրացուցիչ դիտելու համար (animated, անգլերեն)․

Հիմնական հոդվածները

Հոդված Ինչի մասին է
Sohl-Dickstein et al. 2015 diffusion մոդելների ծագումը
Ho, Jain & Abbeel 2020 (DDPM) L27-L29-ի հիմքը
Song et al. 2020 (DDIM) դետերմինիստիկ, արագ sampling
Radford et al. 2021 (CLIP) տեքստ-պատկեր ընդհանուր տարածություն
Ho & Salimans 2022 (CFG) classifier-free guidance
Rombach et al. 2022 (Latent Diffusion) Stable Diffusion

🏡 Տնային

Գործնական — գրել ՊԱՆԻՐ ձեռքով 🧀🧀

Diffusion մոդել՝ զրոյից։ Ոչ մի ներմուծված ֆունկցիա իրական աշխատանքը չի անում — forward պրոցեսը, կորստի ֆունկցիան, ուսուցման ցիկլը և երկու sampler-ն էլ գրված են տեղում։

Ամբողջական walkthrough (կատարված, բոլոր արդյունքներով)։ panir_diffusion_solution.ipynb (download) · view on GitHub

Մաս 1 — շարժիչը, 8×8 թվանշանների վրա (արագ, առանց ներբեռնման, L27–L29)

  • noise schedule-ը և ինչու է \(\sqrt{\bar\alpha_T}\)-ը պետք է փոքր լինի (այս գլուխը հենց այդ bug-ի վրա ընկել է)
  • \(q(x_t \mid x_0)\)-ի փակ բանաձևը՝ ստուգված քայլ-առ-քայլ աղմկոտացման դիմաց
  • կորստի ֆունկցիան — L28-ի ամբողջ արտածումից հետո ընդամենը MSE աղմուկի վրա
  • DDPM sampler-ը, հետո մեկ տողի ջնջում․ առանց \(\sqrt{\beta_t}z\) անդամի նմուշների ցրվածությունը փլուզվում է 0.4407 → 0.0389
  • DDIM — նույն կշիռները, չափված 24× ավելի արագ

Մաս 2 — ՊԱՆԻՐ (իրական հայերեն ձեռագիր, 24×24, L29–L30)

  • 4,481 տառ, 5 դաս (Պ Ա Ն Ի Ր) Mashtots հավաքածուից․ մեկ 1.2 MB .npz, ոչ մի Kaggle-ի հաշիվ պետք չէ
  • class-conditional մոդել՝ null token-ով, ուստի classifier-free guidance-ը նույն ցանցից է
  • ինչ արեց ուսուցումը՝ նույն սերմով նույն բառը ամեն 1000 քայլում (աղմուկից → տառեր)
  • բառի գրելը, ապա չափելը, թե ինչու այն մարդու գրած չի թվում

Տառերի և չափողականության նախադիտում (self-contained HTML)․ mashtots_letters.html

TipԱմենակարևոր չափումը

Երկու մակարդակով UNet-ը (24 → 12 → 6) 7.03M պարամետրով տվել է անընթեռնելի բեկորներ, իսկ մեկ մակարդակով 1.50M-անոցը՝ ընթեռնելի տառեր և ավելի լավ loss (0.0269 vs 0.038)։ Պատճառը նույնն է, ինչ crop-to-ink-ինը․ գծերը 1–2 պիքսել լայնություն ունեն։ Երկու անգամ կիսելուց հետո խորը շերտերում տառն արդեն ջնջված է, և ոչ մի քանակի պարամետր այն հետ չի բերում։ Մանրամասները՝ DECISIONS.md #8։

Warning

Գլխի վերջին միտքը՝ ամեն տառ գեներացվում է անկախ\(p(\text{բառ}) = \prod_i p(\text{տառ}_i \mid y_i)\)։ Իսկական ձեռագիր բառը մեկ ձեռքից է — նույն գրիչը, նույն թեքությունը։ Մոդելը այդ կապը պարզապես չունի, և հենց դա է պատճառը, որ պատկերային մոդելները տեքստ «գրելիս» տառանման, բայց ոչ տառ նշաններ են տալիս։