J'ai implémenté une VAE et j'ai remarqué deux implémentations différentes en ligne de la divergence gaussienne KL univariée simplifiée. La divergence d' origine que par ici est
Si nous supposons que notre a priori est une unité gaussienne, c'est-à-dire et , cela se simplifie jusqu'à
Et voici où repose ma confusion. Bien que j'ai trouvé quelques dépôts github obscurs avec l'implémentation ci-dessus, ce que je trouve le plus couramment utilisé est: μ2=0σ2=1KLloss=-log(σ1)+σ 2 1 +μ 2 1
KLl o s s= journal( σ2σ1) + σ21+ ( μ1- μ2)22 σ22- 12
μ2= 0σ2= 1 KLloss=-1KLl o s s= - journal( σ1) + σ21+ μ212- 12
KLl o s s= - 12( 2 journaux( σ1) - σ21- μ21+ 1 )
= - 12( journal( σ1) - σ1- μ21+ 1 )
Par exemple dans le
tutoriel officiel de l'
auto-encodeur Keras . Ma question est alors, qu'est-ce que je manque entre ces deux? La principale différence est de laisser tomber le facteur 2 sur le terme logarithmique et de ne pas mettre la variance au carré. Analytiquement, j'ai utilisé cette dernière avec succès, pour ce qu'elle vaut. Merci d'avance pour votre aide!
Je pense que la réponse est plus simple. Dans la VAE, les gens utilisent généralement une distribution normale multivariée, qui a une matrice de covariance au lieu de variance . Cela semble déroutant dans un morceau de code mais a la forme souhaitée.Σ σ2
Ici vous pouvez trouver la dérivation d'une divergence KL pour les distributions normales multivariées: Dériver la perte de divergence KL pour les VAE
la source