Kullback-Leibler
推導 VAE 的 KL 散度損失
在 VAE 中,編碼器學習輸出兩個向量:
μ∈ Rz
σ∈ Rz這是潛在向量的均值和方差 z , 潛在向量 z 然後通過以下方式計算:
z=μ+σϵ
在哪裡: ϵ=N(0,Iz×z)
單個樣本的 VAE 的 KL 散度損失定義為(引用自這個實現和這個解釋):
12[(z∑i=1μ2i+z∑i=1σ2i)−z∑i=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+trI−1Σ+(→0−μ)TI−1(→0−μ)] =12[−log|Σ|−n+trΣ+μTμ] =12[−log∏iσ2i−n+∑iσ2i+∑iμ2i] =12[−∑ilogσ2i−n+∑iσ2i+∑iμ2i] =12[−∑i(logσ2i+1)+∑iσ2i+∑iμ2i]