zoukankan      html  css  js  c++  java
  • 信息熵、交叉熵、KL散度等等

    信息熵,KL散度,交叉熵

    写在前面
    KL散度只是作为距离度量的一种“不完美”的手段,其被提出的出发点不是为了距离度量

    信息熵

    信息熵是系统信息含量的量化指标。香农描述了信息熵的三个性质:

    1. 单调性,且概率越高,信息量越低
    2. 非负性
    3. 累加性,即多随机事件同时发生的总不确定性的度量应等于各事件自身不确定性度量之和

    同时,信息熵也可以理解为系统所蕴含的信息量的期望,即系统中各事件的信息量与其发生概率乘积之和:

    $$
    H(X) =sum_{x} p(x)I(x)

    $$

    上式中信息量$I(x)$如何计算成了关键。
    根据累加性, $H(X)+H(Y) = H(X,Y)$, 这一点和$log()$的性质一致,即$log(x)+log(y)=log(xy)$。由此可以假设$I(x)=Clog(x)$,因为非负性,$C=-1$。然后再验证累加性是否成立:
    $$
    H(X,Y) = H(X) +H(Y) ag1
    $$

    公式$(1)$是按照累加性理解写出来的,但事实上是不成立的,原因看下面推导。

    其中,
    $$
    egin{aligned}
    H(X,Y)
    &=Csum_{(x,y)}p(x,y)log(x,y)
    &=Csum_{(x,y)} p(x,y) log(p(x mid y)p(y) )
    &=Csum_{(x,y)} p(y mid x)p(x)log(y mid x) +C sum_{(x,y)} p(x mid y)p(y)logp(x)
    &=Csum_{x}p(x) sum_{y}p(y mid x)logp(y mid x) +C sum_{y} p(y) sum_{x} p(x mid y) log p(x)
    &=Csum_{x} p(x)H(Y mid x) +C sum_{y} p(y) sum_{x} frac {p(y mid x)p(x) }{p(y)}logp(x)
    &=H(Y mid X) + Csum_{x}p(x)logp(x)sum_{y} p(y mid x)
    &=H(Y mid X) + H(X) ag2
    end{aligned}
    $$

    对立的,$H(X,Y)=H(X mid Y) + H(Y)$
    因此,
    $$
    H(X)+H(Y)=2H(X,Y) -H(Y mid X)- H(X mid Y) ag3
    $$
    这与公式(1)矛盾,说明累加性并不能如此理解,如果是理解为信息量的累加,那确实是正确的。但这里明明说的是信息熵。

    信息量

    上面描述中已经提到,为$I(x)=-log(x)$

    联合熵

    上面的描述中$H(X,Y)$就是联合熵:
    $$
    H(X, Y)=-sum_{y in Y} sum_{x in X} p(x, y) log p(x, y)
    $$

    条件熵

    表示在已知在随机变量 $X$ 的条件下随机变量 $Y$发生的不确定性。
    $$
    H(Y mid X)=sum_{x in X} p(x) H(Y mid x)=-sum_{x in X} p(x) sum_{y in Y} p(y mid x) log p(y mid x)
    $$

    互信息

    两事件的互信息为各事件单独发生所代表的信息量之和减去两事件同时发生所代表的信息量之后剩余的信息量。
    $$
    I(X, Y)=sum_{y in Y} sum_{x in X} p(x, y) f(x,y)
    $$
    其中,
    $$
    f(x,y)= -log p(x)-log p(y)-(-log p(x, y))= log left(frac{p(x, y)}{p(x) p(y)} ight)
    $$

    这里的$f()$不能写成$I()$,不然更改后会发现互信息为联合熵的表达形式

    互信息、联合熵、条件熵之间的关系

    化简互信息的公式:
    $$ ag{4}
    egin{aligned}
    I(X, Y) &=sum_{y in Y} sum_{x in X} p(x, y) log frac{p(x, y)}{p(x) p(y)}
    &=sum_{x in X} sum_{y in Y} p(x, y)(log p(x, y)-log p(x)-log p(y))
    &=sum_{x in X} sum_{y in Y}[ p(x, y) log p(x, y)- p(x, y) log p(x)-p(x, y) log p(y)]
    &=sum_{x in X} sum_{y in Y} p(x, y) log p(x, y)-sum_{x in X} p(x) log p(x)-sum_{x in X} p(y) log p(y)
    &=H(X)+H(Y)-H(X, Y)
    end{aligned}
    $$
    结合公式$(3)$,也得到:
    $$ ag5
    I(X,Y) = H(X,Y) - H(Y mid X)- H(X mid Y)
    $$
    另外,结合公式(2),(5),得到:
    $$ ag6
    egin{aligned}
    H(X) - I(X,Y) &= H(X) - H(X,Y) + H(Y mid X)+ H(X mid Y)
    &= H(X) - (H(Y mid X) + H(X) )- H(Y mid X)- H(X mid Y)
    &=H(X mid Y)
    end{aligned}
    $$
    总的关系图:

    用集合的关系理解上面这些符号应该更容易。

    交叉熵

    感性来讲,交叉熵描述当系统中事件分布不真实时,所产生的信息熵偏差现象。例如,事件X的真实分布理论为p(x),但由于观测有噪声,观测到的分布为q(x),此时交叉熵为:
    $$
    H(p,q)=-sum_{x} p(x) log q(x)
    $$

    上式中p,q表示分布,而前面提到的X,Y为系统(或许也可以说是随机变量,随机变量不是标量,是函数)

    即仅仅用观测到的信息量替换了原本的信息量。由此会带来熵的差异,即增加了不确定性。说增加是因为交叉熵一定大于等于原本的信息熵:
    $$
    egin{aligned} ag7
    H(p, q) - H(p) &= -sum_{x} p(x) log q(x) + sum_{x} p(x) log p(x)
    &=-sum_{x} p(x) log frac {q(x)}{p(x)}
    &=-E_{p(x)}left(log frac{q(x)}{p(x)} ight)
    & geq-log E_{p(x)}left(frac{q(x)}{p(x)} ight)
    &=-log sum_{x} p(x) frac{q(x)}{p(x)}
    &=-log sum_{x} q(x) =-log(1)=0
    end{aligned}
    $$

    上式中转折为何成立

    神经网络训练中用交叉熵作为Loss Function时, 就是为了让拟合出来的分布尽量接近真实分布。越接近,交叉熵越小,直至为0,此时拟合分布和真实分布相同。

    KL散度(相对熵)

    其实公式$(7)$中已经定义了相对熵,即表述噪声分布下相对真实分布增加的不确定性:
    $$
    D_{KL}(p parallel q) = H(p, q) - H(p) = -sum_{x} p(x) log frac {q(x)}{p(x)}=sum_{x} p(x) log frac {p(x)}{q(x)} geq 0
    $$

    尽管很多工作用KL散度作为两个分布的距离度量方法,但实际熵KL散度本地并不是用来评估二者相似程度的。
    其一在于,KL散度中p、q位置交换,公式结果不相等,这违背了相对距离概念。
    其二,KL散度本质是度量相对增加的不确定性。
    因此,一些工作中将真实分布和噪声分布的位置颠倒去计算KL散度,看似有问题,实则是为了后续计算期望方便,毕竟不管p、q相对位置如何,KL散度越小,说明二者越接近,且KL散度为0时,说明二者一致。

  • 相关阅读:
    数据库的事务
    二路归并排序C++ 递归实现
    2020cocoapods安装和更新repo
    iOS 一个对象的等同性
    chrome插件离线安装程序包无效
    OC 直接使用使用实例变量和通过属性来访问实例变量的区别
    数据结构与算法(八),查找
    数据结构与算法(七),排序
    数据结构与算法(六),图
    数据结构与算法(五),优先队列
  • 原文地址:https://www.cnblogs.com/cccczh/p/14801003.html
Copyright © 2011-2022 走看看