Come funziona il trucco di reparameterizzazione per autoencoders variazionali (VAE)? Esiste una spiegazione intuitiva e semplice senza semplificare la matematica sottostante? E perché abbiamo bisogno del 'trucco'?
Come funziona il trucco di reparameterizzazione per autoencoders variazionali (VAE)? Esiste una spiegazione intuitiva e semplice senza semplificare la matematica sottostante? E perché abbiamo bisogno del 'trucco'?
Risposte:
Dopo aver letto le diapositive del workshop NIPS 2015 di Kingma , mi sono reso conto che abbiamo bisogno del trucco di riparametrizzazione per backpropagare attraverso un nodo casuale.
Intuitivamente, nella sua forma originale, i VAE provengono da un nodo casuale che è approssimato dal modello parametrico del posteriore reale. Backprop non può fluire attraverso un nodo casuale.q ( z ∣ ϕ , x )
L'introduzione di un nuovo parametro ci consente di ri- parametrizzare in un modo che consenta al backprop di fluire attraverso i nodi deterministici.z
Supponiamo di avere una distribuzione normale parametrizzata da , in particolare . Vogliamo risolvere il seguente problema Questo è ovviamente un problema piuttosto sciocco e l'ottimale è ovvio. Tuttavia, qui vogliamo solo capire come il trucco di riparameterizzazione aiuta a calcolare il gradiente di questo obiettivo .θ q θ ( x ) = N ( θ , 1 ) min θθ E q [ x 2 ]
Un modo per calcolare è il seguente
Per il nostro esempio in cui , questo metodo fornisce
Il trucco di riparameterizzazione è un modo per riscrivere le aspettative in modo che la distribuzione rispetto alla quale prendiamo il gradiente sia indipendente dal parametro . Per raggiungere questo obiettivo, dobbiamo rendere l'elemento stocastico in indipendente da . Quindi, scriviamo come Quindi, possiamo scrivere dove è la distribuzione di , ovvero . Ora possiamo scrivere la derivata di come segue
Ecco un taccuino IPython che ho scritto che esamina la varianza di questi due modi di calcolare i gradienti. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb
Un esempio ragionevole della matematica del "trucco di riparametrizzazione" è dato nella risposta di Goker, ma alcune motivazioni potrebbero essere utili. (Non ho i permessi per commentare quella risposta; quindi ecco una risposta separata.)
In breve, vogliamo calcolare un valore del modulo,
Senza il "trucco di reparameterizzazione" , spesso possiamo riscriverlo, secondo la risposta del goker, come , dove,
Se disegniamo una da , allora è una stima imparziale di . Questo è un esempio di "campionamento di importanza" per l'integrazione di Monte Carlo. Se il rappresentato alcune uscite di una rete di calcolo (ad esempio, una rete politica di apprendimento per rinforzo), abbiamo potuto utilizzare questo in back-propagatation (applicare la regola della catena) per trovare derivate rispetto a parametri di rete.
Il punto chiave è che è spesso una stima molto negativa (varianza elevata) . Anche se si esegue la media su un gran numero di campioni, è possibile che la sua media sembri sistematicamente effettuare il downhoot (o il superamento) di .
Un problema fondamentale è che i contributi essenziali a possono provenire da valori di che sono molto rari (vale a dire valori per i quali è piccolo). Il fattore di sta aumentando la tua stima per tenerne conto, ma tale ridimensionamento non ti aiuterà se non vedi un tale valore di quando da un numero finito di campioni. La bontà o la cattiveria di (ovvero la qualità della stima, , per disegnata da ) può dipendere da, che potrebbe essere tutt'altro che ottimale (ad esempio, un valore iniziale scelto arbitrariamente). È un po 'come la storia della persona ubriaca che cerca le sue chiavi vicino al lampione (perché è lì che può vedere / campionare) piuttosto che vicino a dove le ha lasciate cadere.
Il "trucco di riparametrizzazione" a volte risolve questo problema. Usando la notazione di goker, il trucco è riscrivere in funzione di una variabile casuale, , con una distribuzione, , che non dipende da , e quindi riscrivere l'attesa in come aspettativa su ,
Il trucco di riparametrizzazione è particolarmente utile quando il nuovo stimatore, , non ha più i problemi sopra menzionati (cioè, quando siamo in grado di scegliere modo che non sia possibile ottenere una buona stima sul disegno di valori rari di ). Ciò può essere facilitato (ma non è garantito) dal fatto che non dipende da e che possiamo scegliere come una semplice distribuzione unimodale.
Tuttavia, il trucco di riparazionizzazione può anche "funzionare" quando non è un buon stimatore di . In particolare, anche se ci sono grandi contributi a da che sono molto rari, non li vediamo costantemente durante l'ottimizzazione e non li vediamo nemmeno quando usiamo il nostro modello (se il nostro modello è un modello generativo ). In termini leggermente più formali, possiamo pensare di sostituire il nostro obiettivo (aspettativa su ) con un obiettivo efficace che è un'aspettativa rispetto a qualche "insieme tipico" per . Al di fuori di quel set tipico, il nostroG θ G θ ϵ p p ϵ J potrebbe produrre valori arbitrariamente poveri di - vedi Figura 2 (b) di Brock et. al. per un GAN valutato al di fuori dell'insieme tipico campionato durante l'allenamento (in quel documento, valori di troncamento più piccoli corrispondenti a valori di variabili latenti più lontani dall'insieme tipico, anche se sono probabilità più elevate).
Spero che aiuti.
Lasciatemi spiegare prima, perché abbiamo bisogno del trucco di rigenerazione in VAE.
VAE ha encoder e decoder. Il decodificatore campiona casualmente dal vero Z ~ q posteriore (z∣ϕ, x) . Per implementare encoder e decoder come rete neurale, è necessario eseguire il backpropoging tramite campionamento casuale e questo è il problema perché la backpropogation non può fluire attraverso il nodo random; per superare questo ostacolo, usiamo il trucco di riparameterizzazione.
Ora veniamo a ingannare. Poiché il nostro posteriore è normalmente distribuito, possiamo approssimarlo con un'altra distribuzione normale. Approssimiamo Z con ε normalmente distribuito .
Ma quanto è rilevante?
Ora invece di dire che Z è campionato da q (z∣ϕ, x) , possiamo dire che Z è una funzione che accetta il parametro (ε, (µ, L)) e questi µ, L provengono dalla rete neurale superiore (encoder) . Pertanto, mentre per la backpropogazione tutto ciò di cui abbiamo bisogno sono derivati parziali tra µ, L e ε è irrilevante per l'assunzione di derivati.
Ho pensato che la spiegazione trovata nel corso di Stanford CS228 sui modelli grafici probabilistici fosse molto buona. Può essere trovato qui: https://ermongroup.github.io/cs228-notes/extras/vae/
Ho riassunto / copiato le parti importanti qui per comodità / mia comprensione (anche se consiglio vivamente di dare un'occhiata al link originale).
Quindi, il nostro problema è che abbiamo questo gradiente che vogliamo calcolare:
Se hai familiarità con gli stimatori della funzione di punteggio (credo che REINFORCE sia solo un caso speciale di questo), noterai che è praticamente il problema che risolvono. Tuttavia, lo stimatore della funzione di punteggio ha una varianza elevata, che porta a difficoltà nell'apprendimento dei modelli per la maggior parte del tempo.
Quindi, in determinate condizioni, possiamo esprimere la distribuzione come un processo in 2 fasi.
Per prima cosa campioniamo una variabile di rumore da una semplice distribuzione come lo standard normale. Successivamente, applichiamo una trasformazione deterministica che mappa il rumore casuale su questa distribuzione più complessa. Questa seconda parte non è sempre possibile, ma è vero per molte classi interessanti di .
Ad esempio, usiamo una q molto semplice da cui proviamo.
Ora, invece di dover ottenere il gradiente di un'aspettativa di q (z), possiamo riscriverlo come gradiente di aspettativa rispetto alla funzione più semplice .
Questo ha una varianza più bassa, per motivi imo, non banali. Controlla la parte D dell'appendice qui per una spiegazione: https://arxiv.org/pdf/1401.4082.pdf
Abbiamo il nostro modello probablistic. E vuoi recuperare i parametri del modello. Riduciamo il nostro compito di ottimizzare il limite inferiore variazionale (VLB). Per fare ciò dovremmo essere in grado di fare due cose:
Gli autori suggeriscono di utilizzare Monte Carlo Estimator per entrambi. E in realtà introducono questo trucco per ottenere uno stimatore del gradiente Monte Carlo più preciso di VLB.
È solo un miglioramento del metodo numerico.
Il trucco di riparametrizzazione riduce drasticamente la varianza dello stimatore MC per il gradiente. Quindi è una tecnica di riduzione della varianza :
Il nostro obiettivo è trovare una stima di
Potremmo usare lo " punteggi":
Ma il punteggio lo stimatore di funzioni ha una varianza elevata. Ad esempio, se la probabilità è molto piccola, allora il valore assoluto di
è molto grande e il valore stesso è negativo. Quindi avremmo una varianza elevata.
Con Reparametrization abbiamo
Ora l'aspettativa è wrt e è indipendente dal parametro gradiente . Quindi possiamo inserire il gradiente direttamente all'interno dell'aspettativa che può essere facilmente visto scrivendo esplicitamente l'attesa. I valori del gradiente sono molto più piccoli, quindi abbiamo una varianza intuitivamente più bassa.
Nota: possiamo fare questo trucco di riparametrizzazione solo se è continuo, quindi possiamo prendere il gradiente di .