Logo Zephyrnet

Introduzione ai modelli di diffusione per l'apprendimento automatico

Data:

Questo articolo è stato pubblicato in origine Assemblea AI e ripubblicato su TOPBOTS con il permesso dell'autore.

I modelli di diffusione sono modelli generativi che hanno guadagnato una notevole popolarità negli ultimi anni e per una buona ragione. Una manciata di articoli seminali pubblicati negli anni '2020 da solo hanno mostrato al mondo di cosa sono capaci i modelli Diffusion, come battere i GAN[6] sulla sintesi delle immagini. Più di recente, i professionisti avranno visto i modelli di diffusione utilizzati DALL-MI2, il modello di generazione di immagini di OpenAI rilasciato il mese scorso.

Varie immagini generate da DALL-E 2 (source).

Data la recente ondata di successo dei modelli di diffusione, molti professionisti dell'apprendimento automatico sono sicuramente interessati ai loro meccanismi interni. In questo articolo esamineremo il fondamenti teorici dei modelli di diffusionee quindi dimostrare come generare immagini con a Modello di diffusione in PyTorch. Immergiamoci!

Se questo contenuto educativo approfondito è utile per te, iscriviti alla nostra mailing list AI per essere avvisato quando rilasciamo nuovo materiale. 

Modelli di diffusione – Introduzione

I modelli di diffusione sono generativo modelli, nel senso che vengono utilizzati per generare dati simili ai dati su cui vengono addestrati. Fondamentalmente, i modelli di diffusione funzionano distruggere i dati di allenamento attraverso l'aggiunta successiva di rumore gaussiano, e poi imparare a riprendersi i dati di retromarcia questo processo sonoro. Dopo l'allenamento, possiamo utilizzare il modello di diffusione per generare dati semplicemente passando il rumore campionato casualmente attraverso il processo di denoising appreso.

I modelli di diffusione possono essere utilizzati per generare immagini dal rumore (adattate da source)

Più specificamente, un modello di diffusione è un modello variabile latente che mappa allo spazio latente utilizzando una catena di Markov fissa. Questa catena aggiunge gradualmente rumore ai dati in modo da ottenere il posteriore approssimativo q(x1:T|x0), dove x1,…,XT sono le variabili latenti con la stessa dimensionalità di x0. Nella figura seguente, vediamo una tale catena di Markov manifestata per i dati dell'immagine.

Alla fine, l'immagine viene trasformata in modo asintotico in puro rumore gaussiano. Il scopo di formazione un modello di diffusione è imparare il invertire processo – cioè formazione pθ(xt-1|xt). Attraversando all'indietro questa catena, possiamo generare nuovi dati.

Vantaggi dei modelli di diffusione

Come accennato in precedenza, la ricerca sui modelli di diffusione è esplosa negli ultimi anni. Ispirato dalla termodinamica di non equilibrio[1], Attualmente vengono prodotti i modelli di diffusione Qualità dell'immagine all'avanguardia, di cui si possono vedere esempi di seguito:

Oltre alla qualità dell'immagine all'avanguardia, i modelli di diffusione offrono una serie di altri vantaggi, tra cui non richiede formazione in contraddittorio. Le difficoltà della formazione in contraddittorio sono ben documentate; e, nei casi in cui esistono alternative non contraddittorie con prestazioni ed efficienza di formazione comparabili, di solito è meglio utilizzarle. Sul tema dell'efficienza della formazione, i modelli di diffusione hanno anche i vantaggi aggiuntivi di scalabilità e parallelizzabilità.

Mentre i modelli di diffusione sembrano quasi produrre risultati dal nulla, ci sono molte scelte e dettagli matematici attenti e interessanti che forniscono la base per questi risultati e le migliori pratiche sono ancora in evoluzione nella letteratura. Diamo ora un'occhiata alla teoria matematica alla base dei modelli di diffusione in modo più dettagliato.

Modelli di diffusione: un'immersione profonda

Come accennato in precedenza, un modello di diffusione è costituito da a processo in avanti (o processo di diffusione), in cui un dato (generalmente un'immagine) viene progressivamente disturbato, e a processo inverso (o processo di diffusione inversa), in cui il rumore viene riconvertito in un campione dalla distribuzione target.

Le transizioni della catena di campionamento nel processo in avanti possono essere impostate su gaussiane condizionali quando il livello di rumore è sufficientemente basso. La combinazione di questo fatto con l'ipotesi di Markov porta a una semplice parametrizzazione del processo in avanti:

Nota matematica

Abbiamo parlato di corrompere i dati di l'aggiunta di Rumore gaussiano, ma all'inizio potrebbe non essere chiaro dove stiamo eseguendo questa aggiunta. Secondo l'equazione di cui sopra, ad ogni passo della catena stiamo semplicemente campionando da una distribuzione gaussiana la cui media è il valore precedente (cioè l'immagine) nella catena.

Queste due affermazioni sono equivalenti. Questo è

Per capire perché, utilizzeremo un leggero abuso di notazione asserendo

Dove l'implicazione finale deriva dall'equivalenza matematica tra una somma di variabili casuali e la convoluzione delle loro distribuzioni - cfr. questa pagina di Wikipedia per maggiori informazioni.

In altre parole, abbiamo mostrato che asserire la distribuzione di un intervallo condizionato sul precedente tramite una distribuzione gaussiana equivale ad asserire che la distribuzione di un dato intervallo è quella del precedente con l'aggiunta del rumore gaussiano. Abbiamo omesso gli scalari introdotti dal programma di varianza e lo abbiamo mostrato per una dimensione per semplicità, ma una prova simile vale per le gaussiane multivariate.

Dove β1,…,βT è un programma di varianza (appreso o fisso) che, se ben educato, lo assicura xT è quasi una gaussiana isotropa per T sufficientemente grande.

Data l'ipotesi di Markov, la distribuzione congiunta delle variabili latenti è il prodotto delle transizioni della catena condizionale gaussiana (modificata da source).

Come accennato in precedenza, la “magia” dei modelli di diffusione arriva nel processo inverso. Durante l'addestramento, il modello impara a invertire questo processo di diffusione per generare nuovi dati. A partire dal puro rumore gaussiano p(xT):=N(xT,0,I) il modello apprende la distribuzione congiunta pθ(x0:T) come

dove vengono appresi i parametri dipendenti dal tempo delle transizioni gaussiane. Si noti in particolare che la formulazione di Markov afferma che una data distribuzione di transizione di diffusione inversa dipende solo dal passaggio temporale precedente (o dal passaggio temporale successivo, a seconda di come lo si guarda):

Training

Un modello di diffusione viene addestrato da trovare le transizioni di Markov inverse che massimizzano la probabilità dei dati di addestramento. In pratica, l'addestramento consiste in modo equivalente nel ridurre al minimo il limite superiore variazionale della probabilità logaritmica negativa.

Dettaglio della notazione

Si noti che leccetera è tecnicamente un superiore bound (il negativo dell'ELBO) che stiamo cercando di minimizzare, ma lo chiamiamo Leccetera per coerenza con la letteratura.

Cerchiamo di riscrivere la Leccetera in termini di Divergenze di Kullback-Leibler (KL). La divergenza KL è una misura statistica asimmetrica della distanza di quanto una distribuzione di probabilità P differisce da una distribuzione di riferimento Q. Ci interessa formulare Leccetera in termini di divergenze KL perché le distribuzioni di transizione nella nostra catena di Markov sono gaussiane e la divergenza KL tra gaussiane ha una forma chiusa.

Cos'è la divergenza KL?

La forma matematica della divergenza KL per distribuzioni continue è

Le doppie barre indicano che la funzione non è simmetrica rispetto ai suoi argomenti.

Di seguito puoi vedere la divergenza KL di una distribuzione variabile P (blu) da una distribuzione di riferimento Q (rosso). La curva verde indica la funzione all'interno dell'integrale nella definizione per la divergenza KL sopra e l'area totale sotto la curva rappresenta il valore della divergenza KL di P da Q in un dato momento, un valore che viene visualizzato anche numericamente.

Casting Liv in termini di divergenze KL

Come accennato in precedenza, è possibile [1] per riscrivere Leccetera quasi completamente in termini di divergenze KL:

where

Dettagli di derivazione

Il limite variazionale è uguale a

Sostituendo le distribuzioni con le loro definizioni data la nostra ipotesi di Markov, otteniamo

Usiamo le regole di log per trasformare l'espressione in una somma di log, quindi estraiamo il primo termine

Usando il teorema di Bayes e la nostra assunzione di Markov, questa espressione diventa

Abbiamo quindi suddiviso il termine medio utilizzando le regole di registro

Isolando il secondo termine, vediamo

Ricollegandolo alla nostra equazione per Leccetera, noi abbiamo

Usando le regole di registro, riorganizziamo

d8

Successivamente, notiamo la seguente equivalenza per la divergenza KL per due distribuzioni qualsiasi:

Infine, applicando questa equivalenza all'espressione precedente, si arriva a

Condizionamento del processo in avanti a posteriori su x0 in lt-1 risulta in una forma trattabile che porta a tutte le divergenze KL sono confronti tra gaussiani. Ciò significa che le divergenze possono essere calcolate esattamente con espressioni in forma chiusa piuttosto che con stime Monte Carlo[3].

Scelte del modello

Una volta stabilite le basi matematiche per la nostra funzione obiettivo, ora dobbiamo fare diverse scelte su come verrà implementato il nostro modello di diffusione. Per il processo forward, l'unica scelta richiesta è la definizione della schedula di varianza, i cui valori sono generalmente crescenti durante il processo forward.

Per il processo inverso, scegliamo di gran lunga la parametrizzazione della distribuzione gaussiana/le architetture del modello. Notare la elevato grado di flessibilità che i modelli di diffusione consentono: il esclusivamente requisito della nostra architettura è che i suoi input e output abbiano la stessa dimensionalità.

Esploreremo i dettagli di queste scelte in modo più dettagliato di seguito.

Avanti Processo e LT

Come notato sopra, per quanto riguarda il processo forward, dobbiamo definire il programma di varianza. In particolare, li abbiamo impostati per essere costanti dipendenti dal tempo, ignorando il fatto che possono essere appresi. Per esempio[3], un programma lineare da β1= 10-4 a βT=0.2 potrebbe essere usato, o forse una serie geometrica.

Indipendentemente dai valori particolari scelti, il fatto che il programma di varianza sia fisso risulta in LT diventando una costante rispetto al nostro insieme di parametri apprendibili, permettendoci di ignorarlo per quanto riguarda la formazione.

Processo inverso e L1:T-1

Ora discutiamo le scelte necessarie per definire il processo inverso. Ricordiamo dall'alto abbiamo definito le transizioni di Markov inverse come gaussiane:

Dobbiamo ora definire le forme funzionali di μθ o Σθ. Mentre ci sono modi più complicati per parametrizzare Σθ[5], abbiamo semplicemente impostato

Cioè, assumiamo che la gaussiana multivariata sia un prodotto di gaussiane indipendenti con varianza identica, un valore di varianza che può cambiare nel tempo. Noi impostare queste varianze in modo che siano equivalenti al nostro programma di varianza del processo forward.

Data questa nuova formulazione di Σθ, noi abbiamo

che ci permette di trasformarci

a

dove il primo termine nella differenza è una combinazione lineare di xt e x0 che dipende dal programma di varianza βt. La forma esatta di questa funzione non è rilevante per i nostri scopi, ma può essere trovata in [3].

Il significato della proporzione di cui sopra è quello la parametrizzazione più semplice di μθ predice semplicemente la media posteriore della diffusione. È importante sottolineare che gli autori di [3] ha effettivamente scoperto che la formazione μθ per prevedere il rumore componente in un dato momento produce risultati migliori. In particolare, lascia

where

Ciò porta alla seguente funzione di perdita alternativa, che gli autori di [3] trovato per portare a un allenamento più stabile e risultati migliori:

Gli autori di [3] notano anche le connessioni di questa formulazione dei modelli di diffusione ai modelli generativi di corrispondenza dei punteggi basati sulla dinamica di Langevin. In effetti, sembra che i modelli di diffusione e i modelli basati sul punteggio possano essere due facce della stessa medaglia, simili allo sviluppo indipendente e simultaneo della meccanica quantistica basata sulle onde e della meccanica quantistica basata su matrici che rivelano due formulazioni equivalenti degli stessi fenomeni[2].

Architettura di rete

Mentre la nostra funzione di perdita semplificata cerca di addestrare un modello ϵθ, non abbiamo ancora definito l'architettura di questo modello. Si noti che il esclusivamente requisito per il modello è che la sua dimensionalità di input e di output siano identiche.

Data questa restrizione, forse non sorprende che i modelli di diffusione delle immagini siano comunemente implementati con architetture simili a U-Net.

Decodificatore di processo inverso e L0

Il percorso lungo il processo inverso consiste in molte trasformazioni in distribuzioni gaussiane condizionali continue. Alla fine del processo inverso, ricorda che stiamo cercando di produrre un Immagine, che è composto da valori di pixel interi. Pertanto, dobbiamo escogitare un modo per ottenere verosimiglianze discrete (log). per ogni possibile valore di pixel su tutti i pixel.

Il modo in cui ciò avviene è impostando l'ultima transizione nella catena di diffusione inversa su an decodificatore discreto indipendente. Per determinare la probabilità di una data immagine x0 dato x1, imponiamo prima l'indipendenza tra le dimensioni dei dati:

dove D è la dimensionalità dei dati e dell'apice i indica l'estrazione di una coordinata. L'obiettivo ora è determinare la probabilità che ogni valore intero sia per un dato pixel dato la distribuzione tra i possibili valori per il pixel corrispondente nell'immagine leggermente disturbata al tempo t=1:

dove le distribuzioni in pixel per t=1 sono derivate dalla gaussiana multivariata sottostante la cui matrice di covarianza diagonale ci consente di dividere la distribuzione in un prodotto di gaussiane univariate, una per ogni dimensione dei dati:

Assumiamo che le immagini siano costituite da numeri interi in 0,1,…,255 (come fanno le immagini RGB standard) che sono stati ridimensionati linearmente a [−1,1]. Quindi scomponiamo la linea reale in piccoli "secchi", dove, per un dato valore di pixel in scala x, il bucket per quell'intervallo è [x−1/255, x+1/255]. La probabilità di un valore in pixel x, data la distribuzione gaussiana univariata del pixel corrispondente in x1, è il area sotto quella distribuzione gaussiana univariata all'interno del secchio centrato a x.

Di seguito puoi vedere l'area per ciascuno di questi bucket con le relative probabilità per una gaussiana media-0 che, in questo contesto, corrisponde a una distribuzione con un valore medio di pixel di 255/2 (mezza luminosità). La curva rossa rappresenta la distribuzione di un pixel specifico nel file t = 1 immagine e le aree danno la probabilità del valore di pixel corrispondente nel file t = 0 immagine.

Nota tecnica

Il primo e l'ultimo bucket si estendono fino a -inf e +inf per preservare la probabilità totale.

Dato a t = 0 valore pixel per ogni pixel, il valore di pθ(x0|x1) è semplicemente il loro prodotto. Questo processo è sinteticamente incapsulato dalla seguente equazione:

where

ed

Data questa equazione per pθ(x0|x1), possiamo calcolare il termine finale di Leccetera che non è formulato come una divergenza KL:

Obiettivo finale

Come accennato nell'ultima sezione, gli autori di [3] ha scoperto che la previsione della componente di rumore di un'immagine in un determinato intervallo di tempo ha prodotto i risultati migliori. Infine, utilizzano il seguente obiettivo:

Gli algoritmi di addestramento e campionamento per il nostro modello di diffusione possono quindi essere sintetizzati nella figura seguente:

Riepilogo della teoria del modello di diffusione

In questa sezione abbiamo approfondito la teoria dei modelli di diffusione. Può essere facile rimanere intrappolati nei dettagli matematici, quindi notiamo i punti più importanti all'interno di questa sezione di seguito per mantenerci orientati da una prospettiva a volo d'uccello:

  1. Il nostro modello di diffusione è parametrizzato come a Catena di Markov, il che significa che le nostre variabili latenti x1,…,XT dipendono solo dal passaggio temporale precedente (o successivo).
  2. distribuzioni di transizione nella catena di Markov sono Gaussiana, dove il processo in avanti richiede una pianificazione della varianza e vengono appresi i parametri del processo inverso.
  3. Il processo di diffusione assicura che xT is distribuito asintoticamente come gaussiano isotropo per T sufficientemente grande.
  4. Nel nostro caso, il la pianificazione della varianza è stata fissata, ma può anche essere appreso. Per orari fissi, seguire una progressione geometrica può fornire risultati migliori rispetto a una progressione lineare. In entrambi i casi, le varianze sono generalmente crescenti nel tempo nella serie (cioè βij per i
  5. I modelli di diffusione sono altamente flessibile e consentire in qualsiasi architettura la cui dimensionalità di input e output è la stessa da utilizzare. Molte implementazioni usano Come U-Net architetture.
  6. obiettivo formativo è quello di massimizzare la probabilità dei dati di addestramento. Ciò si manifesta con l'ottimizzazione dei parametri del modello minimizzare il limite superiore variazionale della probabilità logaritmica negativa dei dati.
  7. Quasi tutti i termini nella funzione obiettivo possono essere espressi come Divergenze KL come risultato della nostra ipotesi di Markov. Questi valori diventa sostenibile da calcolare dato che stiamo usando le gaussiane, tralasciando quindi la necessità di eseguire l'approssimazione Monte Carlo.
  8. In definitiva, utilizzando un file obiettivo formativo semplificato addestrare una funzione che predice la componente di rumore di una data variabile latente produce i risultati migliori e più stabili.
  9. decodificatore discreto viene utilizzato per ottenere le verosimiglianze dei log tra i valori dei pixel come ultimo passaggio nel processo di diffusione inversa.

Con questa panoramica di alto livello dei modelli di diffusione nelle nostre menti, passiamo a vedere come utilizzare un modello di diffusione in PyTorch.

Modelli di diffusione in PyTorch

Sebbene i modelli di diffusione non siano stati ancora democratizzati nella stessa misura di altre architetture/approcci precedenti in Machine Learning, sono ancora disponibili implementazioni per l'uso. Il modo più semplice per utilizzare un modello di diffusione in PyTorch è utilizzare il denoising-diffusion-pytorch pacchetto, che implementa un modello di diffusione delle immagini come quello discusso in questo articolo. Per installare il pacchetto, digita semplicemente il seguente comando nel terminale:

pip install denoising_diffusion_pytorch

Esempio minimo

Per addestrare un modello e generare immagini, importiamo prima i pacchetti necessari:

import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion

Successivamente, definiamo la nostra architettura di rete, in questo caso una U-Net. Il dim il parametro specifica il numero di mappe delle caratteristiche prima del primo downsampling e il dim_mults il parametro fornisce moltiplicandi per questo valore e successivi downsampling:

model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
)

Ora che la nostra architettura di rete è definita, dobbiamo definire lo stesso modello di diffusione. Passiamo nel modello U-Net che abbiamo appena definito insieme a diversi parametri: la dimensione delle immagini da generare, il numero di passaggi temporali nel processo di diffusione e una scelta tra le norme L1 e L2.

diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
)

Ora che il modello di diffusione è definito, è tempo di allenarsi. Generiamo dati casuali su cui allenarci, quindi addestriamo il modello di diffusione nel solito modo:

training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()

Una volta che il modello è stato addestrato, possiamo finalmente generare immagini utilizzando il file sample() metodo del diffusion oggetto. Qui generiamo 4 immagini, che sono solo rumore dato che i nostri dati di allenamento erano casuali:

sampled_images = diffusion.sample(batch_size = 4)

Formazione sui dati personalizzati

denoising-diffusion-pytorch Il pacchetto consente inoltre di addestrare un modello di diffusione su un set di dati specifico. Sostituisci semplicemente il 'path/to/your/images' stringa con il percorso della directory del set di dati in Trainer() oggetto sottostante e modificare image_size al valore appropriato. Dopodiché, esegui semplicemente il codice per addestrare il modello, quindi campiona come prima. Nota che PyTorch deve essere compilato con CUDA abilitato per poter utilizzare il Trainer classe:

from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
).cuda()
diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
).cuda()
trainer = Trainer(
 diffusion,
 'path/to/your/images',
 train_batch_size = 32,
 train_lr = 2e-5,
 train_num_steps = 700000, # total training steps
 gradient_accumulate_every = 2, # gradient accumulation steps
 ema_decay = 0.995, # exponential moving average decay
 amp = True # turn on mixed precision
)
trainer.train()

Di seguito puoi vedere il denoising progressivo dal rumore gaussiano multivariato alle cifre MNIST simili alla diffusione inversa:

Le parole finali

I modelli di diffusione sono un approccio concettualmente semplice ed elegante al problema della generazione dei dati. I loro risultati all'avanguardia combinati con una formazione non contraddittoria li ha spinti a grandi altezze e nei prossimi anni ci si possono aspettare ulteriori miglioramenti dato il loro stato nascente. In particolare, i modelli di diffusione si sono rivelati essenziali per le prestazioni di modelli all'avanguardia come DALL-MI2.

Riferimenti

Apprendimento non supervisionato profondo utilizzando la termodinamica di non equilibrio

Modellazione generativa mediante la stima dei gradienti della distribuzione dei dati

Modelli probabilistici di diffusione del denoising

Tecniche migliorate per la formazione di modelli generativi basati sul punteggio

Modelli probabilistici di diffusione del denoising migliorati

I modelli di diffusione battono i GAN sulla sintesi dell'immagine

GLIDE: Verso la generazione e l'editing di immagini fotorealistiche con modelli di diffusione guidata dal testo

Generazione di immagini condizionali al testo gerarchiche con latenti CLIP

Ti piace questo articolo? Iscriviti per ulteriori aggiornamenti sulla ricerca AI.

Ti faremo sapere quando pubblicheremo altri articoli di riepilogo come questo.

spot_img

L'ultima intelligenza

spot_img

Parla con noi

Ciao! Come posso aiutarla?