人工智能与机器学习大数据,机器学习,人工智能机器学习与数据挖掘

机器学习(3)——信息论基础(熵的介绍)

2018-08-24  本文已影响71人  WarrenRyan

信息论基础

  在讲述熵的时候,我想先引入一个新的东西——信息量,信息是用来减少随机不确定性的东西(即不确定性的减少)。对于事件来说,它发生的概率越大,那么它所含有的信息量就越低,这很好理解,例如你今天去吃饭这个事件,这件事假定是一个必然事件的话,那么它所含有的信息只有吃饭这一件,那么假设这件事的概率越低,你也许会因为生病而不想吃饭,也许你随着心情来决定是否吃饭,它所含有的信息量就变大了。那么对于交叉熵中的熵,这又是一个什么东西呢?
  对于理工科的读者来说,这个东西并不难以理解,高中化学曾经学习过熵的一些概念。化学中的熵是指一个体系中的混乱程度,事实上对应我们机器学习中的熵是类似的。一个事物越混乱,那么很显然它就包含了更多的信息。
  熵有许多种,交叉、信息熵、相对熵以及条件熵等等。

信息熵

信息熵是由信息论之父香农提出来的,它用于随机变量的不确定性度量,先上信息熵的公式。
先上信息熵的公式:
H(X)=-\sum_{x \in X}p(x)logp(x)
我们可以用log\frac{1}{P}来衡量不确定性。P是一件事情发生的概率,概率越大,不确定性越小。
可以看到信息熵的公式,其实就是log\frac{1}{P}的期望,就是不确定性的期望,它代表了一个系统的不确定性,信息熵越大,不确定性越大。
注意这个公式有个默认前提,就是X分布下的随机变量x彼此之间相互独立。还有log的底默认为2,实际上底是多少都可以,但是在信息论中我们经常讨论的是二进制和比特,所以用2。
信息熵在联合概率分布的自然推广,就得到了联合熵:
H(X,Y)=-\sum_{x \in X} \sum_{y \in Y}p(x,y)logp(x,y)
当X, Y相互独立时,H(X, Y) = H(X) + H(Y)
当X和Y不独立时,可以用I(X, Y) = H(X) + H(Y) - H(X, Y)衡量两个分布的相关性,这个定义比较少用到。
下面这个例子很好的说明了这个问题

取自知乎
比如赌马比赛,有4匹马{ A, B, C, D},获胜概率分别为{ 1/2, 1/4, 1/8, 1/8 },将哪一匹马获胜视为随机变量X属于 { A, B, C, D } 。
假定我们需要用尽可能少的二元问题来确定随机变量 X 的取值。
例如,问题1:A获胜了吗? 问题2:B获胜了吗? 问题3:C获胜了吗?
最后我们可以通过最多3个二元问题,来确定取值。
如果X = A,那么需要问1次(问题1:是不是A?),概率为1/2
如果X = B,那么需要问2次(问题1:是不是A?问题2:是不是B?),概率为1/4
如果X = C,那么需要问3次(问题1,问题2,问题3),概率为1/8
如果X = D,那么需要问3次(问题1,问题2,问题3),概率为1/8
那么为确定X取值的二元问题的数量为
E(N)=\frac{1}{2}\cdot1+\frac{1}{4}\cdot2+\frac{1}{8}\cdot3+\frac{1}{8}\cdot3=\frac{7}{4}
回到信息熵的定义,会发现通过之前的信息熵公式,神奇地得到了:
H(X)=\frac{1}{2}log_2(2)+\frac{1}{4}log_24+\frac{1}{8}log_28=\frac{7}{4}bits
在二进制计算机中,一个比特为0或1,其实就代表了一个二元问题的回答。也就是说,在计算机中,我们给哪一匹马夺冠这个事件进行编码,所需要的平均码长为1.75个比特。
很显然,为了尽可能减少码长,我们要给发生概率p(x)较大的事件,分配较短的码长l(x)。这个问题深入讨论,可以得出霍夫曼编码的概念。
霍夫曼编码就是利用了这种大概率事件分配短码的思想,而且可以证明这种编码方式是最优的。我们可以证明上述现象:
为了获得信息熵为H(X)的随机变量X的一个样本,平均需要抛掷均匀硬币(或二元问题)H(X)次(参考猜赛马问题的案例)
信息熵是数据压缩的一个临界值(参考码长部分的案例)

Kullback-Leibler 散度

  我们通常将 Kullback-Leibler 散度称之为相对熵或者 KL距离 ,如果我们对于同一个随机变量 x 有两个单独的概率分布P(x)Q(x),我们可以使用KL散度来衡量这两个分布的差异。
  在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]。直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。
  KL散度的计算公式:
D_{KL}(p||q)=\sum_{i=1}^np(x_i)log_2\frac{p(x_i)}{q(x_i)})
n为事件所有的可能性,D_{KL}的值与pq分布接近程度呈正相关关系。

交叉熵

  交叉熵可以看做 Kullback-Leibler散度 的特例,展开KL散度的公式:
D_{KL}(p||q)=\sum_{i=1}^np(x_i)log_2p(x_i)-p(x_i)log_2q(x_i)
  而之前我们给出的信息熵的公式是:
H(p)=-\sum_{i=1}^ip(x_i)logp(x_i)
  交叉熵公式是:
H(p,q) = -\sum_{i=1}^np(x_i)log_2(q(x_i))
  很容易发现,D_{KL}(p||q)+H(p)=H(p,q)。也就是说,如果H(p)是一个常量的时候,交叉熵和相对熵是完全等价的。
  看到这里,你也许会困惑为什么有KL散度和交叉熵两种算法?为什么他们可以用来求分布的不同?什么时候可以等价使用?这是一种解释:

  大多数情况下,交叉熵和相对熵都是等价的,那么既然等价,显然使用更为简单的公式。

一点总结

  说了那么多,你或许会问,熵究竟有什么用处。交叉熵常常用作算法中的损失函数。为什么可以这样?因为机器学习算法本质上就是让模型学习到的分布与真实数据之间的分布越小越好。我们的 Kullback-Leibler 散度反映的不就是拟合程度吗?交叉熵可以和很多概率模型完美的结合。所以一般逻辑思路是,为了让学到的模型分布更贴近真实数据分布,我们最小化模型数据分布与训练数据之间的KL散度,而因为训练数据的分布是固定的,因此最小化KL散度等价于最小化交叉熵。因为等价,而且交叉熵更简单更好计算,所以我们还是使用交叉熵做为主要的计算公式。

欢迎关注我的博客获得第一时间更新 https://blog.tity.online

上一篇下一篇

猜你喜欢

热点阅读