Derivation of KL Divergence

KL Divergence 在稀疏编码、变分自动编码器(Variational Autoencoder, VAE)中作为损失函数以保证结果的稀疏性。

以下推导来自 https://timvieira.github.io/blog/post/2014/10/06/kl-divergence-as-an-objective-function/。我们只关心 \(p\) 作为变量的情况。首先我们将 KL 散度改写为信息熵的形式:

\[ \begin{align*} \textbf{KL}(p || q_\theta) &= \sum_d p(d) \log \left( \frac{p(d)}{q(d)} \right) \\ &= \sum_d p(d) \left( \log p(d) - \log q(d) \right) \\ &= \underbrace{\sum_d q(d) \log q(d)}_{-\text{entropy}} - \underbrace{\sum_d q(d) \log p(d)}_{\text{cross-entropy}} \\ \end{align*} \]

可以发现减号前一部分不包含 \(p\),所以我们只需要多后一部分(交叉熵)求导。我们将其也改写一下

\[ \begin{align*} \sum_d p(d) \log q(d) &= \frac{1}{Z_p} \sum_d \bar{p}(d) \log \left( \bar{q}(d)/Z_q \right) \\ &= \frac{1}{Z_p} \sum_d \bar{p}(d) \left( \log \bar{q}(d) - \log Z_q \right) \\ &= \left(\frac{1}{Z_p} \sum_d \bar{p}(d) \log \bar{q}(d)\right) - \left(\frac{1}{Z_p} \sum_d \bar{p}(d) \log Z_q\right) \\ &= \left(\frac{1}{Z_p} \sum_d \bar{p}(d) \log \bar{q}(d)\right) - \left( \log Z_q \right) \left( \frac{1}{Z_p} \sum_d \bar{p}(d)\right) \\ &= \left(\frac{1}{Z_p} \sum_d \bar{p}(d) \log \bar{q}(d)\right) - \log Z_q \end{align*} \]

\(q\) 是指数函数时,对其求梯度比较直观

\[ \begin{align*} \nabla \left[ \frac{1}{Z_p} \sum_d \bar{p}(d) \log \bar{q}(d) - \log Z_q \right] &= \frac{1}{Z_p} \sum_d \bar{p}(d) \nabla \left[ \log \bar{q}(d) \right] - \nabla \log Z_q \\ &= \frac{1}{Z_p} \sum_d \bar{p}(d) \phi_q(d) - \mathbb{E}_q \left[ \phi_q \right] \\ &= \mathbb{E}_p \left[ \phi_q \right] - \mathbb{E}_q \left[ \phi_q \right] \end{align*} \]

回到

\[ q = \frac{{\mathrm{e}}^{-{\left(i-j\right)}^2}}{{\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}} \]
\[ \frac{\partial q}{\partial i} = \frac{{\mathrm{e}}^{-{\left(i-j\right)}^2}\,\left({\mathrm{e}}^{-{\left(i-j\right)}^2}\,\left(2\,i-2\,j\right)+{\mathrm{e}}^{-{\left(i-k\right)}^2}\,\left(2\,i-2\,k\right)\right)}{{\left({\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}\right)}^2}-\frac{{\mathrm{e}}^{-{\left(i-j\right)}^2}\,\left(2\,i-2\,j\right)}{{\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}} \]
\[ \frac{\partial q}{\partial j} = \frac{{\mathrm{e}}^{-{\left(i-j\right)}^2}\,\left(2\,i-2\,j\right)}{{\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}}-\frac{{\mathrm{e}}^{-2\,{\left(i-j\right)}^2}\,\left(2\,i-2\,j\right)}{{\left({\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}\right)}^2} \]
\[ \frac{\partial q}{\partial k} = -\frac{{\mathrm{e}}^{-{\left(i-j\right)}^2}\,{\mathrm{e}}^{-{\left(i-k\right)}^2}\,\left(2\,i-2\,k\right)}{{\left({\mathrm{e}}^{-{\left(i-j\right)}^2}+{\mathrm{e}}^{-{\left(i-k\right)}^2}\right)}^2} \]