Estou implementando um VAE e notei duas implementações diferentes on-line da divergência simplificada univariada de KL gaussiana. A divergência original conforme aqui é
Se assumirmos que nosso prior é uma unidade gaussiana, ou seja, e , isso simplifica para
E aqui é onde está minha confusão. Embora eu tenha encontrado alguns repositórios obscuros do github com a implementação acima, o que eu acho mais usado é: μ2=0σ2=1KLloss=-log(σ1)+σ 2 1 +μ 2 1
Keul o s s= log( σ2σ1 1) + σ21 1+ ( μ1 1- μ2)22 σ22- 12
μ2= 0σ2= 1Keul o s s= - log( σ1 1) + σ21 1+ μ21 12- 12
Keul o s s= - 12( 2 log( σ1 1) - σ21 1- μ21 1+ 1 )
= - 12( log( σ1 1) - σ1 1- μ21 1+ 1 )
Por exemplo, no
tutorial oficial do
autoencoder do Keras . Minha pergunta é então, o que estou perdendo entre esses dois? A principal diferença é descartar o fator 2 no termo do log e não esquadrar a variação. Analiticamente, usei o último com sucesso, pelo que vale a pena. Agradecemos antecipadamente por qualquer ajuda!
Eu acredito que a resposta é mais simples. No VAE, as pessoas geralmente usam uma distribuição normal multivariada, que possui matriz de covariância vez de variância . Isso parece confuso em um pedaço de código, mas tem a forma desejada.Σ σ2
Aqui você pode encontrar a derivação de uma divergência de KL para distribuições normais multivariadas: Derivando a perda de divergência de KL para VAEs
fonte