社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习面试之各种混乱的熵

架构文摘 • 7 年前 • 828 次点击  

请听题:什么是熵?什么是交叉熵?什么是联合熵?什么是条件熵?什么是相对熵?它们的联系与区别是什么?


如果你感到回答这些问题有些吃力,对这些概念似乎清楚,似乎又没有那么明白,那这篇文章就是为你准备的。


1 从随机变量说起

假设有一枚硬币,将其抛出,落下后朝上的面为y。

这里的y是对未知量的一个表示。但它的值却是不确定的,可能取正面和反面两个值。

类似的不确定变量还有好多,比如说,将人的身高设为z,z中也包含了不确定性,因为不同的人身高是不一样的。

这类包含不确定性的变量我们称为随机变量。统计学就是研究这类不确定性变量的工具。

刻画随机变量最有力的一个工具就是它的概率分布。关于什么是概率分布,这里就不多说了,可以百度百科。

有了概率分布,我们可以说对一个随机变量有了完全的掌握,因为我们可以知道它可能取哪些值,某个值的概率是多少。

以上,是对基础知识的简单复习,下面开始进入正题。

2 什么是熵?

上面,我们知道,概率分布是对随机变量的刻画,不同的随机变量有着相同或不同的概率分布,熵,就是对不同概率分布的刻画!

为什么我们还需要对不同的概率分布进行刻画?

本质上,是为了描述不确定的程度,并以此对不同的概率分布进行比较。

请允许我举个栗子。

假如我告诉你,我有两枚硬币,一个上抛一次正面朝上概率是0.5,另一个是0.8。此时,假设两枚硬币上抛一次落下后朝上的面分别是x,y。

此时,我们可以很容易确定随机变量x,y的概率分布,并借此对两个随机变量有准确的掌握。

但我们要问,这两个随机变量哪个更随机?或者说,哪个随机变量包含的不确定性更大?

如果发挥直觉,我们可以感觉到,正面朝上概率为0.8的概率分布不确定性小于正面朝上概率为0.5的不确定性。

进一步思考,我们为什么会有这样的直觉?

因为我们是从“使用”概率分布的角度来思考问题的。也就是说,如果我们知道一枚硬币抛出后正面朝上概率为0.8,要比知道概率为0.5,更容易猜对硬币抛出后哪面朝上。

换句话说,0.8的概率分布比0.5的概率分布对我们来说,具有更大的信息量。

现在,我们对概率分布中的不确定性有了感性的认识,现在需要的是一个定量的指标,来衡量这个不确定性。想必你已经猜到了,这个指标就是熵。


3 熵的数学表达

熵应该是什么样子,才能表达出概率分布中的不确定性呢?

为了解决这个问题,我们来考察一下概率分布中的某个取值,以抛硬币为例,我们看正面这个取值。可以看到,取正面的概率越大,则不确定性就越小。概率越大,不确定性越小!请把这句话在心中默念三遍。

能够表达出概率越大,不确定性越小的表达式就是:

-logP

为了让大家有一个感性的认识,我特意画了一个图:


上图中的纵轴为-logP,横轴为P。

然后,我们继续思考,上面的-logP只是衡量了某个概率的不确定性,一个概率分布包含多个概率,而且概率相加等于1,一个概率大,必然会有其他的概率小。还是以抛硬币为例,0.8概率的正面,不确定性固然很小,但同时会造成反面的概率为0.2,不确定性比较大。这意味着,我们猜对一次抛硬币正面朝上的难度比较小,但要猜对一次反面朝上的难度就比较大。很显然,我们要衡量一个概率的分布的不确定性,就要综合衡量所有概率表达的不确定性。也就是求一个概率分布综合的不确定性。当当当当当!熵正式出场!

-∑PlogP

这个指标可以理解成概率分布的不确定性的期望值。这个值越大,表示该概率分布不确定性越大。它为我们人类提供的“信息”就越小,我们越难利用这个概率分布做出一个正确的判断。从这个角度,我们可以看到,熵是对概率分布信息含量的衡量,这与它是不确定性的衡量,其实是两种解读方式而已。


4 伯努利分布的熵

对于抛硬币判正反面来说,它的概率分布是伯努利分布,我们假设正面朝上的概率为p,则反面朝上的概率为(1-p),它的熵就是:

H(p) = -plogp -(1-p)log(1-p)

我们把它画出来就是这样。




可以看到,p=0.5时,伯努利分布的熵达到最大。这与我们的经验常识一致,因为此时,硬币朝上还是朝下完全是随机的,不确定性最大。

当p趋向于0时,熵也趋向于0,举个极端例子,如果硬币以概率1正面朝上,概率0反面朝上,则完全没有不确定性,所以熵就是0,因为熵是对不确定性的一个测量。

再来思考一个问题,我们说熵是描述不确定性的,在概率论中,不是有一个方差可以用来描述变量变化程度的吗,它和熵是什么关系呢?

直觉上,方差越大,不确定性就越大,熵就应该越大,事实上确实如此,请看下图:


variance_entropy


对我们投硬币的伯努利分布,方差pq的最大值在p=0.5时取得,由上文我们知道,这也是熵取得最大值的p值。

对于正态分布,我们可以看到,期望对熵没有影响,只有方差才对熵有影响。这于我们的直觉也是相符的。

以上,我们尽可能从直觉的角度分析出了熵的表达式,也查看了几种分布的熵,以及它们和该分布的方差的关系,发现二者要描述的含义具有内在一致性。至此,我们终于可以说一窥熵的庐山真面目了。

下面,我们开始讨论由熵引出的各种其他熵,也就是本文文首提出的那些。


5 联合熵

虽然文首提出了那么多熵,但它们之间是有内在联系的,所以,我们尽可能按照它们的内在关系开展学习,先从联合熵说起。

联合熵与联合概率分布有关,对于随机变量X和Y,二者的联合概率分布为p(x,y),则这个联合概率分布的熵就叫做联合熵:

H(x,y) = -Σp(x,y)log(p(x,y))

我们假设X和Y都服从伯努利分布,且相互独立,可以把二者想象为上面的抛硬币,这样思考可以有所依托,不至于太抽象。X正面朝上的概率为p1,Y正面朝上的概率为p2,那么,它们的联合熵是多少呢?

显然,我们需要找出联合概率分布,如下图所示:


association


上面就是联合分布,自然可以据此算出它的熵,由于表达式写出来太麻烦,这里就省去了,感兴趣的可以自己写一下。

我们关心的问题是,H(x,y)和H(x),H(y)有什么关系呢?

这里不想进行繁杂的数学证明,而是要继续用我们的直觉来帮助思考。查看上图,我们和Y的概率分布进行对比。

Y原先只有两个概率p2和(1-p2),联合分布却有四个概率,这四个概率又可以认为是将Y的每个概率进行了分拆,p2 被分成了p2\*p1和p2\*(1-p1)。也就是说,对于Y的每个取值,本身就具有一个不确定性(p2),由于要与X联合起来,就在每个取值的不确定性上又引入了不确定性,不确定性显然是增大了。

如果你理解了上面关于熵的含义,那么,不难想出,H(x,y)肯定是大于等于H(x)和H(y)的。仅当X没有不确定性时,比如永远是正面朝上,此时,在Y的基础上联合X,并没有引入新的不确定性,所以,H(x,y)=H(y)。

以上,我们没有运用数学,仅仅依靠感性直觉的思考就确定了联合熵的一些性质,可见,善于运用直觉是很重要的。


6 条件熵

现在我们知道,x,y的联合熵大于等于x和y单独的熵,对于y来说,引入的x增大了熵,那么,x的引入增加了多大的熵呢?这就是条件熵。

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

这里,有一个容易搞错的地方,H(x|y)叫做条件熵,它可不是条件概率p(x|y)的熵。为啥?因为p(x|y)压根就不是一个概率分布!!!还是以上面的两枚硬币为例,我们来计算一下p(x|y),注意,我们的例子中**假设x,y是相互独立的**。


condition


可见,所有的P(x|y)相加是2,根本就不是一个概率分布。有人可能会说,那为什么要叫条件熵,这不是故意误导人吗!

这是因为,条件熵的计算,和条件概率还是有点关系的。如下:

H(x|y) = - Σp(x,y)log(p(x|y))

这个公式可以由上面的熵的定义和条件熵的定义推导得出,这里就不推导了,感兴趣的可以自己推导下,并不难。

这里我们再分析一下条件熵H(x|y)与H(x)的关系,仍然用直觉法。条件熵是在Y上引入X后增加的不确定性,从感觉上,增加的不确定性无论如何不可能大于X本身自有的不确定性,也就是:

H(x|y) <= H(x)

仅当x,y相互独立时,等号才成立。

这个结论是我们感性认识到的,事实上,也可以进行证明得到。

学习过《统计学习方法》的同学,肯定对里面的信息增益概念有所了解,其实,我们仍然可以用直觉来理解这个概念。

不过,我们需要换种方式解读H(x|y) <= H(x)

之前,我们得出这个结论,是说Y上引入的X增加的不确定性不能大于X本身的不确定性。换个角度,X原有的不确定性是H(x),现在我们引入Y,得到了联合的不确定性H(x,y),从这个不确定性中减去Y自身带来的不确定性H(Y),剩下的就是H(x|y),这个值小于等于H(x),说明什么?说明,由于Y的引入,X的不确定性变小了,不确定性变小,就是信息含量的增加。不确定性变小的多少就是信息增益:

gain(X) = H(x) - H(x|y)

信息增益也叫做互信息。二者完全一样。


Note:

这里简单说下我对李航书的看法,一句话:不适合用来入门!只适合用来提高和面试准备。我意见比较大的是对逻辑回归的推导,不优雅。回头,我会专门写一篇逻辑回归的推导文章。


7 相对熵(又叫互熵,KL散度)

把相对熵放到最后来讲,是因为它和前面的几个概念联系不大。

假设我们有如下5个样本:



huxinxi


我们要以此推导出标签的真实分布。假设标签的真实分布是q(x),x取值为1和-1

为了确定q(x)在x=1和x=-1处的值,我们当然要运用最大似然法则。最大似然函数是:

q(x=1)\*q(x=1)\*q(x=-1)\*q(x=-1)\*q(x=-1)

如果你最大似然函数理解上有困难,建议补充一下这方面的知识,因为这个知识点在机器学习中运用的太多,确实无法绕过,逻辑回归本质上也是用的最大似然函数。

对上面的式子做合并处理,得到:

q(x=1)^2\*q(x=-1)^3

进一步,对上面的式子开5次方,得到:

q(x=1)^(2/5)\*q(x=-1)^(3/5)

假设p(x)就是由样本中统计出来的标签分布

2/5就是p(x=1)

3/5就是p(x=-1)

所以,对上面的式子进行规整就得到最大似然函数最终表达式:

Πq(x)^(p(x))

再取对数就是

Σp(x)log(q(x))

再取负号就是

d= -Σp(x)log(q(x))

最大化似然函数就是最小化d。

心急的朋友可能在想,说了半天,互熵到底是啥?现在就给出定义:

D(q||p) = d - H(p)

这里的d就是我们上面得到的d。

互熵描述的是什么呢?如何从直觉上进行理解?毕竟,上面用最大似然推出互熵还是有点太数学了。

这里,我们需要观察一下d,假设q和p完全相同,那么d就是H(p),互熵D也就等于0了。

同理,q和p越接近,越相同,则D就越小。互熵D(q||p)实际上就是在衡量我们通过计算得出的真实分布的表达式q,究竟与由样本统计得来的分布p有多接近,在衡量多接近这个概念时,我们运用到了熵的形式。


8 交叉熵

交叉熵放到最后,因为它最简单,它就是上面得出的d!

我们可以体会一下为什么叫做交叉熵,交叉是什么含义?

d= -Σp(x)log(q(x))

原本,p的熵是-Σp(x)log(p(x)),q的熵是-Σq(x)log(q(x))

现在,把p熵的log成分换成q(x), q熵的log成分换成p(x),(这里做了一个“交叉”!)就是

d= -Σp(x)log(q(x))      d2 = -Σq(x)log(p(x))

 d 就是p和q的交叉熵,

d2就是q和p的交叉熵。

从中我们也体会到,交叉熵是不满足交换律的,也就是说p和q的交叉熵与q和p的交叉熵是不一样的。


9 无总结,不进步

以上,是我对各种熵的概念的一些理解和感悟,分享出来,希望能够帮助到需要的朋友,当然,由于是个人理解,难免有不到位,甚至错误的地方,还望各路大神多多批评指正!


出处:https://www.jianshu.com/p/09b70253c840


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。



架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据丨机器学习

更多精彩文章,请点击下方:阅读原文


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/K29BTdIaGx
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/6668
 
828 次点击