理解机器学习中的熵

99封情书 提交于 2019-11-29 03:17:38

1. 信息量和信息熵

熵是表征系统混乱度/不确定度的物理量,在热力学、信息学中都有其各自的含义,而在机器学习更多沿用了信息熵的概念,即解释随机变量分布所需要的信息量(下文给出数学定义),或者从信息编码的角度来说,用某种方式对随机变量分布进行编码所需要的编码信息长度。

假设一个离散型随机变量xx,其分布为p(x)p(x),如何计算其熵呢,我们先引入信息量的概念:事件发生所蕴含的信息。比如对于【中国队又没进世界杯】这个事件,我们已经习以为常,所以其中包含的信息量非常有限;而对于【中国队进了世界杯】,我们会很吃惊,所以其中包含的信息量非常大,需要大量的信息去确定它。也就是说,信息量和事件发生的概率有关。信息量的度量方式I(x)I(x)应满足,p(x)越大,其信息量越小(事件越确定,所需要的编码长度越短),而p(x)越小,其信息量越大。

I(x)=log(p(x))I(x)=-log(p(x))来表示信息量(常用ee或2作为对数底),特殊的0log0=00log0=0,即不可能事件的信息量为0。这种定义方式有如下几个优点:
(1)恒非负,且单调递减,当p(x)=1时为0(即必然事件的信息量为0),即满足上面单调递减的度量要求。
(2)对于两个独立事件x,yx,y,其同时发生的信息量等于两者分别发生的信息量之和,即I(x,y)=log(p(x)p(y))=logp(x)logp(y)=I(x)+I(y)I(x, y) = -log(p(x)*p(y))=-logp(x)-logp(y)=I(x)+I(y),符合常识。
(3)对数表示能够有效对概率值进行压缩。
图1. 信息量
对于上述离散型分布p(x)p(x),其信息熵可定义为H(x)=ip(xi)logp(xi)H(x)=-\sum_{i}p(x_i)logp(x_i),对于连续型分布,可写成p(x)logp(x)dx\int -p(x)logp(x)dx。也就是信息熵表示随机变量分布中信息量的期望,或者理解成信息平均编码长度。

信息熵的上下限0H(x)logn0\le H(x) \le logn
证明
对于左式,任意的概率值p(x),log(p(x))0p(x), -log(p(x)) \ge0,加权平均和非负显然成立
对于右式,H(x)=ip(xi)log1p(xi)H(x)=\sum_i p(x_i)log\frac{1}{p(x_i)},其中对数函数为严格凹函数,所以H(x)log(ip(xi)1p(xi))=lognH(x) \le log(\sum_i p(x_i)*\frac{1}{p(x_i)})=logn,等式仅当p(x1)=p(x2)=...=p(xn)=1np(x_1)=p(x_2)=...=p(x_n)=\frac{1}{n}时成立
也就是说平均分布的信息熵最大,这也符合最大似然估计MLE的直觉。

2. 交叉熵和相对熵/KL散度

回到信息熵的定义H(x)=ip(xi)logp(xi)H(x)=-\sum_{i}p(x_i)logp(x_i),它的基本元素包括事情发生的概率p(x)p(x)和事件发生包含的信息量logp(x)-logp(x)。前面在计算信息量的时候直接用p(x)p(x)(所以,也称为自信息量),那能否使用不同的随机事件分布来表示呢?答案是显然的,这样就是交叉熵的定义。
交叉熵H(p,q)=p(xi)log(q(xi))H(p,q)=-\sum p(x_i)log(q(x_i)),可以理解成真实分布为pp,但用分布qq去表示的信息量的期望;或理解成对随机分布p(x)p(x)采用q(x)q(x)编码的平均长度。

那对于真实分布p(x)p(x),采用何种发生去表达其信息量更合适,或者说用何种编码方式其编码长度更短呢?为了回答这个问题,我们引出相对熵的概念:
相对熵D(pq)=ip(xi)log(p(xi)q(xi))=H(p,q)H(p)D(p||q)=\sum_i p(x_i)log(\frac{p(x_i)}{q(x_i)})=H(p,q)-H(p),可以理解成交叉熵和熵的差,相对熵也被称为KL散度

相对熵的非负性D(pq)0D(p||q) \ge 0
证明
log(x)-log(x)为严格凸函数,根据Jesen不等式
D(pq)=ip(xi)log(p(xi)q(xi))=ip(xi)log(q(xi)p(xi))log(ip(xi)q(xi)p(xi))=0D(p||q) \\=\sum_i p(x_i)log(\frac{p(x_i)}{q(x_i)}) \\ =\sum_i p(x_i)*-log(\frac{q(x_i)}{p(x_i)}) \\ \ge-log (\sum_ip(x_i)*\frac{q(x_i)}{p(x_i)})\\=0
也就是说H(p,q)H(p)H(p,q)\ge H(p),真实分布p(x)p(x)用其自信息p(x)p(x)去表示信息量最少(还是自己更懂自己^ ^),用其它分布取编码都会引入噪声(额外的编码长度),所以相对熵可以理解成用分布qq去给真实分布pp编码所需要的额外的平均编码长度,越好的编码方式(越接近于真实分布)其相对熵越少。

通过相对熵引入了两个分布间进行编码引入的噪声大小的度量,完全一样的分布其值为0,分布差别越大其值越大。所以,相对熵可以用作两个分布相似性的度量!
值得注意的是,相对熵不具备对称性,即D(pq)!=D(qp)D(p||q)!=D(q||p)

回到D(pq)=H(p,q)H(p)D(p||q)=H(p,q)-H(p),对于真实分布pp,若其为固定值,则相对熵的大小可以直接通过交叉熵进行体现,这也是在机器学习和深度学习中频繁使用交叉熵作为损失函数的原因。

3. 联合熵和条件熵

与概率论中类似,从信息熵的定义中可以衍生出联合熵和条件熵。
联合熵H(x,y)=p(x,y)log(p(x,y))H(x,y)=\sum -p(x,y) log(p(x,y)),表示联合分布用自信息进行表达的信息量大小
条件熵H(yx)=ip(xi)H(yx=xi)H(y|x)=\sum_ip(x_i)H(y|x=x_i),表示xx分布下,yy的条件概率信息熵的期望值

条件熵可以表示成某个联合概率分布用条件概率进行表达的信息量的大小:
H(yx)=ip(xi)H(yx=xi)=ip(xi)jp(yxi)logp(yxi)=ijp(xi)p(yjxi)logp(yjxi)=x,yp(x,y)logp(yx)H(y|x)\\=\sum_ip(x_i)H(y|x=x_i) \\=\sum_ip(x_i)\sum_j-p(y|x_i)logp(y_|x_i)\\=\sum_i\sum_j-p(x_i)p(y_j|x_i)logp(y_j|x_i)\\=\sum_{x,y}-p(x,y)logp(y|x)
条件熵的值恒非负

条件熵还可以写成H(yx)=H(x,y)H(x)H(y|x)=H(x,y)-H(x),也就是说条件熵表示在给定分布xx情况下,联合分布(x,y)(x,y)中额外的信息量
证明
H(x,y)=x,yp(x,y)log(p(x,y))=x,yp(x,y)log(p(yx)p(x))=x,yp(x,y)log(p(yx))+x,yp(x,y)log(p(x))=H(yx)+xyp(x,y)log(p(x))=H(yx)+xp(x)log(p(x))=H(yx)+H(x)H(x,y)\\=\sum_{x,y}-p(x,y)log(p(x,y))\\=\sum_{x,y}-p(x,y)log(p(y|x)*p(x))\\=\sum_{x,y}-p(x,y)log(p(y|x))+\sum_{x,y}-p(x,y)log(p(x))\\=H(y|x)+\sum_x\sum_y-p(x,y)log(p(x))\\=H(y|x)+\sum_x-p(x)log(p(x) )\\=H(y|x)+H(x)

4. 互信息

定义互信息I(x,y)=xyp(x,y)logp(x,y)p(x)p(y)I(x,y)=\sum_x\sum_yp(x,y)log\frac{p(x,y)}{p(x)p(y)},表示分布xxyy共享的信息:它度量知道这两个变量其中一个,对另一个不确定度减少的程度。若xxyy独立,则p(x,y)=p(x)p(y)p(x,y)=p(x)p(y),意味着I(x,y)=0I(x,y)=0

I(x,y)=xyp(x,y)logp(x,y)p(x)p(y)=x,yp(x,y)logp(x,y)p(x)x,yp(x,y)logp(y)=x,yp(x)p(yx)logp(yx)x,yp(x,y)logp(y)=xp(x)yp(yx)logp(y(x))yp(y)logp(y)=xp(x)H(yx)+H(y)=H(y)H(yx)I(x,y)\\=\sum_x\sum_yp(x,y)log\frac{p(x,y)}{p(x)p(y)}\\=\sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)}-\sum_{x,y}p(x,y)logp(y)\\=\sum_{x,y}p(x)p(y|x)logp(y|x)-\sum_{x,y}p(x,y)logp(y)\\=\sum_xp(x)\sum_yp(y|x)logp(y(x))-\sum_yp(y)logp(y)\\=-\sum_xp(x)H(y|x)+H(y)\\=H(y)-H(y|x)

互信息具有对称性,可以解释成信息熵与条件熵的差。
类似的证明方式,可以写出互信息的等价表达式:
I(x,y)=H(x)H(xy)=H(y)H(yx)=H(x,y)H(xy)H(yx)=H(x)+H(y)H(x,y)I(x,y)\\=H(x)-H(x|y)\\=H(y)-H(y|x)\\=H(x,y)-H(x|y)-H(y|x)\\=H(x)+H(y)-H(x,y)
用Veen图可以清晰的表达:
互信息Venn图
互信息也可以理解成两个分布中共同包含的信息量,因此在机器学习中常用来作为一种过滤法进行特征的选择。

5. 小结

机器学习中的各类熵均是随机变量分布中信息量的量度,差别在于随机分布的特点和用于信息量度量的方式。熵在数据的特征工程,决策树模型、逻辑回归和最大熵等概率模型,以及模型优化目标(交叉熵)中均有广泛的应用。

【参考文献】

  1. 详解机器学习中的熵、条件熵、相对熵和交叉熵
  2. 互信息的深度理解
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!