PR Ⅴ & 信息论 Ⅰ:熵、KL散度、交叉熵、JS散度及python实现
首先以离散分布为主开启这个系列的文章,因此文中的概率符号是离散分布所使用的大写的概率质量函数。
1 信息量
我们吃瓜的时候经常会感叹信息量很大,这说明肯定是越不寻常的事情信息量越大,如果只是“太阳东起西落”肯定不会引起吃瓜群众的关注。
花书中给出了信息量化的准则如下:
那么,一个事件
(注意区分这两个x)的
自信息为:
log 一般指自然对数,底数为e。很明显,事件发生的概率越大,越习以为常,负对数的自信息越小。这复合我们吃瓜时的心态。
2 熵 Entropy
熵在信息论里是对信息量的度量,在物理学与热力学中是对混乱度的度量,二者并不矛盾。
香农熵给出了事件所属的整个分布的不确定性总量量化:
意味着遵循这个分布的事件,所产生的期望信息总量。通常这也意味着对此概率分布进行编码所需的最小比特(bit, 使用2为底的对数)或奈特数(nats, 使用e为底的对数)。
特性:
- 接近均匀分布的概率分布具有较高的熵
- 接近确定性的分布 (输出几 乎可以确定) 具有较低的熵
3 相对熵 (KL散度)
对于同一个随机变量 x,我们有两个分布 p(x), q(x),可以使用KL散度来度量两个分布之间的差异(注意:这里是Q相对于P的分布):
特性:
- 非负性: ,当且仅当两个分布相同
- 不对称性:
3.1 离散分布的KL散度python实现
import
4 交叉熵
由于
与 Q 无关,所以最小化Q与P之间的交叉熵,就等价于最小化KL散度。
4.1 离散分布的交叉熵python实现
import
5 JS散度
与KL类似,JS散度也是度量两个分布的相似性,越相似,JS散度越小。
特性:
- JS散度的取值在0-1之间,完全相同为0
- JS散度是对称的
5.1 离散分布的JS散度python实现
import