Anche se gli autoencoders variazionali (VAE) sono facili da implementare e da addestrare, spiegarli non è affatto semplice, perché mescolano concetti di Deep Learning e Baye variazionali e le comunità di Deep Learning e Probabilistic Modeling usano termini diversi per gli stessi concetti. Pertanto, quando si spiegano i VAE, si rischia di concentrarsi sulla parte del modello statistico, lasciando il lettore senza la minima idea di come implementarlo effettivamente, o viceversa di concentrarsi sull'architettura della rete e sulla funzione di perdita, in cui il termine Kullback-Leibler sembra essere tirato fuori dal nulla. Cercherò di trovare una via di mezzo qui, partendo dal modello ma fornendo abbastanza dettagli per implementarlo nella pratica, o capire l'implementazione di qualcun altro.
I VAE sono modelli generativi
A differenza dei classici autoencoder (sparsi, denutranti, ecc.), I VAE sono modelli generativi , come i GAN. Con modello generativo intendo un modello che apprende la distribuzione di probabilità sullo spazio di input \ mathcal {x} . Ciò significa che dopo aver addestrato un tale modello, possiamo quindi campionare da (la nostra approssimazione di) p (\ mathbf {x}) . Se il nostro set di allenamento è composto da cifre scritte a mano (MNIST), dopo l'allenamento il modello generativo è in grado di creare immagini che assomigliano a cifre scritte a mano, anche se non sono "copie" delle immagini nel set di addestramento.p(x)xp(x)
L'apprendimento della distribuzione delle immagini nel set di addestramento implica che le immagini che sembrano cifre scritte a mano dovrebbero avere un'alta probabilità di essere generate, mentre le immagini che sembrano Jolly Roger o rumore casuale dovrebbero avere una bassa probabilità. In altre parole, significa conoscere le dipendenze tra i pixel: se la nostra immagine è un'immagine in scala di grigi pixel da MNIST, il modello dovrebbe imparare che se un pixel è molto luminoso, allora c'è una probabilità significativa che alcuni vicini anche i pixel sono luminosi, quindi se abbiamo una linea lunga e inclinata di pixel luminosi potremmo avere un'altra linea di pixel orizzontale più piccola sopra questa (un 7), ecc.28×28=784
I VAE sono modelli variabili latenti
Il VAE è un modello di variabili latenti : ciò significa che , il vettore casuale delle intensità di 784 pixel (le variabili osservate ), è modellato come una funzione (forse molto complicata) di un vettore casuale di dimensionalità inferiore, i cui componenti sono variabili non osservate ( latenti ). Quando ha senso un modello del genere? Ad esempio, nel caso MNIST pensiamo che le cifre scritte a mano appartengano a una varietà di dimensioni molto più piccola della dimensione dixz ∈ Z xz∈Zx, poiché la stragrande maggioranza delle disposizioni casuali con intensità di 784 pixel, non assomiglia affatto a cifre scritte a mano. Intuitivamente ci aspetteremmo che la dimensione sia almeno 10 (il numero di cifre), ma molto probabilmente è più grande perché ogni cifra può essere scritta in modi diversi. Alcune differenze non sono importanti per la qualità dell'immagine finale (ad esempio, rotazioni globali e traduzioni), ma altre sono importanti. Quindi in questo caso il modello latente ha un senso. Più su questo più tardi. Si noti che, sorprendentemente, anche se la nostra intuizione ci dice che la dimensione dovrebbe essere di circa 10, possiamo sicuramente usare solo 2 variabili latenti per codificare il set di dati MNIST con un VAE (anche se i risultati non saranno abbastanza). Il motivo è che anche una singola variabile reale può codificare infinitamente molte classi, perché può assumere tutti i possibili valori interi e altro. Naturalmente, se le classi hanno una significativa sovrapposizione tra loro (come 9 e 8 o 7 e I in MNIST), anche la funzione più complicata di sole due variabili latenti farà un cattivo lavoro nel generare campioni chiaramente distinguibili per ogni classe. Più su questo più tardi.
I VAE assumono una distribuzione parametrica multivariata (dove sono i parametri di ) e apprendono i parametri del distribuzione multivariata. L'uso di un pdf parametrico per , che impedisce al numero di parametri di un VAE di crescere senza limiti con la crescita del set di addestramento, è chiamato ammortamento nel gergo VAE (sì, lo so ...).q(z|x,λ)λqz
La rete del decodificatore
Partiamo dalla rete del decodificatore perché il VAE è un modello generativo e l'unica parte del VAE che viene effettivamente utilizzata per generare nuove immagini è il decodificatore. La rete dell'encoder viene utilizzata solo al momento dell'inferenza (training).
L'obiettivo della rete di decodifica è generare nuovi vettori casuali appartenenti allo spazio di input , ovvero nuove immagini, a partire dalle realizzazioni del vettore latente . Ciò significa chiaramente che deve imparare la distribuzione condizionale . Per VAE questa distribuzione è spesso considerata come un gaussiano multivariato 1 :xXzp(x|z)
pϕ(x|z)=N(x|μ(z;ϕ),σ(z;ϕ)2I)
ϕ è il vettore di pesi (e distorsioni) della rete dell'encoder. I vettori e sono funzioni complesse, sconosciute e non lineari, modellato dalla rete del decodificatore: le reti neurali sono potenti approssimatori di funzioni non lineari.μ(z;ϕ)σ(z;ϕ)
Come notato da @amoeba nei commenti, c'è una sorprendente somiglianza tra il decodificatore e un classico modello di variabili latenti: Analisi fattoriale. Nell'analisi fattoriale si assume il modello:
x|z∼N(Wz+μ,σ2I), z∼N(0,I)
Entrambi i modelli (FA e il decodificatore) presuppongono che la distribuzione condizionale delle variabili osservabili sulle variabili latenti sia gaussiana e che gli stessi siano gaussiani standard. La differenza è che il decodificatore non assume che la media di sia lineare in , né assume che la deviazione standard sia un vettore costante. Al contrario, li modella come complesse funzioni non lineari di . A questo proposito, può essere visto come un'analisi fattoriale non lineare. Vedi quixzzp(x|z)zzper una approfondita discussione di questa connessione tra FA e VAE. Poiché FA con una matrice di covarianza isotropica è solo PPCA, questo si lega anche al noto risultato che un autoencoder lineare riduce a PCA.
Torniamo al decoder: come impariamo ? Intuitivamente vogliamo variabili latenti che massimizzino la probabilità di generare nel set di addestramento . In altre parole, vogliamo calcolare la distribuzione della probabilità posteriore di , dati i dati:ϕzxiDnz
p ( z | x ) = pφ( x | z ) p ( z )p ( x )
Assumiamo un prima di e rimaniamo con il solito problema nell'inferenza bayesiana che calcolare (l' evidenza ) è difficile ( un integrale multidimensionale). Inoltre, poiché qui è sconosciuto, non possiamo comunque calcolarlo. Inserisci Variaference Inference, lo strumento che dà il nome agli Autoencoder Variazionali.N( 0 , I)zp ( x )μ ( z ; ϕ )μ ( z ; ϕ )
Inferenza variabile per il modello VAE
L'inferenza variazionale è uno strumento per eseguire l'inferenza bayesiana approssimativa per modelli molto complessi. Non è uno strumento eccessivamente complesso, ma la mia risposta è già troppo lunga e non entrerò in una spiegazione dettagliata di VI. Puoi dare un'occhiata a questa risposta e ai riferimenti in essa se sei curioso:
/stats//a/270569/58675
Basti dire che VI cerca un'approssimazione di in una famiglia parametrica di distribuzioni , dove, come notato sopra, sono i parametri della famiglia. Cerchiamo i parametri che minimizzano la divergenza di Kullback-Leibler tra la nostra distribuzione target e :p ( z | x )q( z | x , λ )λp ( z | x )q( z | x , λ )
minλD [p( z | x )| | q( z | x , λ ) ]
Ancora una volta, non possiamo minimizzare questo direttamente perché la definizione di divergenza di Kullback-Leibler include l'evidenza. Presentazione di ELBO (Evidence Lower BOund) e dopo alcune manipolazioni algebriche, arriviamo finalmente a:
EL B O ( λ ) = Eq( z | x , λ )[ logp ( x | z ) ] - D [ ( q(z|x,λ)||p(z)]
Poiché l'ELBO ha un limite inferiore di evidenza (vedere il link sopra), la massimizzazione dell'ELBO non è esattamente equivalente alla massimizzazione della probabilità di dati dati (dopo tutto, VI è uno strumento per un'inferenza bayesiana approssimativa ), ma va nella giusta direzione.λ
Per fare una deduzione, dobbiamo specificare la famiglia parametrica . Nella maggior parte dei VAE scegliamo una distribuzione gaussiana multivariata e non correlataq(z|x,λ)
q(z|x,λ)=N(z|μ(x),σ2(x)I)
Questa è la stessa scelta che abbiamo fatto per , sebbene potremmo aver scelto una famiglia parametrica diversa. Come prima, possiamo stimare queste complesse funzioni non lineari introducendo un modello di rete neurale. Poiché questo modello accetta immagini di input e restituisce i parametri della distribuzione delle variabili latenti, lo chiamiamo la rete dell'encoder . Come prima, possiamo stimare queste complesse funzioni non lineari introducendo un modello di rete neurale. Poiché questo modello accetta immagini di input e restituisce i parametri della distribuzione delle variabili latenti, lo chiamiamo la rete dell'encoder .p ( x | z )
La rete dell'encoder
Chiamata anche rete di inferenza , questa viene utilizzata solo al momento dell'allenamento.
Come notato sopra, l'encoder deve approssimare e , quindi se abbiamo, diciamo, 24 variabili latenti, l'output di l'encoder è un vettore . L'encoder ha pesi (e distorsioni) . Per imparare , possiamo finalmente scrivere ELBO in termini di parametri e della rete di encoder e decoder, nonché i set point di training:μ ( x )σ ( x )d= 48θθθφ
EL B O ( θ , ϕ ) = ∑ioEqθ( z | xio, λ )[ logpφ( xio| z ) ] - D [ ( qθ( z | xio, λ ) | | p ( z ) ]
Finalmente possiamo concludere. L'opposto di ELBO, in funzione di e , viene utilizzato come funzione di perdita del VAE. Usiamo SGD per minimizzare questa perdita, cioè massimizzare ELBO. Poiché ELBO ha un limite inferiore rispetto alle prove, ciò va nella direzione di massimizzare le prove e quindi generare nuove immagini che sono perfettamente simili a quelle nel set di addestramento. Il primo termine nell'ELBO è la probabilità logaritmica negativa prevista dei set point di addestramento, quindi incoraggia il decodificatore a produrre immagini simili a quelle di addestramento. Il secondo termine può essere interpretato come un regolarizzatore: incoraggia l'encoder a generare una distribuzione per le variabili latenti che è simile aθφp ( z ) = N( 0 , I). Ma introducendo prima il modello di probabilità, abbiamo capito da dove proviene l'intera espressione: la minimizzazione della divergenza di Kullabck-Leibler tra il posteriore approssimativo e il modello posteriore . 2qθ( z | x , λ )p ( z | x , λ )
Dopo aver appreso e massimizzando , possiamo buttare via l'encoder. Da ora in poi, per generare nuove immagini basta campionare e propagarlo attraverso il decodificatore. Le uscite del decodificatore saranno immagini simili a quelle del set di addestramento.θφEL B O ( θ , ϕ )z ∼ N( 0 , I)
Riferimenti e ulteriori letture
1 Questo presupposto non è strettamente necessario, sebbene semplifichi la nostra descrizione dei VAE. Tuttavia, a seconda delle applicazioni, è possibile assumere una distribuzione diversa per . Ad esempio, se è un vettore di variabili binarie, una gaussiana non ha senso e si può ipotizzare un Bernoulli multivariato.pφ( x | z )Xp
2 L'espressione ELBO, con la sua eleganza matematica, nasconde due principali fonti di dolore per i professionisti del VAE. Uno è il termine medio . Ciò richiede effettivamente calcolare un'aspettativa, che richiede il prelievo di più campioni daEqθ( z | xio, λ )[ logpφ( xio| z ) ]qθ( z | xio, λ ). Date le dimensioni delle reti neurali coinvolte e il basso tasso di convergenza dell'algoritmo SGD, dover disegnare più campioni casuali ad ogni iterazione (in realtà, per ogni minibatch, che è anche peggio) richiede molto tempo. Gli utenti VAE risolvono questo problema in modo molto pragmatico calcolando tale aspettativa con un singolo (!) Campione casuale. L'altro problema è che per addestrare due reti neurali (encoder e decoder) con l'algoritmo di backpropagation, devo essere in grado di differenziare tutti i passaggi coinvolti nella propagazione diretta dall'encoder al decoder. Poiché il decodificatore non è deterministico (la valutazione del suo output richiede il disegno da un gaussiano multivariato), non ha nemmeno senso chiedersi se si tratta di un'architettura differenziabile. La soluzione a questo è il trucco di riparametrizzazione .