Come funziona il trucco di reparameterizzazione per VAE e perché è importante?


57

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'?


5
Una parte della risposta è notare che tutte le distribuzioni di Normal sono solo versioni ridimensionate e tradotte di Normal (1, 0). Per disegnare da Normal (mu, sigma) è possibile disegnare da Normal (1, 0), moltiplicare per sigma (scala) e aggiungere mu (traduzione).
monaco

@monk: avrebbe dovuto essere Normale (0,1) invece di (1,0) a destra, altrimenti la moltiplicazione e lo spostamento sarebbero andati completamente a filo di fieno!
Rika,

@Breeze Ha! Sì, certo, grazie.
monaco

Risposte:


57

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 )zq(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ϵz

forma originale e rimasterizzata


3
Perché deterministic ora è sulla destra? z
portando il

2
Non lo è, ma non è una "fonte di casualità" - questo ruolo è stato assunto da . ϵ
quant_dev,

Si noti che questo metodo è stato proposto più volte prima del 2014: blog.shakirm.com/2015/10/…
quant_dev

2
Così semplice, così intuitivo! Bella risposta!
Serhiy

2
Sfortunatamente no. La forma originale può comunque essere retropropagabile, tuttavia con una varianza più elevata. I dettagli possono essere trovati dal mio post .
JP Zhang,

56

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 θqθqθ(x)=N(θ,1)θ E q [ x 2 ]

minθEq[x2]
θEq[x2]

Un modo per calcolare è il seguente θEq[x2]

θEq[x2]=θqθ(x)x2dx=x2θqθ(x)qθ(x)qθ(x)dx=qθ(x)θlogqθ(x)x2dx=Eq[x2θlogqθ(x)]

Per il nostro esempio in cui , questo metodo fornisce qθ(x)=N(θ,1)

θEq[x2]=Eq[x2(xθ)]

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 θqθx

x=θ+ϵ,ϵN(0,1)
Eq[x2]=Ep[(θ+ϵ)2]
pϵN(0,1)Eq[x2]
θEq[x2]=θEp[(θ+ϵ)2]=Ep[2(θ+ϵ)]

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


4
Qual è il theta "ovvio" per la prima equazione?
gwg

2
è 0. un modo per vedere è notare che E [x ^ 2] = E [x] ^ 2 + Var (x), che è theta ^ 2 + 1 in questo caso. Quindi theta = 0 minimizza questo obiettivo.
Goker

Quindi, dipende completamente dal problema? Per esempio min_ \ theta E_q [| x | ^ (1/4)] potrebbe essere completamente diverso?
Anne van Rossum,

Cosa dipende dal problema? Il theta ottimale? In tal caso, sì, dipende sicuramente dal problema.
Goker,

Nell'equazione subito dopo "dà questo metodo", non dovrebbe essere invece che solo ? θ E q [ x 2 ] = E q [ x 2 ( x - θ ) ]θEq[x2]=Eq[x2(xθ)qθ(x)]θEq[x2]=Eq[x2(xθ)]
AlphaOmega,

17

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, Gθ

Gθ=θExqθ[]

Senza il "trucco di reparameterizzazione" , spesso possiamo riscriverlo, secondo la risposta del goker, come , dove, Exqθ[Gθest(x)]

Gθest(x)=1qθ(x)θqθ(x)=θlog(qθ(x))

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.xqθGθestGθθ

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 .GθestGθ

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 daGθxxqθ(x)1qθ(x)xGθqθGθestxqθθ, 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 ,xϵpθGθp

Gθ=θEϵp[J(θ,ϵ)]=Eϵp[θJ(θ,ϵ)]
per un po 'di .J(θ,ϵ)

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.θJ(θ,ϵ)pϵpθp

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 nostroθJ(θ,ϵ)G θ G θ ϵ p p ϵ JGθGθϵppϵ 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).J

Spero che aiuti.


"Il fattore 1 / qθ (x) sta aumentando la tua stima per tener conto di questo, ma se non vedi mai un tale valore di x, tale ridimensionamento non sarà di aiuto." Puoi spiegare di più?
czxttkl,

@czxttkl In pratica stimiamo i valori previsti con un numero finito di campioni. Se è molto piccolo per alcuni , allora è molto improbabile che campioniamo un tale . Quindi anche se include un grande fattore di e può dare un contributo significativo al valore atteso reale, può essere escluso dalla nostra stima del valore atteso per qualsiasi numero ragionevole di campioni. qθxxGθest(x)1/qθ
Seth Bruder,

10

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 .

inserisci qui la descrizione dell'immagine

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.

inserisci qui la descrizione dell'immagine


Il miglior video per capire questo concetto. Consiglierei di guardare un video completo per una migliore comprensione, ma se vuoi capire solo il trucco di riparametrizzazione, guarda da 8 minuti. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Sherlock

9

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:

ϕEzq(z|x)[f(x,z)]

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.qϕ(z|x)

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 .ϵp(ϵ)gϕ(ϵ,x)qϕ

Ad esempio, usiamo una q molto semplice da cui proviamo.

zqμ,σ=N(μ,σ)
Ora, invece di campionare da , possiamo riscriverlo come dove .q
z=gμ,σ(ϵ)=μ+ϵσ
ϵN(0,1)

Ora, invece di dover ottenere il gradiente di un'aspettativa di q (z), possiamo riscriverlo come gradiente di aspettativa rispetto alla funzione più semplice .p(ϵ)

ϕEzq(z|x)[f(x,z)]=Eϵp(ϵ)[ϕf(x,g(ϵ,x))]

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


Ciao, sai, perché nell'implementazione, dividono lo standard per 2? (cioè std = torch.exp (z_var / 2)) nella riparameterizzazione?
Rika,

4

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:

  • calcola VLB
  • ottenere gradiente di VLB

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.


2

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

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]

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.

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Eq(z(i)x(i);ϕ)[logp(x(i)z(i),w)ϕlogqϕ(z)]
p(x(i)z(i),w)logp(x(i)z(i),w)

Con Reparametrization abbiamo z(i)=g(ϵ(i),x(i),ϕ)

ϕEq(z(i)x(i);ϕ)[logp(x(i)z(i),w)]=Ep(ϵ(i))[ϕlogp(x(i)g(ϵ(i),x(i),ϕ),w)]

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.p(ϵ(i))p(ϵ(i))ϕ

Nota: possiamo fare questo trucco di riparametrizzazione solo se è continuo, quindi possiamo prendere il gradiente di .z(i)z(i)=g(ϵ(i),x(i),ϕ)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.