Preciso determinar a divergência KL entre dois gaussianos. Estou comparando meus resultados com esses , mas não consigo reproduzir o resultado deles. Meu resultado está obviamente errado, porque o KL não é 0 para KL (p, p).
Gostaria de saber onde estou cometendo um erro e perguntar se alguém pode identificá-lo.
Seja e . Do PRML de Bishop, eu sei quep(x)=N(μ1,σ1)q(x)=N(μ2,σ2)
KL(p,q)=−∫p(x)logq(x)dx+∫p(x)logp(x)dx
onde a integração é feita em toda a linha real e que
∫p(x)logp(x)dx=−12(1+log2πσ21),
então eu me restrico a , que eu posso escrever como∫p(x)logq(x)dx
−∫p(x)log1(2πσ22)(1/2)e−(x−μ2)22σ22dx,
que pode ser separado em
12log(2πσ22)−∫p(x)loge−(x−μ2)22σ22dx.
Tomando o log que recebo
12log(2πσ22)−∫p(x)(−(x−μ2)22σ22)dx,
onde separo as somas e da integral.σ22
12log(2πσ22)+∫p(x)x2dx−∫p(x)2xμ2dx+∫p(x)μ22dx2σ22
Deixando denotar o operador de expectativa em , posso reescrever isso como⟨⟩p
12log(2πσ22)+⟨x2⟩−2⟨x⟩μ2+μ222σ22.
Sabemos que . portantovar(x)=⟨x2⟩−⟨x⟩2
⟨x2⟩=σ21+μ21
e portanto
12log(2πσ2)+σ21+μ21−2μ1μ2+μ222σ22,
que eu posso colocar como
12log(2πσ22)+σ21+(μ1−μ2)22σ22.
Juntando tudo, eu chego a
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.
que está errado, pois é igual a para dois gaussianos idênticos.1
Alguém pode detectar meu erro?
Atualizar
Obrigado a mpiktas por esclarecer as coisas. A resposta correta é:
KL(p,q)=logσ2σ1+σ21+(μ1−μ2)22σ22−12
Respostas:
OK, meu mal. O erro está na última equação:
Observe a falta . A última linha se torna zero quando e .−12 μ1=μ2 σ1=σ2
fonte
Não dei uma olhada no seu cálculo, mas aqui está o meu com muitos detalhes. Suponha que seja a densidade de uma variável aleatória normal com média e variância , e que seja a densidade de uma variável aleatória normal com média e variância . A distância Kullback-Leibler de até é:p μ1 σ21 q μ2 σ22 q p
(Agora observe que )(X−μ2)2=(X−μ1+μ1−μ2)2=(X−μ1)2+2(X−μ1)(μ1−μ2)+(μ1−μ2)2
fonte