推导一下两个多元高斯分布之间的KL散度公式
完整推导过程
哎,其实我是傻乎乎地想推导两个多元高斯分布之间的$\beta$和$\gamma$散度,后来发现不可行。在这个过程中顺手推导了一般的KL散度,谨记过程如下。
假定两个多元高斯分布分别为$\mathcal{N}(\mu_1, \Sigma_1)$和$\mathcal{N}(\mu_2, \Sigma_2)$,其概率分布分别表示为$p(x)$和$q(x)$。其中$\mu_1$和$\mu_2$为长度$n$的向量,$\Sigma_1$和$\Sigma_2$为维度$n\times n$的协方差阵。那么$p(x)$和$q(x)$之间的差异可以用KL散度表示,定义为:
$(1)$式的完整计算过程如下:
Emmm,式子太长,编辑器渲染都卡爆了,所以接着上面再推导:
部分推导细节
在上述推导中有几步需要额外注意,我自己已经在纸上推导好了,这里简要提示一下(具体参见参考文献):
- $(4)$式到$(5)$式:利用标量$\Leftrightarrow$标量的迹和迹的交换性;
- $(5)$式到$(6)$式:举个例子展开写就明白了;
- $(8)$式到$(9)$式:其实是$(7)$式到$(9)$式,注意对谁求期望和协方差的定义;
- $(14)$式到$(15)$式:标量$\Leftrightarrow$标量的迹。
PyTorch
官方函数的写法
最后$(15)$式中的结果与PyTorch
中多元高斯分布KL散度的表达是一致的,half_term1
就是$\dfrac{1}{2}\log \dfrac{|\Sigma_2|}{|\Sigma_1|}$,term2
就是$tr\left(\Sigma_2^{-1}\Sigma_1\right)$,term3
就是$\left(\mu_2-\mu_1\right)^T\Sigma_2^{-1}\left(\mu_2-\mu_1\right)$:
$\beta$散度的想法
其实本来是想计算$\beta$和$\gamma$散度的类似表达的…只是我真的算不出来…估计只能近似了。列个$\beta$散度的定义,有待研究。
参考链接列表
- https://github.com/pytorch/pytorch/blob/master/torch/distributions/kl.py
- https://blog.csdn.net/sinat_33598258/article/details/103866549
- https://arxiv.org/pdf/1905.09961.pdf
- https://zhuanlan.zhihu.com/p/143124676
- https://stats.stackexchange.com/questions/7440/kl-divergence-between-two-univariate-gaussians