交叉熵(Cross-Entropy)

交叉熵是一个在ML领域经常会被提到的名词。在这篇文章里将对这个概念进行详细的分析。

1.什么是信息量?

假设X是一个离散型随机变量,其取值集合为X,概率分布函数为p(x)=Pr(X=x),x∈X,我们定义事件X=x0的信息量为: 
I(x0)=−log(p(x0)),可以理解为,一个事件发生的概率越大,则它所携带的信息量就越小,而当p(x0)=1时,熵将等于0,也就是说该事件的发生不会导致任何信息量的增加。举个例子,小明平时不爱学习,考试经常不及格,而小王是个勤奋学习的好学生,经常得满分,所以我们可以做如下假设: 
事件A:小明考试及格,对应的概率P(xA)=0.1,信息量为I(xA)=−log(0.1)=3.3219 
事件B:小王考试及格,对应的概率P(xB)=0.999,信息量为I(xB)=−log(0.999)=0.0014 
可以看出,结果非常符合直观:小明及格的可能性很低(十次考试只有一次及格),因此如果某次考试及格了(大家都会说:XXX竟然及格了!),必然会引入较大的信息量,对应的I值也较高。而对于小王而言,考试及格是大概率事件,在事件B发生前,大家普遍认为事件B的发生几乎是确定的,因此当某次考试小王及格这个事件发生时并不会引入太多的信息量,相应的I值也非常的低。

2.什么是熵?

那么什么又是熵呢?还是通过上边的例子来说明,假设小明的考试结果是一个0-1分布XA只有两个取值{0:不及格,1:及格},在某次考试结果公布前,小明的考试结果有多大的不确定度呢?你肯定会说:十有八九不及格!因为根据先验知识,小明及格的概率仅有0.1,90%的可能都是不及格的。怎么来度量这个不确定度?求期望!不错,我们对所有可能结果带来的额外信息量求取均值(期望),其结果不就能够衡量出小明考试成绩的不确定度了吗。
即: 
HA(x)=−[p(xA)log(p(xA))+(1−p(xA))log(1−p(xA))]=0.4690 
对应小王的熵: 
HB(x)=−[p(xB)log(p(xB))+(1−p(xB))log(1−p(xB))]=0.0114 
虽然小明考试结果的不确定性较低,毕竟十次有9次都不及格,但是也比不上小王(1000次考试只有一次才可能不及格,结果相当的确定) 
我们再假设一个成绩相对普通的学生小东,他及格的概率是P(xC)=0.5,即及格与否的概率是一样的,对应的熵: 
HC(x)=−[p(xC)log(p(xC))+(1−p(xC))log(1−p(xC))]=1 
其熵为1,他的不确定性比前边两位同学要高很多,在成绩公布之前,很难准确猜测出他的考试结果。 
可以看出,熵其实是信息量的期望值,它是一个随机变量的确定性的度量。熵越大,变量的取值越不确定,反之就越确定。

对于一个随机变量X而言,它的所有可能取值的信息量的期望(E[I(x)])就称为熵。 
X的熵定义为: 
H(X)=Eplog1p(x)=−∑x∈Xp(x)logp(x) 
如果p(x)是连续型随机变量的pdf,则熵定义为: 
H(X)=−∫x∈Xp(x)logp(x)dx 
为了保证有效性,这里约定当p(x)→0时,有p(x)logp(x)→0 
当X为0-1分布时,熵与概率p的关系如下图: 
 
可以看出,当两种取值的可能性相等时,不确定度最大(此时没有任何先验知识),这个结论可以推广到多种取值的情况。在图中也可以看出,当p=0或1时,熵为0,即此时X完全确定。 
熵的单位随着公式中log运算的底数而变化,当底数为2时,单位为“比特”(bit),底数为e时,单位为“奈特”。

3.什么是相对熵?

相对熵(relative entropy)又称为KL散度(Kullback-Leibler divergence),KL距离,是两个随机分布间距离的度量。记为DKL(p||q)。它度量当真实分布为p时,假设分布q的无效性。 
DKL(p||q)=Ep[logp(x)q(x)]=∑x∈Xp(x)logp(x)q(x) 
=∑x∈X[p(x)logp(x)−p(x)logq(x)] 
=∑x∈Xp(x)logp(x)−∑x∈Xp(x)logq(x) 
=−H(p)−∑x∈Xp(x)logq(x) 
=−H(p)+Ep[−logq(x)] 
=Hp(q)−H(p) 
并且为了保证连续性,做如下约定: 
0log00=0,0log0q=0,plogp0=∞ 
显然,当p=q时,两者之间的相对熵DKL(p||q)=0 
上式最后的Hp(q)表示在p分布下,使用q进行编码需要的bit数,而H(p)表示对真实分布p所需要的最小编码bit数。基于此,相对熵的意义就很明确了:DKL(p||q)表示在真实分布为p的前提下,使用q分布进行编码相对于使用真实分布p进行编码(即最优编码)所多出来的bit数。

4. 什么是交叉熵?

交叉熵容易跟相对熵搞混,二者联系紧密,但又有所区别。假设有两个分布p,q,则它们在给定样本集上的相对熵定义如下: 
CEH(p,q)=Ep[−logq]=−∑x∈Xp(x)logq(x)=H(p)+DKL(p||q) 
可以看出,交叉熵与上一节定义的相对熵仅相差了H(p),当p已知时,可以把H(p)看做一个常数,此时交叉熵与KL距离在行为上是等价的,都反映了分布p,q的相似程度。最小化交叉熵等于最小化KL距离。它们都将在p=q时取得最小值H(p)(p=q时KL距离为0),因此有的工文献中将最小化KL距离的方法称为Principle of Minimum Cross-Entropy (MCE)或Minxent方法。 
特别的,在logistic regression中, 
p:真实样本分布,服从参数为p的0-1分布,即X∼B(1,p) 
q:待估计的模型,服从参数为q的0-1分布,即X∼B(1,q) 
两者的交叉熵为: 
CEH(p,q) 
=−∑x∈Xp(x)logq(x) 
=−[Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0)] 
=−[plogq+(1−p)log(1−q)] 
=−[yloghθ(x)+(1−y)log(1−hθ(x))] 
对所有训练样本取均值得: 
−1m∑i=1m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))] 
这个结果与通过最大似然估计方法求出来的结果一致。

5.参考链接:

维基百科关于cross-entropy的解释 
交叉熵损失函数 
UFLDL中关于logistic regression的说明 
Kraft’s inequality

 
 

交叉熵(Cross-Entropy) [转载]的更多相关文章

  1. 最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络

    最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写 ...

  2. 交叉熵cross entropy和相对熵(kl散度)

    交叉熵可在神经网络(机器学习)中作为损失函数,p表示真实标记的分布,q则为训练后的模型的预测标记分布,交叉熵损失函数可以衡量真实分布p与当前训练得到的概率分布q有多么大的差异. 相对熵(relativ ...

  3. 深度学习中交叉熵和KL散度和最大似然估计之间的关系

    机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...

  4. 『TensorFlow』分类问题与两种交叉熵

    关于categorical cross entropy 和 binary cross entropy的比较,差异一般体现在不同的分类(二分类.多分类等)任务目标,可以参考文章keras中两种交叉熵损失 ...

  5. 关于交叉熵(cross entropy),你了解哪些

    二分~多分~Softmax~理预 一.简介 在二分类问题中,你可以根据神经网络节点的输出,通过一个激活函数如Sigmoid,将其转换为属于某一类的概率,为了给出具体的分类结果,你可以取0.5作为阈值, ...

  6. TensorFlow 实战(一)—— 交叉熵(cross entropy)的定义

    对多分类问题(multi-class),通常使用 cross-entropy 作为 loss function.cross entropy 最早是信息论(information theory)中的概念 ...

  7. 【机器学习基础】交叉熵(cross entropy)损失函数是凸函数吗?

    之所以会有这个问题,是因为在学习 logistic regression 时,<统计机器学习>一书说它的负对数似然函数是凸函数,而 logistic regression 的负对数似然函数 ...

  8. 关于交叉熵损失函数Cross Entropy Loss

    1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...

  9. 【联系】二项分布的对数似然函数与交叉熵(cross entropy)损失函数

    1. 二项分布 二项分布也叫 0-1 分布,如随机变量 x 服从二项分布,关于参数 μ(0≤μ≤1),其值取 1 和取 0 的概率如下: {p(x=1|μ)=μp(x=0|μ)=1−μ 则在 x 上的 ...

  10. 熵(Entropy),交叉熵(Cross-Entropy),KL-松散度(KL Divergence)

    1.介绍: 当我们开发一个分类模型的时候,我们的目标是把输入映射到预测的概率上,当我们训练模型的时候就不停地调整参数使得我们预测出来的概率和真是的概率更加接近. 这篇文章我们关注在我们的模型假设这些类 ...

随机推荐

  1. JDK1.9环境变量配置

    JAVA_HOME C:\Program Files\Java\jdk-9.0.1 JRE_HOME C:\Program Files\Java\jre-9.0.1 PATH .;%JAVA_HOME ...

  2. MySQL(8)--Cluster 7.4 rpm centos7

    还没来得及写.我就知道一个月完毕不了,暂时添加的工作总是拖后腿. .. MySQL集群 docker下安装MySQL Cluster报错了.是我image的包少了perl.老实装吧.image又小不了 ...

  3. C语言基础(21)-C语言编译过程及GCC参数简介

    任何C语言的编译过程可分为以下三部分: 一.预编译 在C语言中,以#开头的语句又叫预编译指令.预编译主要做以下两件事情: 1.将#include包含的头文件做简单的文本替换: 2.将代码中的注释删除. ...

  4. 181. Flip Bits【easy】

    181. Flip Bits[easy] Determine the number of bits required to flip if you want to convert integer n  ...

  5. JSON串常用函数

    1.JSON.parse() parse 用于从一个字符串中解析出json 对象. 例如 var str='{"name":"cpf","age&qu ...

  6. linux下使用Stunnel配置与使用方式一例

    第一部分:stunnel的安装与配置 注:在ubuntu下,stunnel的安装很简单快捷. 在synaptic(安立得工具系统下可以直接选举安装) 在服务器环境下,直接使用apt-get insta ...

  7. AsyncTask机制学习

    其内容可以参考http://blog.csdn.net/webgeek/article/details/17298237 ,首先创建一个AsyncTask类 class GetFaceDetectTa ...

  8. c++ 判断windows系统和进程是32位还是64位

    BOOL Is64BitOS() { typedef VOID (WINAPI *LPFN_GetNativeSystemInfo)( __out LPSYSTEM_INFO lpSystemInfo ...

  9. Docker学习(2Docker基本命令 )

    1.首先我们需要明确在docker中需要了解的一些基础知识 Docker虚拟化有三个概念需要理解,分别镜像.容器.仓库. 1) 镜像:docker的镜像其实就是模板,跟我们常见的ISO镜像类似,是一个 ...

  10. hdu 4419 线段树 扫描线 离散化 矩形面积

    //离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...