I modelli di diffusione sono emersi come un approccio potente nell’intelligenza artificiale generativa, producendo risultati di stato dell’arte nella generazione di immagini, audio e video. In questo articolo tecnico approfondito, esploreremo come funzionano i modelli di diffusione, le loro innovazioni chiave e perché sono diventati così di successo. Copriremo le fondamenta matematiche, il processo di formazione, gli algoritmi di campionamento e le applicazioni all’avanguardia di questa nuova tecnologia emozionante.
Introduzione ai modelli di diffusione
I modelli di diffusione sono una classe di modelli generativi che imparano a denoising gradualmente i dati invertendo un processo di diffusione. L’idea principale è quella di partire da rumore puro e raffinarlo iterativamente in un campione di alta qualità dalla distribuzione di destinazione.
Questo approccio è stato ispirato dalla termodinamica non in equilibrio – in particolare, il processo di inversione della diffusione per recuperare la struttura. Nel contesto dell’apprendimento automatico, possiamo pensare a questo come all’apprendimento dell’inversione dell’aggiunta graduale di rumore ai dati.
Alcuni vantaggi chiave dei modelli di diffusione includono:
Qualità delle immagini di stato dell’arte, superando i GAN in molti casi
Formazione stabile senza dinamiche avversarie
Alta parallelizzazione
Architettura flessibile – qualsiasi modello che mappa input in output della stessa dimensionalità può essere utilizzato
Solida base teorica
Diamo un’occhiata più da vicino a come funzionano i modelli di diffusione.
Le equazioni differenziali stocastiche governano i processi diretti e inversi nei modelli di diffusione. L’SDE diretto aggiunge rumore ai dati, trasformandoli gradualmente in una distribuzione di rumore. L’SDE inverso, guidato da una funzione di punteggio appresa, rimuove progressivamente il rumore, portando alla generazione di immagini realistiche a partire da rumore casuale. Questo approccio è fondamentale per ottenere prestazioni generative di alta qualità negli spazi di stato continui.
Il processo di diffusione diretto
Il processo di diffusione diretto inizia con un punto di dati x₀ campionato dalla distribuzione di dati reali e aggiunge gradualmente rumore gaussiano su T passaggi temporali per produrre versioni sempre più rumorose x₁, x₂, …, xT.
In ogni passaggio temporale t, aggiungiamo una piccola quantità di rumore secondo:
x_t = √(1 - β_t) * x_{t-1} + √(β_t) * ε
Dove:
β_t è una tabella di varianza che controlla quanto rumore viene aggiunto ad ogni passo
ε è rumore gaussiano casuale
Questo processo continua fino a quando xT non è quasi rumore gaussiano puro.
Matematicamente, possiamo descriverlo come una catena di Markov:
La tabella di β_t è solitamente scelta per essere piccola per i primi passaggi temporali e aumentare nel tempo. Scelte comuni includono tabelle lineari, cosinus o sigmoide.
Il processo di diffusione inverso
L’obiettivo di un modello di diffusione è quello di apprendere l’inverso di questo processo – partire da rumore puro xT e denoising progressivamente per recuperare un campione pulito x₀.
Dove μ_θ e σ_θ^2 sono funzioni apprese (solitamente reti neurali) parametrizzate da θ.
L’innovazione chiave è che non dobbiamo modellare esplicitamente la distribuzione inversa completa. Invece, possiamo parametrizzarla in termini del processo diretto, che conosciamo.
In particolare, possiamo dimostrare che la media del processo inverso ottimale μ* è:
Questo ci dà un obiettivo semplice – addestrare una rete neurale ε_θ per prevedere il rumore che è stato aggiunto ad ogni passo.
Obiettivo di formazione
L’obiettivo di formazione per i modelli di diffusione può essere derivato dall’inferenza variazionale. Dopo alcune semplificazioni, arriviamo a una semplice perdita L2:
L = E_t,x₀,ε [ ||ε - ε_θ(x_t, t)||² ]
Dove:
t è campionato uniformemente da 1 a T
x₀ è campionato dalla distribuzione di dati di formazione
ε è campionato rumore gaussiano
x_t è costruito aggiungendo rumore a x₀ secondo il processo diretto
In altre parole, stiamo addestrando il modello per prevedere il rumore che è stato aggiunto ad ogni passaggio temporale.
L’architettura U-Net è centrale nel passaggio di denoising nel modello di diffusione. Presenta una struttura encoder-decoder con connessioni saltatorie che aiutano a preservare i dettagli fini durante il processo di ricostruzione. L’encoder campiona progressivamente l’immagine di input mentre cattura caratteristiche ad alto livello, e il decoder campiona le caratteristiche codificate per ricostruire l’immagine. Questa architettura è particolarmente efficace in compiti che richiedono una localizzazione precisa, come la segmentazione delle immagini.
La rete di previsione del rumore ε_θ può utilizzare qualsiasi architettura che mappa input in output della stessa dimensionalità. Le architetture U-Net sono una scelta popolare, specialmente per i compiti di generazione di immagini.
Questo processo denoising gradualmente il campione, guidato dalla nostra rete di previsione del rumore appresa.
Nella pratica, ci sono varie tecniche di campionamento che possono migliorare la qualità o la velocità:
DDIM sampling: Una variante deterministica che consente meno passaggi di campionamento
Ancestral sampling: Incorpora la varianza appresa σ_θ^2
Truncated sampling: Si ferma prima per una generazione più rapida
Ecco un’implementazione di base dell’algoritmo di campionamento:
<p>def sample(model, n_samples, device):
# Inizia con rumore puro
x = torch.randn(n_samples, 3, 32, 32).to(device)</p>
<p>for t in reversed(range(1000)):
# Aggiungi rumore per creare 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># Prevedi e rimuovi rumore
pred_noise = model(x_t, t_batch)
x = remove_noise(x_t, pred_noise, t)</p>
<p># Aggiungi rumore per il passo successivo (tranne che a t=0)
if t > 0:
noise = torch.randn_like(x)
x = add_noise(x, noise, t-1)</p>
return x
La matematica dietro i modelli di diffusione
Per comprendere veramente i modelli di diffusione, è cruciale scavare più a fondo nella matematica che li sostiene. Esaminiamo alcuni concetti chiave in maggior dettaglio:
Catena di Markov e equazioni differenziali stocastiche
Il processo di diffusione diretto nei modelli di diffusione può essere visto come una catena di Markov o, nel limite continuo, come un’equazione differenziale stocastica (SDE). La formulazione SDE fornisce un potente quadro teorico per analizzare e estendere i modelli di diffusione.
L’SDE diretto può essere scritto come:
dx = f(x,t)dt + g(t)dw
Dove:
f(x,t) è il termine di deriva
g(t) è il coefficiente di diffusione
dw è un processo di Wiener (movimento browniano)
Scelte diverse di f e g portano a diversi tipi di processi di diffusione. Ad esempio:
Comprendere queste SDE ci consente di derivare strategie di campionamento ottimali e di estendere i modelli di diffusione a nuovi domini.
Corrispondenza dei punteggi e corrispondenza dei punteggi di denoising
La connessione tra i modelli di diffusione e la corrispondenza dei punteggi fornisce un’altra prospettiva preziosa. La funzione di punteggio è definita come il gradiente della densità di probabilità logaritmica:
s(x) = ∇x log p(x)
La corrispondenza dei punteggi di denoising mira a stimare questa funzione di punteggio addestrando un modello per denoising leggermente i punti di dati perturbati. Questo obiettivo si rivela equivalente all’obiettivo di formazione del modello di diffusione nel limite continuo.
Questa connessione ci consente di sfruttare tecniche del modello generativo basato sui punteggi, come la dinamica di Langevin annealata per il campionamento.
Tecniche di formazione avanzate
Campionamento per importanza
Il modello di diffusione standard campiona i passaggi temporali uniformemente. Tuttavia, non tutti i passaggi temporali sono ugualmente importanti per l’apprendimento. Le tecniche di campionamento per importanza possono essere utilizzate per concentrare la formazione sui passaggi temporali più informativi.
Un approccio è utilizzare una distribuzione non uniforme sui passaggi temporali, pesata dalla norma L2 attesa del punteggio:
p(t) ∝ E[||s(x_t, t)||²]
Questo può portare a una formazione più rapida e a una qualità del campione migliore.
Distillazione progressiva
La distillazione progressiva è una tecnica per creare modelli di campionamento più veloci senza sacrificare la qualità. Il processo funziona come segue:
Addestra un modello di diffusione di base con molti passaggi temporali (ad esempio 1000)
Crea un modello studente con meno passaggi temporali (ad esempio 100)
Addestra lo studente per emulare il processo di denoising del modello di base
Ripeti i passaggi 2-3, riducendo progressivamente i passaggi temporali
Questo consente una generazione di alta qualità con molti meno passaggi di denoising.
Innovazioni architettoniche
Modelli di diffusione basati su trasformatori
Mentre le architetture U-Net sono state popolari per i modelli di diffusione delle immagini, lavori recenti hanno esplorato l’uso di architetture basate su trasformatori. I trasformatori offrono diversi vantaggi potenziali:
Gestione migliore delle dipendenze a lungo raggio
Meccanismi di condizionamento più flessibili
Scalabilità più facile a dimensioni di modello più grandi
Modelli come DiT (Diffusion Transformers) hanno mostrato risultati promettenti, offrendo potenzialmente un percorso per una generazione ancora più di alta qualità.
Modelli di diffusione gerarchici
I modelli di diffusione gerarchici generano dati a più scale, consentendo sia la coerenza globale che i dettagli fini. Il processo solitamente coinvolge:
Generazione di un output a bassa risoluzione
Risoluzione progressiva e raffinamento
Questo approccio può essere particolarmente efficace per la generazione di immagini ad alta risoluzione o per la generazione di contenuti a lungo termine.
Argomenti avanzati
Guida senza classificatore
Guida senza classificatore è una tecnica per migliorare la qualità del campione e la controllabilità. L’idea chiave è addestrare due modelli di diffusione:
Un modello incondizionato p(x_t)
Un modello condizionato p(x_t | y) dove y è alcune informazioni di condizionamento (ad esempio una didascalia di testo)
Durante il campionamento, interpoliamo tra questi modelli:
ε_θ = (1 + w) * ε_θ(x_t | y) - w * ε_θ(x_t)
Dove w > 0 è una scala di guida che controlla quanto enfatizzare il modello condizionato.
Questo consente una condizionamento più forte senza dover riaddestrare il modello. È stato cruciale per il successo di modelli testo-immagine come DALL-E 2 e Stable Diffusion.
Modello di diffusione latente (LDM) coinvolge la codifica dei dati di input in uno spazio latente in cui si verifica il processo di diffusione. Il modello aggiunge gradualmente rumore alla rappresentazione latente dell’immagine, portando alla generazione di una versione rumorosa, che viene quindi denoised utilizzando un’architettura U-Net. L’U-Net, guidato da meccanismi di attenzione incrociata, integra informazioni da varie fonti di condizionamento come mappe semantiche, testo e rappresentazioni di immagini, ricostruendo infine l’immagine nello spazio dei pixel. Questo processo è fondamentale per generare immagini di alta qualità con una struttura controllata e attributi desiderati.
Questo offre diversi vantaggi:
Formazione e campionamento più veloci
Miglior gestione delle immagini ad alta risoluzione
Incorporazione più facile del condizionamento
Il processo funziona come segue:
Addestra un autoencoder per comprimere le immagini in uno spazio latente
Addestra un modello di diffusione in questo spazio latente
Per la generazione, campiona nello spazio latente e decodifica in pixel
Questo approccio è stato molto di successo, alimentando modelli come Stable Diffusion.
Modelli di coerenza
I modelli di coerenza sono una novità recente che mira a migliorare la velocità e la qualità dei modelli di diffusione. L’idea chiave è addestrare un singolo modello che possa mappare da qualsiasi livello di rumore direttamente all’output finale, senza richiedere denoising iterativo.
Questo viene realizzato attraverso una funzione di perdita progettata con cura che impone la coerenza tra le previsioni a diversi livelli di rumore. Il risultato è un modello che può generare campioni di alta qualità in un singolo passo in avanti, accelerando notevolmente l’inferenza.
Suggerimenti pratici per la formazione dei modelli di diffusione
La formazione di modelli di diffusione di alta qualità può essere impegnativa. Ecco alcuni suggerimenti pratici per migliorare la stabilità di formazione e i risultati:
Clipping dei gradienti: Utilizza il clipping dei gradienti per prevenire gradienti esplosivi, specialmente all’inizio della formazione.
Media mobile dei pesi del modello: Mantieni una media mobile esponenziale dei pesi del modello per il campionamento, che può portare a una generazione più stabile e di alta qualità.
Aumento dei dati: Per i modelli di immagini, semplici aumenti come capovolgimenti orizzontali casuali possono migliorare la generalizzazione.
Pianificazione del rumore: Sperimenta con diverse pianificazioni del rumore (lineare, cosinus, sigmoide) per trovare cosa funziona meglio per i tuoi dati.
Formazione a precisione mista: Utilizza la formazione a precisione mista per ridurre l’utilizzo della memoria e accelerare la formazione, specialmente per modelli grandi.
Generazione condizionata: Anche se il tuo obiettivo finale è la generazione incondizionata, l’addestramento con condizionamento (ad esempio sulle classi di immagini) può migliorare la qualità generale del campione.
Valutazione dei modelli di diffusione
La valutazione appropriata dei modelli generativi è cruciale ma impegnativa. Ecco alcune metriche e approcci comuni:
Distanza di Fréchet Inception (FID)
FID è una metrica ampiamente utilizzata per valutare la qualità e la diversità delle immagini generate. Confronta le statistiche dei campioni generati con i dati reali nello spazio delle caratteristiche di un classificatore pre-addestrato (solitamente InceptionV3).
Punteggi FID più bassi indicano una qualità e una distribuzione più realistiche. Tuttavia, FID ha limitazioni e non dovrebbe essere l’unica metrica utilizzata.
Punteggio di Inception (IS)
Inception Score misura sia la qualità che la diversità delle immagini generate. Utilizza una rete Inception pre-addestrata per calcolare:
IS = exp(E[KL(p(y|x) || p(y))])
Dove p(y|x) è la distribuzione condizionale di classe per l’immagine generata x.
Un punteggio IS più alto indica una qualità e una diversità migliori, ma ha limitazioni note, specialmente per set di dati molto diversi da ImageNet.
Per i modelli di diffusione, possiamo calcolare il logaritmo negativo della probabilità dei dati trattenuti. Ciò fornisce una misura diretta di quanto bene il modello si adatta alla distribuzione di dati vera.
Tuttavia, NLL può essere computazionalmente costoso da stimare con precisione per dati ad alta dimensionalità.
Valutazione umana
Per molte applicazioni, specialmente quelle creative, la valutazione umana rimane cruciale. Ciò può coinvolgere:
Confronti uno accanto all’altro con altri modelli
Valutazioni di tipo Turing
Valutazioni specifiche del compito (ad esempio, didascalia di immagini per modelli testo-immagine)
Sebbene soggettiva, la valutazione umana può catturare aspetti della qualità che le metriche automatiche mancano.
Modelli di diffusione in produzione
Distribuire modelli di diffusione in ambienti di produzione presenta sfide uniche. Ecco alcune considerazioni e best practice:
Ottimizzazione per l’inferenza
Esportazione ONNX: Converte modelli in formato ONNX per un’inferenza più rapida su diversi hardware.
Quantizzazione: Utilizza tecniche come la quantizzazione INT8 per ridurre le dimensioni del modello e migliorare la velocità di inferenza.
Memorizzazione: Per modelli condizionati, memorizza i risultati intermedi per il modello incondizionato per velocizzare la guida senza classificatore.
Elaborazione batch: Sfrutta l’elaborazione batch per utilizzare efficientemente le risorse GPU.
Scalabilità
Inferenza distribuita: Per applicazioni ad alto throughput, implementa l’inferenza distribuita su più GPU o macchine.
Campionamento adattivo: Regola dinamicamente il numero di passaggi di campionamento in base al compromesso desiderato tra qualità e velocità.
Generazione progressiva: Per output di grandi dimensioni (ad esempio immagini ad alta risoluzione), genera progressivamente da bassa a risoluzione più alta per fornire risultati iniziali più rapidi.
Sicurezza e filtraggio
Filtraggio del contenuto: Implementa sistemi di filtraggio del contenuto robusti per prevenire la generazione di contenuti dannosi o inappropriati.
Marchiatura: Considera l’incorporazione di marchiature invisibili nel contenuto generato per la tracciabilità.
Applicazioni
I modelli di diffusione hanno trovato successo in una vasta gamma di compiti generativi:
Generazione di immagini
La generazione di immagini è dove i modelli di diffusione hanno guadagnato prominanza. Alcuni esempi notevoli includono:
DALL-E 3: Il modello testo-immagine di OpenAI, che combina un encoder di testo CLIP con un decoder di immagine di diffusione
Stable Diffusion: Un modello di diffusione latente open-source per la generazione testo-immagine
Imagen: Il modello testo-immagine di diffusione di Google
Questi modelli possono generare immagini estremamente realistiche e creative a partire da descrizioni di testo, superando gli approcci basati su GAN precedenti.
Generazione di video
I modelli di diffusione sono stati applicati anche alla generazione di video:
Modelli di diffusione video: Generazione di video trattando il tempo come una dimensione aggiuntiva nel processo di diffusione
Make-A-Video: Il modello testo-video di diffusione di Meta
Imagen Video: Il modello testo-video di diffusione di Google
Questi modelli possono generare clip video brevi a partire da descrizioni di testo, aprendo nuove possibilità per la creazione di contenuti.
Generazione 3D
Lavori recenti hanno esteso i modelli di diffusione alla generazione 3D:
DreamFusion: Generazione testo-3D utilizzando modelli di diffusione 2D
Point-E: Il modello di diffusione di punti di OpenAI per la generazione di oggetti 3D
Questi approcci consentono la creazione di asset 3D a partire da descrizioni di testo, con applicazioni nel gaming, VR/AR e progettazione di prodotti.
Sfide e direzioni future
Sebbene i modelli di diffusione abbiano mostrato un successo notevole, ci sono ancora diverse sfide e aree di ricerca future:
Efficienza computazionale
Il processo di campionamento iterativo dei modelli di diffusione può essere lento, specialmente per output ad alta risoluzione. Approcci come la diffusione latente e i modelli di coerenza mirano ad affrontare questo problema, ma ulteriori miglioramenti nell’efficienza sono un’area di ricerca attiva.
Controllabilità
Sebbene tecniche come la guida senza classificatore abbiano migliorato la controllabilità, c’è ancora lavoro da fare per consentire un controllo più fine-grano sugli output generati. Ciò è particolarmente importante per applicazioni creative.
Generazione multi-modale
I modelli di diffusione attuali eccellono nella generazione di singola modalità (ad esempio immagini o audio). Sviluppare modelli di diffusione veramente multi-modalità che possano generare senza problemi attraverso modalità è una direzione emozionante per il lavoro futuro.
Comprensione teorica
Sebbene i modelli di diffusione abbiano risultati empirici solidi, c’è ancora molto da capire su perché funzionano così bene. Sviluppare una comprensione teorica più profonda potrebbe portare a ulteriori miglioramenti e nuove applicazioni.
Conclusione
I modelli di diffusione rappresentano un passo avanti nell’intelligenza artificiale generativa, offrendo risultati di alta qualità in una gamma di modalità. Imparando a invertire un processo di aggiunta di rumore, forniscono un approccio flessibile e teorico alla generazione.
Dalle applicazioni creative alle simulazioni scientifiche, la capacità di generare dati complessi e ad alta dimensionalità ha il potenziale per trasformare molti campi. Tuttavia, è importante affrontare queste tecnologie potenti con pensiero critico, considerando sia il loro enorme potenziale che le sfide etiche che presentano.
Ho trascorso gli ultimi cinque anni immergendomi nel mondo affascinante del Machine Learning e del Deep Learning. La mia passione e la mia esperienza mi hanno portato a contribuire a oltre 50 progetti di ingegneria del software diversi, con un focus particolare su AI/ML. La mia curiosità in corso mi ha anche portato verso l'elaborazione del linguaggio naturale, un campo che sono ansioso di esplorare ulteriormente.