一文说清楚你头疼不已的熵们:信息熵、联合熵、条件熵、互信息、交叉熵、相对熵(KL散度)


  说起熵,相信看本文的你一定听过这个概念,我们以前高中的时候在化学里学过,我们有一种大致的概念就是:熵是描述系统混乱程度的一种物理量,而且我们知道世界是向着熵增的方向进行的。那么在信息论里面,熵又是一种什么样的存在呢,为什么要引入这样抽象的一个概念,香农大佬为啥要把人搞得迷迷糊糊的?而你搞机器学习的话,肯定会遇到什么联合熵,条件熵,交叉熵。这些熵,到底是什么关系,有什么用?本文将会尽量把信息熵之间的关系给阐述清楚,让你茅塞顿开,一泻千里。

1. 信息熵

  我们说信息熵,当然就不再是化学中的熵的概念了,但是他们的内在精神十分相似,信息熵是描述一个随机变量的不确定性的,如X是一个随机变量,概率分布是 p ( x ) = P ( X = x ) p(x) = P(X=x) p(x)=P(X=x),那么X的熵的定义为式子:
H ( X ) = − Σ x p ( x ) l o g 2 p ( x ) H(X) = -\Sigma_xp(x)log_2p(x) H(X)=Σxp(x)log2p(x)

  我们看到底数是2,因此熵的单位是比特,以后可以省略底数2。
  你可以试图取两个分布,A是0.2,0.8;B是0.5,0.5,算算谁的熵更大呢?很容易可以算出后者的熵更大,这是什么意思呢?我们看A和B谁的不确定性更大?当然是B了,那么它的熵算出来更大,是不是也是更合理的呢?就是基于这样的一种思想,信息熵被创造了出来。你问我有啥用?单纯的一个熵确实发挥不出来威力,我们往后看。

2. 联合熵

  简而言之,我们有两个变量的联合分布 p ( x , y ) p(x,y) p(x,y),为什不能有两个变量的联合熵呢?答案当然是可以的,那么我们如何定义的呢?
H ( X , Y ) = Σ x Σ y p ( x , y ) l o g p ( x , y ) H(X,Y)=\Sigma_x\Sigma_y p(x,y)logp(x,y) H(X,Y)=ΣxΣyp(x,y)logp(x,y)
  联合熵的含义也很简单,就是描述这样一对随机变量平均所需要的信息量。这个也很好理解。

3. 条件熵

  有同学说,我知道,熵是 H ( X ) = − Σ x p ( x ) l o g 2 p ( x ) H(X) = -\Sigma_xp(x)log_2p(x) H(X)=Σxp(x)log2p(x)
  联合熵是 H ( X , Y ) = Σ x Σ y p ( x , y ) l o g p ( x , y ) H(X,Y)=\Sigma_x\Sigma_y p(x,y)logp(x,y) H(X,Y)=ΣxΣyp(x,y)logp(x,y)
  那条件熵肯定是 H ( X ∣ Y ) = Σ x Σ y p ( x ∣ y ) l o g p ( x ∣ y ) H(X|Y)=\Sigma_x\Sigma_y p(x|y)logp(x|y) H(XY)=ΣxΣyp(xy)logp(xy)
  那你可是太棒了,错大了,很多同学想当然,容易在这里犯错误,但是这里的条件熵不是这样的,不信我们来推导一下。
给定随机变量X时,条件熵是:
           H ( Y ∣ X ) = Σ x p ( x ) H ( Y ∣ X = x ) H(Y|X)=\Sigma_x p(x)H(Y|X=x) H(YX)=Σxp(x)H(YX=x)
                = Σ x p ( x ) [ − Σ y p ( y ∣ x ) l o g p ( y ∣ x ) ] =\Sigma_x p(x)[-\Sigma_yp(y|x)logp(y|x)] =Σxp(x)[Σyp(yx)logp(yx)]
                = − Σ x Σ y p ( x , y ) l o g p ( y ∣ x ) =-\Sigma_x\Sigma_yp(x,y)logp(y|x) =ΣxΣyp(x,y)logp(yx)
  是不是很神奇, l o g log log前面的概率不是条件概率,是联合概率。下面可以推导联合熵和条件熵的关系!
         H ( X , Y ) = − Σ x Σ y p ( x , y ) l o g p ( x , y ) H(X,Y)=-\Sigma_x\Sigma_y p(x,y)logp(x,y) H(X,Y)=ΣxΣyp(x,y)logp(x,y)
              = − Σ x Σ y p ( x , y ) l o g p ( x ∣ y ) p ( y ) =-\Sigma_x\Sigma_y p(x,y)logp(x|y)p(y) =ΣxΣyp(x,y)logp(xy)p(y)
              = − Σ x Σ y p ( x , y ) l o g p ( x ∣ y ) − Σ x Σ y p ( x , y ) l o g p ( y ) =-\Sigma_x\Sigma_y p(x,y)logp(x|y)-\Sigma_x\Sigma_y p(x,y)logp(y) =ΣxΣyp(x,y)logp(xy)ΣxΣyp(x,y)logp(y)
              = − Σ x Σ y p ( x , y ) l o g p ( x ∣ y ) − Σ y p ( y ) l o g p ( y ) =-\Sigma_x\Sigma_y p(x,y)logp(x|y)-\Sigma_y p(y)logp(y) =ΣxΣyp(x,y)logp(xy)Σyp(y)logp(y)
              = H ( X ∣ Y ) + H ( Y ) =H(X|Y)+H(Y) =H(XY)+H(Y)
  有点东西!他们说多一公式少一个读者,不知道有没有属性恐惧症的同学,其实这里密密麻麻地一堆,翻来覆去的都是很基础的东西,真的不要怕这些公式。

4. 互信息

  我们上面知道了,既然 H ( X , Y ) = H ( X ∣ Y ) + H ( Y ) H(X,Y)=H(X|Y)+H(Y) H(X,Y)=H(XY)+H(Y)
  当然是对称的,又有 H ( X , Y ) = H ( Y ∣ Y ) + H ( X ) H(X,Y)=H(Y|Y)+H(X) H(X,Y)=H(YY)+H(X)
  相当于是一个这样的集合的关系
在这里插入图片描述
  当然,互信息就是中间的交集部分咯,又来暴虐数学恐惧症了:
         I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y) = H(X)-H(X|Y) I(X;Y)=H(X)H(XY)
         = H ( X ) + H ( Y ) − H ( X , Y ) = H(X)+H(Y)-H(X,Y) =H(X)+H(Y)H(X,Y)
         = − Σ x p ( x ) l o g p ( x ) − Σ y p ( x ) l o g p ( y ) + Σ x Σ y p ( x , y ) l o g p ( x , y ) =-\Sigma_xp(x)logp(x)-\Sigma_yp(x)logp(y)+\Sigma_x\Sigma_yp(x,y)logp(x,y) =Σxp(x)logp(x)Σyp(x)logp(y)+ΣxΣyp(x,y)logp(x,y)
         = Σ x Σ y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) =\Sigma_x\Sigma_yp(x,y)log\frac{p(x,y)}{p(x)p(y)} =ΣxΣyp(x,y)logp(x)p(y)p(x,y)
  可以看出来,这个互信息还是很合理的, I ( X ; Y ) I(X;Y) I(X;Y)反映的就是知道了Y的值以后,X的不确定性的减少量。而 I ( X ; Y ) = I ( Y ; X ) I(X;Y)= I(Y;X) I(X;Y)=I(Y;X)就是知道了X的值以后,Y的不确定性减少量,他们是相等的。
  平均互信息是非负的。自然语言处理中,通常可以通过互信息来判断两个对象之间的关系,如根据主题类别与词汇之间的互信息大小,来进行特征词抽取。
  多一句嘴,大家还记得ID3决策树吗,每次分裂的节点是怎么得来的,里面是不是以信息增益作为指标来找分裂节点的?这里的信息增益,其实就是平均互信息。

5. 交叉熵

  对于熟悉机器学习的同学来说,交叉熵这个词怕是听得太多次了,因为有个概念叫交叉熵损失,而交叉熵可以用来衡量估计模型与真实概率分布之间的差异情况,通俗来说还是衡量两个概率分布之间的距离嘛~~这样我们就知道,为什么交叉熵可以作为损失函数,也就是我们的优化目标存在了,因为它能衡量估计模型和真实分布之间的差异情况,而我们的目标就是估计模型和真实分布差异越小越好,因此它作为一种损失函数,是十分可行的!
  假设X的分布是 p ( x ) p(x) p(x) q ( x ) q(x) q(x)是用于近似 p ( x ) p(x) p(x)的分布, D ( ) p ∣ ∣ q D()p||q D()pq是相对熵,后面会讲。那么有:
         H ( X , q ) = H ( X ) + D ( p ∣ ∣ q ) H(X,q) = H(X)+D(p||q) H(X,q)=H(X)+D(pq)
              = − Σ x p ( x ) l o g q ( x ) =-\Sigma_xp(x)logq(x) =Σxp(x)logq(x)
  还记得逻辑回归中怎么写的吗:
C o s t = 1 N Σ x [ y l n y ^ + ( 1 − y ) l n ( 1 − y ^ ) ] Cost=\frac{1}{N}\Sigma_x[yln\hat y+(1-y)ln(1-\hat y)] Cost=N1Σx[ylny^+(1y)ln(1y^)]
  这里的 y y y是真实样本的分布, y ^ \hat y y^是我们的模型估计出来的分布,也就是用来近似真实分布的分布(好拗口)。

6. 相对熵(KL散度)

  KL散度也是用来衡量两个分布之间的差异的,所以作用和交叉熵是差不多的。
  定义为:
D ( p ∣ ∣ q ) = Σ x p ( x ) l o g p ( x ) q ( x ) D(p||q) = \Sigma_xp(x)log\frac{p(x)}{q(x)} D(pq)=Σxp(x)logq(x)p(x)
  当两个随机分布的差别增加时,相对熵的期望值即增大。

7. 总结

  好了,说了这么多,不知道你都搞清楚了吗,常见的一些熵,还头疼吗?头疼的话,我们再全局地看看他们之间的关系:
在这里插入图片描述
   (注意这张图里面的 H ( T ; Y ) H(T;Y) H(T;Y)表示的是交叉熵,其余符号与上文同)
  好了,大概就这些内容了,其实是要写个最大熵模型,但要先把这个概念给讲清楚,欢迎关注后面的更新。看了本文应该是大概对这些熵能有基本的认识了,如果哪里还不明白,欢迎提出,我会及时修正~~

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值