w prawie wszystkich przykładach kodu, które widziałem w VAE, funkcje utraty są zdefiniowane w następujący sposób (jest to kod tensorflow, ale widziałem podobne dla theano, latarki itp. To także dla konwektu, ale to też nie jest zbyt istotne , wpływa tylko na osie, w których sumy są przejmowane):
# 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)
Jednak zakres liczbowy kl_loss i rec_loss są bardzo zależne, odpowiednio, od ukrytych ciemności przestrzeni i wielkości elementu wejściowego (np. Rozdzielczości pikseli). Czy rozsądnie byłoby zastąpić sumy_zmniejszania wartością_redukcji, aby uzyskać wartość KLD dla z-dim i wartość LSE lub BCE na piksel (lub cechę)? Co ważniejsze, w jaki sposób łączymy straty utajone z utratą odbudowy, sumując się razem do ostatecznej straty? Czy to tylko próba i błąd? czy jest jakaś teoria (lub przynajmniej ogólna zasada)? Nigdzie nie mogłem znaleźć żadnych informacji na ten temat (w tym oryginalnego papieru).
Problem polega na tym, że jeśli równowaga między wymiarami mojej cechy wejściowej (x) a wymiarami utajonej przestrzeni (z) nie jest „optymalna”, albo moje rekonstrukcje są bardzo dobre, ale wyuczona utajona przestrzeń jest nieustrukturyzowana (jeśli wymiary x jest bardzo wysoki, a błąd rekonstrukcji dominuje nad KLD) lub odwrotnie (rekonstrukcje nie są dobre, ale wyuczona utajona przestrzeń ma dobrą strukturę, jeśli dominuje KLD).
Czuję, że muszę znormalizować utratę rekonstrukcji (dzielenie przez wielkość elementu wejściowego) i KLD (dzielenie przez wymiary Z), a następnie ręczne ważenie terminu KLD za pomocą dowolnego współczynnika wagi (normalizacja polega na tym, że mogę użyć tego samego lub podobna waga niezależna od wymiarów x lub z ). Empirycznie znalazłem około 0,1, aby zapewnić dobrą równowagę między rekonstrukcją a ustrukturyzowaną utajoną przestrzenią, która wydaje mi się być „ulubionym miejscem”. Szukam wcześniejszej pracy w tej dziedzinie.
Na życzenie notacja matematyczna powyżej (koncentrując się na utracie L2 z powodu błędu rekonstrukcji)
gdzie jest wymiarowością utajonego wektora (i odpowiadającą średnią i wariancją ), jest wymiarowością cech wejściowych, jest rozmiarem mini-partii, indeks górny oznacza te dane point i to strata dla tej mini-partii. K M