Wdrażam VAE i zauważyłem w Internecie dwie różne implementacje uproszczonej rozbieżności Gaussa KL dla jednej zmiennej. Oryginalna rozbieżność, jak tutaj, jest
Jeśli założymy, że nasz przeor jest jednostką gaussowską tj i , upraszcza to do
I tutaj leży moje zamieszanie. Chociaż znalazłem kilka niejasnych repozytoriów github z powyższą implementacją, najczęściej używam:
Na przykład w oficjalnym samouczku autokodera Keras . Moje pytanie brzmi zatem: czego mi brakuje między tymi dwoma? Główną różnicą jest upuszczenie współczynnika 2 na logarytmie i nie kwadrat wariancji. Analitycznie wykorzystałem to drugie z sukcesem, na ile to warte. Z góry dziękuję za wszelką pomoc!
inference
kullback-leibler
autoencoders
variational-bayes
groovyDragon
źródło
źródło
Uważam, że odpowiedź jest prostsza. W VAE ludzie zwykle używają wielowymiarowego rozkładu normalnego, który ma macierz kowariancjiΣ zamiast wariancji σ2) . To wygląda na zagmatwane w kodzie, ale ma pożądaną formę.
Tutaj można znaleźć wyprowadzenie dywergencji KL dla wielowymiarowych rozkładów normalnych: Wyprowadzanie straty dywergencji KL dla VAE
źródło