Învățarea automată - cum să ponderezi pierderea KLD față de pierderea reconstrucției în codificatorul automat variațional
în aproape toate exemplele de coduri pe care le-am văzut despre un VAE, funcțiile de pierdere sunt definite după cum urmează (acesta este codul tensorflow, dar am văzut similar pentru theano, torță etc. Este, de asemenea, pentru un convnet, dar acest lucru nu este prea relevant, afectează doar axele care sunt preluate sumele):
Cu toate acestea, intervalul numeric kl_loss și rec_loss sunt foarte dependenți de intensitățile latente ale spațiului și de dimensiunea caracteristicii de intrare (de exemplu, rezoluția pixelilor). Ar fi rezonabil să înlocuiți sumele reduce_sum cu reduce_mean pentru a obține KLD z-dim și per pixel (sau caracteristică) LSE sau BCE? Mai important, cum ponderăm pierderea latentă cu pierderea din reconstrucție atunci când însumăm pentru pierderea finală? Este doar o încercare și o eroare? sau există vreo teorie (sau cel puțin o regulă generală) pentru aceasta? Nu am putut găsi nicio informație despre asta nicăieri (inclusiv hârtia originală).
Problema pe care o am este că, dacă echilibrul dintre dimensiunile caracteristicii mele de intrare (x) și dimensiunile spațiului latent (z) nu este „optim”, fie reconstituirile mele sunt foarte bune, dar spațiul latent învățat este nestructurat (dacă dimensiunile x este foarte mare și eroarea de reconstrucție domină peste KLD), sau invers (reconstrucțiile nu sunt bune, dar spațiul latent învățat este bine structurat dacă KLD domină).
Trebuie să normalizez pierderea de reconstrucție (împărțirea la dimensiunea caracteristicii de intrare) și KLD (împărțirea la dimensiunile z) și apoi ponderarea manuală a termenului KLD cu un factor de greutate arbitrar (normalizarea este astfel încât să pot folosi același sau greutate similară independentă de dimensiunile lui x sau z). Empiric, am găsit în jur de 0,1 pentru a oferi un echilibru bun între reconstrucție și spațiul latent structurat, care se simte ca un „punct dulce” pentru mine. Caut lucrări prealabile în acest domeniu.
La cerere, notația matematică de mai sus (concentrându-se pe pierderea L2 pentru eroare de reconstrucție)
unde $ J $ este dimensionalitatea vectorului latent $ z $ (și media corespunzătoare $ \ mu $ și varianța $ \ sigma ^ 2 $), $ K $ este dimensionalitatea caracteristicilor de intrare, $ M $ este mini-lotul dimensiunea, indicativul $ (i) $ denotă $ i $ th punctul de date și $ \ mathcal ^ $ este pierderea pentru $ m $ th mini-lot.
4 Răspunsuri 4
Pentru oricine se poticnește în această postare și caută un răspuns, acest fir de twitter a adăugat o mulțime de informații foarte utile.
discută întrebarea mea exactă cu câteva experimente. Interesant, se pare că $ \ beta_ $ (care este similar cu greutatea mea normală KLD) este, de asemenea, centrat în jurul valorii de 0,1, cu valori mai mari care oferă spațiu latent mai structurat cu prețul unei reconstrucții mai slabe și valori mai mici, oferind o reconstrucție mai bună cu spațiu latent mai puțin structurat (deși se concentrează în mod special pe învățarea reprezentărilor despărțite).
și lectură conexă (unde sunt discutate probleme similare)
Aș dori să mai adaug o lucrare legată de această problemă (nu pot să comentez din cauza reputației mele scăzute în acest moment).
În subsecțiunea 3.1 a lucrării, autorii au specificat că nu au reușit să instruiască o implementare directă a VAE care a egalizat în mod egal probabilitatea și divergența KL. În cazul lor, pierderea KL a fost redusă nedorit la zero, deși se aștepta să aibă o valoare mică. Pentru a depăși acest lucru, au propus să utilizeze „recocirea costurilor KL”, care a crescut încet factorul de greutate al termenului de divergență KL (curba albastră) de la 0 la 1.

Această soluție de rezolvare este aplicată și în Ladder VAE.
Bowman, S.R., Vilnis, L., Vinyals, O., Dai, A.M., Jozefowicz, R. și Bengio, S., 2015. Generarea de propoziții dintr-un spațiu continuu. arXiv preprint arXiv: 1511.06349.
Actualizare în dec. 6 2020: am făcut o postare pe blog pentru a explica acest lucru în detalii.