[nlp] KL散度与JS散度

Thalia ·
更新时间:2024-09-21
· 987 次阅读

1.KL散度

KL散度( Kullback–Leibler divergence) (最大类间散度)
是描述两个概率分布差异的一种测度。对于两个概率分布P、Q,二者越相似,KL散度越小。

KL散度的性质:P:真实分布,Q:P的拟合分布

非负性:KL(P||Q)>=0,当P=Q时,KL(P||Q)=0;
反身性:KL(P||P)=0
非对称性:D(P||Q) ≠ D(Q||P)
KL散度不满足三角不等式

from scipy import stats P = [0.2, 0.4, 0.4] Q = [0.4, 0.2, 0.5] print(stats.entropy(P,Q)) 0.1446821953906301

信息熵: H(x) = E[I(xi)] = E[ log(2,1/P(xi)) ] = -∑P(xi)log(2,P(xi)) (i=1,2,…n)
在这里插入图片描述
互信息: I(C,D) = H(D)-H(D|C)=H(C)-H(C|D)

在这里插入图片描述
交叉熵
在这里插入图片描述
使用KL散度度量信息损失
在这里插入图片描述
KL散度很容易梯度消失,KL 散度假设这两个分布共享相同的支撑集(也就是说,它们被定义在同一个点集上)。如果2个分布相聚太远或者2个分布之间没有重叠,计算出来的值为无穷大。

2.JS散度

JS散度( Kullback–Leibler divergence) (最小类内散度)
JS散度的取值范围在0-1之间,完全相同时为0
JS散度是对称的
在这里插入图片描述

from scipy import stats import numpy as np P =np.asarray( [[0.00934234 , 2.1068802],[0.01882005 , 2.03656788],[ 0.25182744 , 2.14507649]]) Q = np.asarray([[ 0.34670991, -0.24534987],[ 0.93025953 ,-0.69697827],[ 0.47976121, -0.33842087]]) M = (P+Q)/2 print(0.5*stats.entropy(P, M)+0.5*stats.entropy(Q, M))
作者:熊熊的小心心



nlp js

需要 登录 后方可回复, 如果你还没有账号请 注册新账号