交叉熵、熵和相对熵的通俗易懂解释

版权声明:本文为博主原创文章,未经博主允许不得转

交叉熵(Cross-Entropy)

交叉熵是一个在机器学习领域经常提到的概念。它经常用作代价(损失)函数,而均方误差或平均绝对误差在使用梯度优化的方法时往往效果不佳,一些饱和的神经网络输出单元结合这些代价函数时会产生非常小的梯度,这也是交叉熵代价函数比均方误差或平均绝对误差更受欢迎的原因。在学习交叉熵之前,我们先来了解下其他的基础概念:

1.什么是自信息(self-information)?

定义:假设X是一个离散型随机变量,其取值集合为χ,概率分布函数为p(x)=P(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.什么是熵(Entropy)?

定义:对于一个随机变量X而言,它的所有可能取值的信息量的期望(E[I(x)])就称为熵。
X是离散的:

H(X)=E[I(x)]=xXp(x)logp(x)

X是连续的随机变量:熵定义为:
H(X)=xXp(x)logp(x)dx

自信息只能处理单个的输出。而熵是对整个概率分布中不确定性总量进行量化。

约定:p=0时,定义0log0=0。通常对数以2为底或者e为底,这是熵的单位称作比特(bit)或者纳特(nat)
当随机变量只取两个值的时候,即X分布为:P(X=1)=pP(X=0)=1p0<=p<=1
此时,熵随p的变化为:

交叉熵、熵和相对熵的通俗易懂解释
图为分布为伯努利分布时,熵和概率的关系

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

3.什么是相对熵(又称KL散度)?

相对熵(relative entropy)又称为KL散度(Kullback-Leibler divergence),KL距离,是对同一个随机变量X的两个单独的概率分布的度量。记为DKL(p||q)。它度量当真实分布为p时,假设分布q的无效性。

DKL(p||q)=Ep[logp(x)q(x)]=xχp(x)logp(x)q(x)
=xχ[p(x)logp(x)p(x)logq(x)]
=xχp(x)logp(x)xχp(x)logq(x)
=H(p)xχp(x)logq(x)
=H(p)+Ep[logq(x)]
=Hp(q)H(p)

并且为了保证连续性,做如下约定:
0log00=00log0q=0plogp0=
显然,当p=q时,两者之间的相对熵DKL(p||q)=0
上式最后的Hp(q)表示在p分布下,使用q进行编码需要的bit数,而H(p)表示对真实分布p所需要的最小编码bit数。基于此,相对熵的意义就很明确了:DKL(p||q)表示在真实分布为p的前提下,使用q分布进行编码相对于使用真实分布p进行编码(即最优编码)所多出来的bit数。

重要性质 :
1.它是非负的。
2.不是对称的:对于某些P和Q,DKL(p||q)不等于DKL(q||p),这样意味着选择DKL(p||q)还是DKL(q||p)影响很大

4.什么是交叉熵(Cross-Entropy)?

交叉熵容易跟相对熵搞混,二者联系紧密,但又有所区别。假设有两个分布p,q则它们在给定样本集上的交叉熵定义如下:

CEH(p,q)=Ep[logq]=xχp(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

特别的,在logistic regression中
p:真实样本分布,服从参数为p的0-1分布,即X∼B(1,p)
q:待估计的模型,服从参数为q的0-1分布,即X∼B(1,q)
两者的交叉熵为:

CEH(p,q)
=xχp(x)logq(x)
=[Pp(x=1)logPq(x=1)+Pp(x=0)logPq(x=0)]
=[plogq+(1p)log(1q)]
=[yloghθ(x)+(1y)log(1hθ(x))]

对所有训练样本取均值得:
(1/m)i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

这个结果与通过极大似然估计方法求出来的结果是一致的;最小化交叉熵损失函数等价于求极大似然估计;从二者的公式来看,只是差了一个负号而已。

那么LR的损失函数为什么不用平方损失呢?因为平方损失函数不是凸函数,使用梯度下降法无法求得局部最小(全局最小),而交叉熵损失函数是凸函数,使用梯度下降法可以找到全局最优解。

5.参考链接:

交叉熵
*关于cross-entropy的解释
交叉熵损失函数
UFLDL中关于logistic regression的说明
Kraft’s inequality
Visual Information

喜欢请点赞!