Capitolo 21 · Diffusione · 9 min

Generare un'immagine cancellando il rumore

Stable Diffusion, DALL-E, Midjourney. Il processo inverso di denoising, il ruolo di CLIP, e perché U-Net cede il passo ai Transformer.

Una famiglia diversa

Tutto cio che abbiamo visto finora descrive Transformer che predicono il token successivo. E l'architettura che domina il linguaggio, il codice, e sempre piu il video e l'audio.

Ma quando scrivi un prompt in Midjourney, DALL-E o Stable Diffusion, non e quello che succede. L'immagine non e generata pixel per pixel da sinistra a destra. Appare ovunque allo stesso tempo, raffinata in tappe successive.

E l'opera di una famiglia di modelli molto diversa: i modelli di diffusione.

L'idea centrale: imparare a denoise

Il processo di diffusione si ispira a un'intuizione quasi troppo semplice. Se prendo un'immagine nitida e ci aggiungo progressivamente del rumore gaussiano, a un certo punto diventa indistinguibile dal rumore puro. Se imparo a invertire questo processo — a togliere rumore poco a poco — allora posso partire dal rumore puro e finire con un'immagine nitida.

Durante l'addestramento:

  1. Si prende un'immagine dal dataset
  2. Le si aggiunge rumore secondo una pianificazione predefinita (per esempio T = 1000 passi)
  3. Si addestra una rete a predire il rumore aggiunto dati l'immagine rumorosa e il passo t

Il modello impara cosi, per qualsiasi livello di rumore, a riconoscere cosa e "vera immagine" e cosa e "rumore aggiunto".

All'inferenza, si inverte: si parte da puro rumore, e a ogni passo, il modello predice il rumore, lo si sottrae, e si ricomincia. Dopo T passi, si ottiene un'immagine plausibile — che assomiglia alla distribuzione appresa.

Prova il denoising

L'animazione parte da un'immagine di puro rumore e la denoising-zza per passi successivi. Ogni passo segue il gradiente appreso durante il training, guidato dall'embedding testuale di CLIP. A 5 passi il risultato è sfocato; a 50, è nitido.

Gioca con il numero di passi. A 5 passi, l'immagine resta granulosa — il modello non ha il tempo di raffinare. A 50 passi, diventa nitida ma e dieci volte piu calcolo. La maggior parte dei sampler moderni (DDIM, DPM-Solver) raggiungono una qualita quasi ottimale in 20-30 passi.

Dirigere verso un'immagine precisa: la guidance

Il rumore puro e lo stesso per tutti i prompt. Come fa il modello a sapere che vogliamo un tramonto e non un cane? La risposta: si condiziona il modello sul testo.

Durante l'addestramento, si fornisce alla rete, oltre all'immagine rumorosa e al passo, un embedding del testo associato all'immagine (spesso un encoder di tipo CLIP). La rete impara cosi predizioni di rumore condizionate: "sapendo che l'immagine descrive un tramonto, ecco a cosa assomiglia il rumore".

All'inferenza, si calcolano due predizioni: una con il prompt, una senza (o con un prompt vuoto). La tecnica della Classifier-Free Guidance (CFG) consiste nell'estrapolare nella direzione del prompt:

predizione_finale = predizione_senza_prompt + guidance × (predizione_con_prompt − predizione_senza_prompt)

Il coefficiente guidance (CFG scale) controlla quanto ci si allontana dal naturale per aderire al prompt. A CFG=0, il modello ignora il testo; a CFG=7, l'immagine segue fedelmente il prompt senza diventare artificiale; oltre 12, diventa sovrasaturata e perde i dettagli fini.

Latent diffusion: fare meno calcolo

Un'immagine 512×512 ha 786.432 pixel (3 canali × 512 × 512). Fare 1.000 passi di denoising su tanti pixel e molto costoso. Stable Diffusion ha popolarizzato un trucco: lavorare in uno spazio latente compresso.

Prima di addestrare il modello di diffusione, si addestra un autoencoder (un VAE) che comprime le immagini in uno spazio latente 64×64×4 — circa 48× piu piccolo. La diffusione si applica allora solo a questo latente, non ai pixel. Alla fine del denoising, si decodifica il latente verso l'immagine finale.

E cio che rende Stable Diffusion eseguibile su una GPU consumer in qualche secondo — mentre un modello pixel-based equivalente richiederebbe un cluster.

CLIP: il ponte tra testo e immagine

Per condizionare sul testo, serve una rappresentazione testuale che condivida uno spazio con quella delle immagini. E il ruolo di CLIP (Contrastive Language-Image Pretraining), addestrato da OpenAI su 400 milioni di coppie immagine/didascalia.

CLIP impara due encoder — uno per le immagini, uno per il testo — che producono embedding in uno spazio comune. Una didascalia e la sua immagine target hanno embedding vicini; una didascalia senza relazione e lontana. Questo allineamento permette al modello di diffusione di capire prompt testuali che non ha mai visto esattamente all'addestramento.

U-Net vs Transformer (DiT)

Per molto tempo, l'architettura di riferimento per la diffusione era la U-Net: una rete convolutiva a U, con skip connection che preservano i dettagli fini. Stable Diffusion 1.4, 1.5 e 2 usano tutti delle U-Net.

Ma nel 2022, Peebles e Xie hanno proposto DiT (Diffusion Transformer): sostituire la U-Net con un Transformer puro. Ogni "patch" dell'immagine e trattata come un token, con attention completa su tutti gli altri patch. Niente piu piramide convolutiva, niente piu skip connection — solo block Transformer impilati.

Stable Diffusion 3, FLUX, Sora (video) — tutte le architetture recenti sono migrate al Transformer. Perche? Perche i Transformer scalano meglio: si ritrovano le stesse leggi di scala che per il linguaggio. Raddoppiare il compute su un DiT migliora le immagini in modo prevedibile.

Il sampler: DDPM, DDIM, DPM-Solver

Il sampler e l'algoritmo che decide, a ogni passo, come combinare la predizione del rumore con lo stato corrente per produrre il passo successivo.

SamplerPassi tipiciParticolarita
DDPM1000Stocastico, fedele all'addestramento, lento
DDIM20–50Deterministico, qualita comparabile a DDPM in molti meno passi
DPM-Solver10–25Solver di EDO, ancora piu veloce
Euler / Heun20–30Metodi classici di EDO, semplici e robusti
LCM4–8Distillazione latente, ultra-veloce

La scelta del sampler e una delle leve piu accessibili per regolare velocita vs qualita.

Perche questa famiglia esiste accanto ai Transformer

Si potrebbe chiedere: perche non generare immagini come si genera testo, token per token? La risposta e sottile.

Per il testo, l'ordine e naturale: si legge da sinistra a destra, e ogni parola dipende dalle precedenti. Per un'immagine, non c'e un ordine canonico. Generare pixel per pixel introduce artefatti (i primi pixel non hanno il contesto degli ultimi). La diffusione risolve questo problema generando tutta l'immagine in parallelo, raffinata globalmente a ogni passo.

E per questo che gli approcci autoregressivi sui pixel (come PixelRNN, o l'ImageGPT iniziale di OpenAI) sono stati abbandonati a favore della diffusione. L'unico ritorno possibile sarebbe attraverso i modelli autoregressivi sui token di immagine (DALL-E 1, e ora Chameleon di Meta) — ma sono ancora meno performanti delle diffusioni sulla qualita fotorealistica.

La diffusione non e un Transformer. E un altro modo, matematicamente ortogonale, di apprendere una distribuzione complessa — e per le immagini, e quello che ha vinto.

Aggiornato il

Diffusion: generare immagini cancellando il rumore · Step by Token