Kullback-Leibler

推導 VAE 的 KL 散度損失

  • December 14, 2017

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

$$ \mathbf{\mu} \in\ \mathbb{R}^{z} $$ $$ \mathbf{\sigma} \in\ \mathbb{R}^{z} $$

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

$$ \mathbf{z} = \mu + \sigma \epsilon $$

在哪裡: $ \epsilon = N(0, \mathbf{I}_{z \times z}) $

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

$$ \frac{1}{2} \left[ \left(\sum_{i=1}^{z}\mu_{i}^{2} + \sum_{i=1}^{z}\sigma_{i}^{2} \right) - \sum_{i=1}^{z} \left(log(\sigma_{i}^{2}) + 1 \right) \right] $$

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

編碼器分佈是 $ q(z|x)=\mathcal{N}(z|\mu(x),\Sigma(x)) $ 在哪裡 $ \Sigma=\text{diag}(\sigma_1^2,\ldots,\sigma^2_n) $ .

潛在先驗由下式給出 $ p(z)=\mathcal{N}(0,I) $ .

兩者都是維度的多元高斯 $ n $ , 一般而言,KL 散度為: $$ \mathfrak{D}_\text{KL}[p_1\mid\mid p_2] = \frac{1}{2}\left[\log\frac{|\Sigma_2|}{|\Sigma_1|} - n + \text{tr} { \Sigma_2^{-1}\Sigma_1 } + (\mu_2 - \mu_1)^T \Sigma_2^{-1}(\mu_2 - \mu_1)\right] $$ 在哪裡 $ p_1 = \mathcal{N}(\mu_1,\Sigma_1) $ 和 $ p_2 = \mathcal{N}(\mu_2,\Sigma_2) $ .

在 VAE 案例中, $ p_1 = q(z|x) $ 和 $ p_2=p(z) $ , 所以 $ \mu_1=\mu $ , $ \Sigma_1 = \Sigma $ , $ \mu_2=\vec{0} $ , $ \Sigma_2=I $ . 因此: $$ \begin{align} \mathfrak{D}_\text{KL}[q(z|x)\mid\mid p(z)] &= \frac{1}{2}\left[\log\frac{|\Sigma_2|}{|\Sigma_1|} - n + \text{tr} { \Sigma_2^{-1}\Sigma_1 } + (\mu_2 - \mu_1)^T \Sigma_2^{-1}(\mu_2 - \mu_1)\right]\ &= \frac{1}{2}\left[\log\frac{|I|}{|\Sigma|} - n + \text{tr} { I^{-1}\Sigma } + (\vec{0} - \mu)^T I^{-1}(\vec{0} - \mu)\right]\ &= \frac{1}{2}\left[-\log{|\Sigma|} - n + \text{tr} { \Sigma } + \mu^T \mu\right]\ &= \frac{1}{2}\left[-\log\prod_i\sigma_i^2 - n + \sum_i\sigma_i^2 + \sum_i\mu^2_i\right]\ &= \frac{1}{2}\left[-\sum_i\log\sigma_i^2 - n + \sum_i\sigma_i^2 + \sum_i\mu^2_i\right]\ &= \frac{1}{2}\left[-\sum_i\left(\log\sigma_i^2 + 1\right) + \sum_i\sigma_i^2 + \sum_i\mu^2_i\right]\ \end{align} $$

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

comments powered by Disqus