Ich habe eine VAE implementiert und zwei verschiedene Online-Implementierungen der vereinfachten univariaten Gaußschen KL-Divergenz festgestellt. Die ursprüngliche Abweichung gemäß hier ist
Wenn wir annehmen, dass unser Prior eine Einheit Gauß'sche ist, dh und , vereinfacht sich dies bis hinunter zu
Und hier liegt meine Verwirrung. Obwohl ich mit der obigen Implementierung einige obskure Github-Repos gefunden habe, wird sie häufiger verwendet:
KLloss=log(σ2σ1)+σ21+(μ1−μ2)22σ22−12
μ2=0σ2=1KLloss=−log(σ1)+σ21+μ212−12
KLloss=−12(2log(σ1)−σ21−μ21+1)
=−12(log(σ1)−σ1−μ21+1)
Zum Beispiel im offiziellen
Keras-Autoencoder-Tutorial . Meine Frage ist dann, was fehlt mir zwischen diesen beiden? Der Hauptunterschied besteht darin, den Faktor 2 auf den logarithmischen Term zu setzen und die Varianz nicht zu quadrieren. Analytisch habe ich letzteres mit Erfolg eingesetzt, für was es wert ist. Vielen Dank im Voraus für jede Hilfe!
Ich glaube, die Antwort ist einfacher. In VAE verwenden Menschen normalerweise eine multivariate Normalverteilung, die eine Kovarianzmatrix anstelle von Varianz . Das sieht in einem Code verwirrend aus, hat aber die gewünschte Form.Σ σ2
Hier finden Sie die Ableitung einer KL-Divergenz für multivariate Normalverteilungen: Ableitung des KL-Divergenzverlusts für VAEs
quelle