我需要确定两个高斯之间的KL散度。我正在将我的结果与这些结果进行比较,但是我无法复制它们的结果。我的结果显然是错误的,因为KL(p,p)的KL不为0。
我想知道我在哪里做错了,问是否有人可以发现它。
令和。从Bishop的PRML我知道p(x)=N(μ1,σ1)q(x)=N(μ2,σ2)
KL(p,q)=−∫p(x)logq(x)dx+∫p(x)logp(x)dx
在所有实线上完成集成的地方
∫p(x)logp(x)dx=−12(1+log2πσ21),
所以我将自己限制为,我可以写成∫p(x)logq(x)dx
−∫p(x)log1(2πσ22)(1/2)e−(x−μ2)22σ22dx,
可以分为
12log(2πσ22)−∫p(x)loge−(x−μ2)22σ22dx.
拿我得到的日志
12log(2πσ22)−∫p(x)(−(x−μ2)22σ22)dx,
在这里我将总和分开并从积分中得到。σ22
12log(2πσ22)+∫p(x)x2dx−∫p(x)2xμ2dx+∫p(x)μ22dx2σ22
让表示下的期望运算符,我可以将其重写为⟨⟩p
12log(2πσ22)+⟨x2⟩−2⟨x⟩μ2+μ222σ22.
我们知道。从而var(x)=⟨x2⟩−⟨x⟩2
⟨x2⟩=σ21+μ21
因此
12log(2πσ2)+σ21+μ21−2μ1μ2+μ222σ22,
我可以把
12log(2πσ22)+σ21+(μ1−μ2)22σ22.
放在一起,我去
KL(p,q)=−∫p(x)logq(x)dx+∫p(x)logp(x)dx=12log(2πσ22)+σ21+(μ1−μ2)22σ22−12(1+log2πσ21)=logσ2σ1+σ21+(μ1−μ2)22σ22.
这是错误的,因为对于两个相同的高斯,它等于。1
谁能发现我的错误?
更新资料
感谢mpiktas清理了一切。正确答案是:
KL(p,q)=logσ2σ1+σ21+(μ1−μ2)22σ22−12