相对熵

KL距离(相对熵)

KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy)。它衡量的是相同事件空间里的两个概率分布的差异情况。其物理意义是:在相同事件空间里,概率分布P(x)对应的每个事件,若用概率分布 Q(x)编码时,平均每个基本事件(符号)编码长度增加了多少比特。我们用D(P||Q)表示KL距离,计算公式如下:

id="iframe_0.6479945867322385" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/kangwp/pic/item/cd7f553931ba05bb3c6d9768.jpg?_=3620470%22%20style=%22border:none;max-width:986px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.6479945867322385',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 187px; height: 43px;">

  当两个概率分布完全相同时,即P(X)=Q(X),其相对熵为0 。我们知道,概率分布P(X)的信息熵为:

id="iframe_0.3141034480649978" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/kangwp/pic/item/7732d4a65aac6df8caefd053.jpg?_=3620470%22%20style=%22border:none;max-width:986px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.3141034480649978',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 171px; height: 35px;">

  其表示,概率分布P(x)编码时,平均每个基本事件(符号)至少需要多少比特编码。通过信息熵的学习,我们知道不存在其他比按照本身概率分布更好的编码方式了,所以D(P||Q)始终大于等于0的。虽然KL被称为距离,但是其不满足距离定义的三个条件:1)非负性(满足);2)对称性(不满足);3)三角不等式 (不满足)。

  我们以一个例子来说明,KL距离的含义。

  假如一个字符发射器,随机发出0和1两种字符,真实发出概率分布为A,但实际不知道A的具体分布。现在通过观察,得到概率分布B与C。各个分布的具体情况如下:

A(0)=1/2,A(1)=1/2

B(0)=1/4,B(1)=3/4

C(0)=1/8,C(1)=7/8

  那么,我们可以计算出得到如下:

id="iframe_0.44044703082181513" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/kangwp/pic/item/8a47d166ee96b888e6113ae6.jpg?_=3620470%22%20style=%22border:none;max-width:986px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.44044703082181513',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 358px; height: 40px;">

id="iframe_0.30879904027096927" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/kangwp/pic/item/0f05613c411acc7696ddd8c8.jpg?_=3620470%22%20style=%22border:none;max-width:986px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.30879904027096927',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 364px; height: 40px;">

  也即,这两种方式来进行编码,其结果都使得平均编码长度增加了。我们也可以看出,按照概率分布B进行编码,要比按照C进行编码,平均每个符号增加的比特数目少。从分布上也可以看出,实际上B要比C更接近实际分布(因为其与A分布的KL距离更近)。

  如果实际分布为C,而我们用A分布来编码这个字符发射器的每个字符,那么同样我们可以得到如下:

id="iframe_0.6429965880233794" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/kangwp/pic/item/916232d54a25e76d9b50278e.jpg?_=3620470%22%20style=%22border:none;max-width:986px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.6429965880233794',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0" scrolling="no" style="border-style: none; border-width: initial; width: 380px; height: 40px;">

  再次,我们进一步验证了这样的结论:对一个信息源编码,按照其本身的概率分布进行编码,每个字符的平均比特数目最少。这就是信息熵的概念,衡量了信息源本身的不确定性。另外,可以看出KL距离不满足对称性,即D(P||Q)不一定等于D(Q||P)。

  当然,我们也可以验证KL距离不满足三角不等式条件。

  上面的三个概率分布,D(B||C)=1/4log2+3/4log(6/7)。可以得到:D(A||C) - (D(A||B)+ D(B||C)) =1/2log2+1/4log(7/6)>0,这里验证了KL距离不满足三角不等式条件。所以KL距离,并不是一种距离度量方式,虽然它有这样的学名。

  其实,KL距离在信息检索领域,以及统计自然语言方面有重要的运用。

### JavaScript 中实现相对熵计算方法 相对熵(也称为 Kullback-Leibler 散度),用于衡量两个概率分布之间的差异程度。其定义如下: \[ D_{KL}(P || Q) = \sum_{i} P(i) \cdot \log{\frac{P(i)}{Q(i)}} \] 其中 \(P\) 和 \(Q\) 是两个离散的概率分布。 以下是基于上述公式的 JavaScript 实现代码示例: ```javascript function calculateRelativeEntropy(P, Q) { if (P.length !== Q.length) { throw new Error("Probability distributions must have the same length."); } let relativeEntropy = 0; for (let i = 0; i < P.length; i++) { if (P[i] === 0) continue; // 避免除零错误 if (Q[i] === 0) { throw new Error("Q distribution cannot contain zero values when corresponding P is non-zero."); } relativeEntropy += P[i] * Math.log(P[i] / Q[i]); } return relativeEntropy; } // 示例输入 const P = [0.1, 0.2, 0.3, 0.4]; // 概率分布 P const Q = [0.2, 0.3, 0.3, 0.2]; // 概率分布 Q console.log(calculateRelativeEntropy(P, Q)); // 输出相对熵值 ``` #### 关键点说明 - **输入验证**:如果 `P` 和 `Q` 的长度不一致,则抛出异常,因为两者必须具有相同的维度[^1]。 - **除零处理**:当 `P[i]` 或 `Q[i]` 出现零时需特别注意。如果 `P[i]` 为零,则跳过该项;但如果 `Q[i]` 为零而对应的 `P[i]` 不为零,则会引发未定义行为,因此应提前检测并抛出错误[^2]。 此函数实现了基本的相对熵计算逻辑,并适用于大多数场景中的离散概率分布比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值