come ponderare la perdita di KLD rispetto alla perdita di ricostruzione nell'encoder automatico variazionale


26

in quasi tutti gli esempi di codice che ho visto di un VAE, le funzioni di perdita sono definite come segue (questo è il codice tensorflow, ma ho visto simili per theano, torcia ecc. È anche per una convnet, ma anche questo non è troppo rilevante , influisce solo sugli assi in cui vengono prese le somme):

# latent space loss. KL divergence between latent space distribution and unit gaussian, for each batch.
# first half of eq 10. in https://arxiv.org/abs/1312.6114
kl_loss = -0.5 * tf.reduce_sum(1 + log_sigma_sq - tf.square(mu) - tf.exp(log_sigma_sq), axis=1)

# reconstruction error, using pixel-wise L2 loss, for each batch
rec_loss = tf.reduce_sum(tf.squared_difference(y, x), axis=[1,2,3])

# or binary cross entropy (assuming 0...1 values)
y = tf.clip_by_value(y, 1e-8, 1-1e-8) # prevent nan on log(0)
rec_loss = -tf.reduce_sum(x * tf.log(y) + (1-x) * tf.log(1-y), axis=[1,2,3])

# sum the two and average over batches
loss = tf.reduce_mean(kl_loss + rec_loss)

Tuttavia, l'intervallo numerico di kl_loss e rec_loss dipende in larga misura rispettivamente dalle dimensioni dello spazio latente e dalle dimensioni della funzione di input (ad es. Risoluzione pixel). Sarebbe sensato sostituire le riduzioni con riduci per ottenere KLD per z-dim e per pixel (o funzione) LSE o BCE? Ancora più importante, come si valuta la perdita latente con la perdita di ricostruzione quando si sommano insieme per la perdita finale? È solo prova ed errore? o c'è qualche teoria (o almeno una regola empirica) per questo? Non sono riuscito a trovare informazioni al riguardo da nessuna parte (incluso il documento originale).


Il problema che sto riscontrando è che se l'equilibrio tra le dimensioni della funzione di input (x) e le dimensioni dello spazio latente (z) non è "ottimale", le mie ricostruzioni sono molto buone, ma lo spazio latente appreso non è strutturato (se le dimensioni x è molto elevato e l'errore di ricostruzione domina su KLD), o viceversa (le ricostruzioni non sono buone ma lo spazio latente appreso è ben strutturato se KLD domina).

Mi sto trovando a dover normalizzare la perdita di ricostruzione (dividendo per dimensione della funzione di input) e KLD (dividendo per dimensioni z) e quindi ponderando manualmente il termine KLD con un fattore di peso arbitrario (la normalizzazione è in modo che io possa usare lo stesso o peso simile indipendentemente dalle dimensioni di xo z ). Empiricamente ho trovato circa 0,1 per fornire un buon equilibrio tra ricostruzione e spazio latente strutturato che mi sembra un "punto debole". Sto cercando un lavoro precedente in questo settore.


Su richiesta, notazione matematica sopra (concentrandosi sulla perdita di L2 per errore di ricostruzione)

Llun'tent(io)=-12Σj=1J(1+log(σj(io))2-(μj(io))2-(σj(io))2)

Lrecon(io)=-ΣK=1K(yK(io)-XK(io))2

L(m)=1MΣio=1M(Llun'tent(io)+Lrecon(io))

dove è la dimensionalità del vettore latente (e la corrispondente media e varianza ), è la dimensionalità delle caratteristiche di input, è la dimensione del mini-batch, l'apice indica l' esimo dato punto e è la perdita per il ° mini-batch.Jzμσ2KM(io)ioL(m)m

Risposte:


17

Per chiunque inciampi in questo post anche alla ricerca di una risposta, questo thread di Twitter ha aggiunto molte informazioni molto utili.

Vale a dire:

beta-VAE: apprendimento dei concetti visivi di base con un framework variazionale vincolato

discute la mia domanda esatta con alcuni esperimenti. È interessante notare che la loro (che è simile al mio peso KLD normalizzato) è anch'essa centrata attorno allo 0,1, con valori più alti che danno spazio latente più strutturato al costo di una ricostruzione più scadente e valori più bassi che danno una ricostruzione migliore con meno strutturati spazio latente (sebbene il loro focus sia specificamente sull'apprendimento di rappresentazioni districate ).βnorm

e letture correlate (dove vengono discusse questioni simili)


7

Vorrei aggiungere un altro documento relativo a questo problema (non posso commentare a causa della mia scarsa reputazione al momento).

Nella sottosezione 3.1 del documento, gli autori hanno specificato che non sono riusciti a formare un'implementazione diretta di VAE che ha equamente ponderato la probabilità e la divergenza di KL. Nel loro caso, la perdita di KL è stata indesiderabilmente ridotta a zero, sebbene ci si aspettasse che avesse un valore ridotto. Per ovviare a questo, hanno proposto di utilizzare la "ricottura dei costi KL", che ha aumentato lentamente il fattore di peso del termine di divergenza KL (curva blu) da 0 a 1.

Figura 2. Il peso del termine di divergenza KL del limite inferiore variazionale secondo un tipico piano di ricottura sigmoideo tracciato accanto al valore (non ponderato) del termine di divergenza KL per il nostro VAE sul Penn TreeBank.

Questa soluzione alternativa viene applicata anche in Ladder VAE.

Carta:

Bowman, SR, Vilnis, L., Vinyals, O., Dai, AM, Jozefowicz, R. e Bengio, S., 2015. Generazione di frasi da uno spazio continuo . arXiv prestampa arXiv: 1511.06349.

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.