Kullback-Leibler

推導 VAE 的 KL 散度損失

  • December 14, 2017

在 VAE 中,編碼器學習輸出兩個向量:

μ Rz

σ Rz

這是潛在向量的均值和方差 z , 潛在向量 z 然後通過以下方式計​​算:

z=μ+σϵ

在哪裡: ϵ=N(0,Iz×z)

單個樣本的 VAE 的 KL 散度損失定義為(引用自這個實現這個解釋):

12[(zi=1μ2i+zi=1σ2i)zi=1(log(σ2i)+1)]

不過,我不確定他們是如何得到結果的,有人願意解釋或指出正確的資源嗎?

編碼器分佈是 q(z|x)=N(z|μ(x),Σ(x)) 在哪裡 Σ=diag(σ21,,σ2n) .

潛在先驗由下式給出 p(z)=N(0,I) .

兩者都是維度的多元高斯 n , 一般而言,KL 散度為: DKL[p1∣∣p2]=12[log|Σ2||Σ1|n+trΣ12Σ1+(μ2μ1)TΣ12(μ2μ1)]

在哪裡 p1=N(μ1,Σ1)p2=N(μ2,Σ2) .

在 VAE 案例中, p1=q(z|x)p2=p(z) , 所以 μ1=μ , Σ1=Σ , μ2=0 , Σ2=I . 因此: DKL[q(z|x)∣∣p(z)]=12[log|Σ2||Σ1|n+trΣ12Σ1+(μ2μ1)TΣ12(μ2μ1)] =12[log|I||Σ|n+trI1Σ+(0μ)TI1(0μ)] =12[log|Σ|n+trΣ+μTμ] =12[logiσ2in+iσ2i+iμ2i] =12[ilogσ2in+iσ2i+iμ2i] =12[i(logσ2i+1)+iσ2i+iμ2i] 

引用自:https://stats.stackexchange.com/questions/318748