pytorch JS散度和KL_pytorch JS散度和KL


PR Ⅴ & 信息论 Ⅰ:熵、KL散度、交叉熵、JS散度及python实现

首先以离散分布为主开启这个系列的文章,因此文中的概率符号是离散分布所使用的大写的概率质量函数

1 信息量

我们吃瓜的时候经常会感叹信息量很大,这说明肯定是越不寻常的事情信息量越大,如果只是“太阳东起西落”肯定不会引起吃瓜群众的关注。

花书中给出了信息量化的准则如下:


pytorch JS散度和KL_pytorch JS散度和KL_02


那么,一个事件


(注意区分这两个x)的

自信息为:


log 一般指自然对数,底数为e。很明显,事件发生的概率越大,越习以为常,负对数的自信息越小。这复合我们吃瓜时的心态。

2 熵 Entropy

熵在信息论里是对信息量的度量,在物理学与热力学中是对混乱度的度量,二者并不矛盾。

香农熵给出了事件所属的整个分布的不确定性总量量化:



意味着遵循这个分布的事件,所产生的期望信息总量。通常这也意味着对此概率分布进行编码所需的最小比特(bit, 使用2为底的对数)或奈特数(nats, 使用e为底的对数)。

特性:

  • 接近均匀分布的概率分布具有较高的熵
  • 接近确定性的分布 (输出几 乎可以确定) 具有较低的熵

3 相对熵 (KL散度)

对于同一个随机变量 x,我们有两个分布 p(x), q(x),可以使用KL散度来度量两个分布之间的差异(注意:这里是Q相对于P的分布):



特性:

  • 非负性: ,当且仅当两个分布相同
  • 不对称性:


pytorch JS散度和KL_python实现_03


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