机器学习与信息论之熵

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013972559/article/details/85036623

在机器学习中,我们经常提到熵的概念。例如我们经常使用交叉熵衡量目标(target)与预测值(real)之间的差距,使用KL散度(也称作相对熵)衡量两个概率分布之间的距离。交叉熵和相对熵这些概念其实都来自于信息论,并且自我认为机器学习本身也是对样本信息的学习,另外最近在研究GAN模型和VAE模型(也就是我们常说的生成模型)时,经常会使用到,所以有必要将其单独拿出来作为我学习的一个记录。

要了解交叉熵和相对熵,必须从信息论里面的简单的知识开始。

1、信息(information)

这个是熵和信息增益的基础概念,我觉得对于这个概念的理解更应该把他认为是一用名称,就比如‘鸡‘(加引号意思是说这个是名称)是用来修饰鸡(没加引号是说存在的动物即鸡),‘狗’是用来修饰狗的,但是假如在鸡还未被命名为'鸡'的时候,鸡被命名为‘狗’,狗未被命名为‘狗’的时候,狗被命名为'鸡',那么现在我们看到狗就会称其为‘鸡’,见到鸡的话会称其为‘狗’,同理,信息应该是对一个抽象事物的命名,无论用不用‘信息’来命名这种抽象事物,或者用其他名称来命名这种抽象事物,这种抽象事物是客观存在的。

2、信息量

首先考虑一个离散的随机变量x,当我们观察到这个变量的一个具体值的时候,我们接收到多少信息呢? 
我们暂时把信息看做在学习x的值时候的”惊讶程度”(这样非常便于理解且有意义).当我们知道一件必然会发生的事情发生了,比如往下掉的苹果.我们并不惊讶,因为反正这件事情会发生,因此可以认为我们没有接收到信息.但是要是一件平时觉得不可能发生的事情发生了,那么我们接收到的信息要大得多.因此,我们对于信息内容的度量就将依赖于其发生的可能性也即概率分布p(x). 
假设X是一个离散型随机变量,其取值集合为\chi,概率分布函数p(x)=Pr(X=x),x\in \chi,则定义事件X=x_{0}的信息量为:

I(x_{0})=-log_{2}(p(x_{0}))

我们把这个公式叫做信息量的公式,前面的负号确保了信息一定是正数或者是0.(低概率事件带来高的信息量). 

说明:上面是以2为对数的底,实际上,这个底是能够是其他的数字的.常用的是2和e这两个底.底是2的时候,单位为bit..底是e的时候,单位为nat.

有时候也将其成为自信息(self-information)。可以推广一下。 

联合自信息:

I(x_{i},y_{i})=-log_{2}(p(x_{i},y_{i}))

条件自信息:

I(y_{i}|x_{i})=-log_{2}(p(y_{i}|x_{i}))

通俗一点来说的话,就是概率论中很简单的推广就行了。有概率基础的话,这个很容易理解。这里因为实际上面使用二维的更多一点就以二维为例子,推广到多维的话也是可以的。

3、信息熵

熵(entropy):上面的I(x)是指在某个概率分布之下,某个事件的概率值对应的信息量的公式.那么我们知道每个事件对应的概率值也知道每个事件发生的可能性(即概率),也就知道整个概率分布对应的信息量的平均值.这个平均值就叫做随机变量x的熵。

通常,我们使用熵来衡量所有信息量的期望,即:

H(x)=E_{x\sim p}[I(x)]=E_{x\sim p}[logp(x)]=-\sum_{x}p(x)log(p(x))=-\int p(x)log(p(x))dx

这个公式的意思就是,随机变量x是服从p这个分布的,也就是在在p分布下面的平均自信息。也就得到了信息熵。信息熵的本质可以看做是某个分布的自信息的期望。

注意: 
1.熵只依赖于X的分布,与X的取值无关,因此服从某个分布的X的熵也可以等价于这个分布的熵. 
2.定义0log0=0(因为可能出现某个取值概率为0的情况) 
3.熵越大,随机变量的不确定性就越大(因为之前说了,越是不确定,信息量就越大,要是平均信息量很大,那么也可以代表这个变量的不确定性越大)

举一个特殊的例子,比如投掷硬币只有两种可能,字朝上或花朝上。买彩票只有两种可能,中奖或不中奖。我们称之为0-1分布问题(二项分布的特例),对于这类问题,熵的计算方法可以简化为如下算式: 

H(X)=-\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))=-p(x)log(p(x))-(1-p(x))log(1-p(x))

仿照之前的信息量的公式,可以推广一下。 
假设一个概率分布有两个随机变量决定。其中x有n种取值,y有m种取值。那么可以得到一个n×m的联合概率分布的表。那么有: 
复合熵(联合熵): 

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log(p(x_{i},y_{j}))

同样,复合熵的公式还可以推广到连续变量和多个变量的情况。这里就不写了。

条件熵(离散情况)

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(y_{j})p(x_{i}|y_{j})log(p(x_{i}|y_{j}))

条件熵(连续情况)

H(x,y)=-\int \int p(y)p(x|y)log(p(x|y))dxdy

上面这个公式可能有点难以理解,不知道这个公式是怎么来的。举一个例子来说明一下: 
如果以x表示学生体重,以y表示身高,以p(x|y)表示身高为某个特定的y_{0}时的体重为x的概率,把熵公式用到这个特殊情况得到是熵显然应当是:

H(x,y)=-\sum_{i=1}^{n}\p(x_{i}|y_{0})log(p(x_{i}|y_{0}))

上面得到的计算公式是针对y为一个特殊值y_{0}时求得的熵。考虑到y会出现各种可能值,如果问已知学生身高时(不特指某一身高,而是泛指身高已经知道)的体重的熵(不确定程度),它应当是把前面的公式依各种y的出现概率做加权平均,那么就可以得到上面的条件熵的公式。

4、常见变形总结

进过上面的之后,应该对于信息量和信息熵的几个公式有了了解。然后那几个公式还可以变形为一些常用的公式。

复习一下概率论中的条件分布的乘法公式:

p(A|B)=\frac{p(AB)}{p(B)}

 p(AB)=p(B)p(A|B)

然后把之前条件熵式子使用上面这个公式改写一下,可以写为: 

H(x,y)=-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log\frac{p(x_{i},y_{j})}{p(y_{j})}

H(x,y)=-\int \int p(x,y)log\frac{p(x,y)}{p(y)}dxdy

当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到的时候,所对应的熵与条件熵分别称为经验熵(empirical entropy)经验条件熵(empirical conditional entropy)

上面的式子表明,只要你能够得到联合分布和y的分布就能够求出条件熵了。事实上,还能够更加简化成为常见的形式: 
这里利用上面的公式(以离散型为例子)直接推导,有:

H(x|y)=H(x,y)-H(y)

这个公式是不是简洁很多很多。只要知道联合信息熵和其中一个分量的信息熵,就能够求出条件信息熵来。 

证明:

H(x|y)\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})log\frac{p(x_{i},y_{j})}{p(y_{j})}\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})\left ( logp(x_{i},y_{j})-logp(y_{j})\right )\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(x_{i},y_{j})-p(x_{i},y_{j})logp(y_{j})\\ =-\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(x_{i},y_{j})-\left [ -\sum_{i=1}^{n}\sum_{j=1}^{m}p(x_{i},y_{j})logp(y_{j}) \right ]\\ =H(x,y)-H(y)

同样,如果求x已知时y的条件熵,显然也会得到类似的公式: 

H(y|x)=H(x,y)-H(x)

那么两个公式何并,就能够得到: 

H(y|x)+H(x)=H(x,y)=H(x|y)+H(y)

这个公式把复合熵、条件熵以及熵联系到一起了。它们也显示了熵的对称性。

5、相对熵

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 p(x)q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。

维基百科对相对熵的定义:

In the context of machine learning, DKL(P‖Q) is often called the information gain achieved if P is used instead of Q.

即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。

在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1] 。
直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。

p(x)q(x)是取值的两个概率概率分布,则p对q的相对熵(或者KL散度)为: 

D_{KL}(p||q)=\sum_{i=1}^{n}p(x_{i})log\frac{p(x_{i})}{q(x_{i})}=E_{p(x)}(\frac{p(x)}{q(x)})

在一定程度上面,相对熵可以度量两个随机分布的距离。也常常用相对熵来度量两个随机分布的距离。当两个随机分布相同的时候,他们的相对熵为0,当两个随机分布的差别增大的时候,他们之间的相对熵也会增大。 

但是事实上面,他并不是一个真正的距离。因为相对熵是不具有对称性的,即一般来说:

D_{KL}(p||q)\neq D_{KL}(q||p)

相对熵还有一个性质,就是不为负:

D_{KL}(q||p)\geq 0,D_{KL}(p||q)\geq 0

6、交叉熵

对上述相对熵(即KL散度)的公式进行变形可以得到:

D_{KL}(p||q)\\ =\sum_{i=1}^{n}p(x_{i})log\frac{p(x_{i})}{q(x_{i})}=\sum_{i=1}^{n}p(x_{i})log(p(x_{i}))-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))\\ =-H(p(x))+\left [ -\sum_{i=1}^{n}p(x_{i})log(q(x_{i})) \right ]

等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:

H(p,q)=-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}))

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即D_{KL}(y||\hat{y}),由于KL散度中的前一部分-H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用交叉熵做误差函数,评估模型。

在机器学习中,我们希望在训练数据上模型学到的分布 P(model) 和真实数据的分布 P(real) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 P(model)和训练数据的分布 P(train)尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:

  1. 希望学到的模型的分布和真实分布一致,P(model)≃P(real)
  2. 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,P(train)≃P(real)
  3. 因此,我们希望学到的模型分布至少和训练数据的分布一致,P(train)≃P(model)

根据之前的描述,最小化训练数据上的分布  P(train)与最小化模型分布 P(model) 的差异等价于最小化相对熵,即 DKL(P(train)||P(model))。此时,P(train) 就是DKL(p||q)中的 p,即真实分布,P(model) 就是 q。又因为训练数据的分布 p 是给定的,所以求  DKL(p||q) 等价于求 H(p,q)。得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使用。

7、互信息

互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不确定性。 
两个随机变量X,Y的互信息,定义为X,Y的联合分布和独立分布乘积的相对熵。

I(X,Y)=D_{KL}(P(X,Y)||P(X)P(Y))=\sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}

那么互信息有什么更加深层次的含义呢?首先计算一个式子先: 

H(X)-I(X,Y)\\ =-\sum_{x}p(x)log(p(x))-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x}(\sum_{y}p(x,y))log(p(x)-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x,y}p(x,y)log(p(x)-\sum_{x,y}p(x,y)log(\frac{p(x,y)}{p(x)p(y)})\\ =-\sum_{x,y}p(x,y)\left (log(p(x)+log(\frac{p(x,y)}{p(x)p(y)}) \right )\\ =-\sum_{x,y}p(x,y)\left (log(p(x)\cdot (\frac{p(x,y)}{p(x)p(y)}) \right )\\ =-\sum_{x,y}p(x,y)log \frac{p(x,y)}{p(y)} \\ =-\sum_{x,y}p(x,y)log(p(x|y))\\ =H(X|Y)

从这个公式可以知道,X的熵减去X和Y的互信息之后,可以得到在Y给定的情况下X的熵。

8、JS散度

因为最近在研究GAN模型,所以看到了JS散度。

KL散度的缺点是它不是距离、不对称,因此引进JS散度的概念。JS散度的定义如下:

JS(P||Q)=\frac{1}{2}KL(P(x)||\frac{P(x)+Q(x)}{2})+\frac{1}{2}KL(Q(x)||\frac{P(x)+Q(x)}{2})

其实JS散度是KL散度的一种变形,但是不同于KL主要又两方面:

(1)值域范围

JS散度的值域范围是[0,1],相同则是0,相反为1。相较于KL,对相似度的判别更确切了。

(2)对称性

即 JS(P||Q)=JS(Q||P),从数学表达式中就可以看出。

9、总结

1、信息熵是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大;信息熵推广到多维领域,则可得到联合信息熵;条件熵表示的是在 X给定条件下,Y 的条件概率分布的熵对 X的期望。

2、相对熵可以用来衡量两个概率分布之间的差异。

3、交叉熵可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。

4、交叉熵和相对熵(KL散度)的关系:D_{KL}(p||q) =-H(p)+H(p,q)

5、条件熵和联合熵的关系:H(x|y)=H(x,y)-H(y)H(y|x)=H(x,y)-H(x)

6、互信息、条件熵和联合熵三者之间的关系:H(X|Y)=H(X)-I(X,Y)I(X,Y)=H(X)-H(X|Y)

路漫漫其修远兮,咱们下一篇再见。

猜你喜欢

转载自blog.csdn.net/u013972559/article/details/85036623