交叉熵理解(从信息量--熵--相对熵(KL散度)到交叉熵--对数损失函数)

在机器学习中,经常用交叉熵来衡量预测值与真实值之间的差距,要想真正理解交叉熵,我们要依次了解信息量、熵、相对熵,交叉熵实际上是相对熵的一部分。不要被这些字眼吓到,实际上我们一步步看下来还是很容易理解的。

参考博客

1、信息量。

首先我们来了解信息量,有以下两个事件
事件A:巴西队进入了2018世界杯决赛圈。
事件B:中国队进入了2018世界杯决赛圈。
直觉上来看,事件B带来的信息量更多,因为事件B发生的概率比事件A发生的概率小。由此我们可知,一个事件的信息量是与其发生的概率相关的,而且,如果一个事件发生的概率越小,当其发生了,带来的信息量就越大。假设X为一离散型随机变量, X = x 0 X=x_0 X=x0的概率表示为 p ( x 0 ) p(x_0) p(x0),那么 x 0 x_0 x0的信息量为:

I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0)=-log(p(x_0)) I(x0)=log(p(x0)) 这里的对数一般取自然对数e

2、熵

理解了信息量之后,这里给出熵的一个理解:熵是信息量的期望。
怎么理解呢?一个事件可能有多种状态,而每一种状态都有一种可能性,举例:

事件概率
电脑正常开机0.7
电脑坏掉了0.2
电脑蓝屏了0.1

对于电脑的三种状态事件,我们都可以求出一个信息量,那么熵即是这些信息量的期望。熵定义如下:

H ( x ) = − ∑ i = 1 3 p ( x i ) l o g ( p ( x i ) ) H(x)=-\sum_{i=1}^3p(x_i)log(p(x_i)) H(x)=i=13p(xi)log(p(xi))

通俗的表示,如果有n中状态,那么熵可以表示为:

H ( x ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(x)=-\sum_{i=1}^np(x_i)log(p(x_i)) H(x)=i=1np(xi)log(p(xi))

当n=2时,我们可以将熵简化为:

H ( x ) = − ∑ i = 1 2 p ( x i ) l o g ( p ( x i ) ) H(x)=-\sum_{i=1}^2p(x_i)log(p(x_i)) H(x)=i=12p(xi)log(p(xi))

= − p ( x i ) l o g ( p ( x i ) ) − ( 1 − p ( x i ) ) l o g ( 1 − p ( x i ) ) =-p(x_i)log(p(x_i))-(1-p(x_i))log(1-p(x_i)) =p(xi)log(p(xi))(1p(xi))log(1p(xi))

3、相对熵(即KL散度)

相对熵可以用来衡量同一随机变量的两种分布之间的差距。以机器学习中的三分类问题为例,假设一个样本的真实标签为1(属于1这一类),使用onehot表示即为 [ 0 , 1 , 0 ] [0,1,0] [0,1,0],则这一样本的真实分布为 p = [ 0 , 1 , 0 ] p=[0,1,0] p=[0,1,0],我们对这一个样本预测的结果表示为 q = [ 0.1 , 0.7 , 0.2 ] q=[0.1,0.7,0.2] q=[0.1,0.7,0.2],那么我们衡量 p 与 , ( x ) p与,(x) p,(x)的差异,就可以使用相对熵(即KL散度)。

D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))

n代表所有的类别数,在这个例子中n=3
这里的相对熵的计算针对的是一个样本,如果共有m个样本,则总的相对熵为:

∑ j = 1 m ∑ i = 1 n p ( x i j ) l o g ( p ( x i j ) q ( x i j ) ) \sum_{j=1}^m\sum_{i=1}^np(x_{ij})log(\frac{p(x_{ij})}{q(x_{ij})}) j=1mi=1np(xij)log(q(xij)p(xij))

4、交叉熵

还是以一个样本为例,将交叉熵进行改写:

D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p||q)=\sum_{i=1}^np(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(pq)=i=1np(xi)log(q(xi)p(xi))

= ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) =\sum_{i=1}^np(x_i)log(p(x_i))-\sum_{i=1}^np(x_i)log(q(x_i)) =i=1np(xi)log(p(xi))i=1np(xi)log(q(xi))

其实我们可以看出,第一项 ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) \sum_{i=1}^np(x_i)log(p(x_i)) i=1np(xi)log(p(xi))=-H(p(x))

因为真实值的分布我们是知道的,所以这一项是个常数值。

而第二项 − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) -\sum_{i=1}^np(x_i)log(q(x_i)) i=1np(xi)log(q(xi))就是交叉熵。同样,这里的n是类别总数。
假设样本数为m,则m个样本的交叉熵为:

∑ j = 1 m ∑ i = 1 n − p ( x i j ) l o g ( q ( x i j ) ) \sum_{j=1}^m\sum_{i=1}^n-p(x_{ij})log(q(x_{ij})) j=1mi=1np(xij)log(q(xij))

对于二分类问题,交叉熵可以简化为:

− ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) -\sum_{i=1}^np(x_i)log(q(x_i)) i=1np(xi)log(q(xi))

= − p ( x i ) l o g ( q ( x i ) ) − ( 1 − p ( x i ) ) l o g ( 1 − q ( x i ) ) =-p(x_i)log(q(x_i))-(1-p(x_i))log(1-q(x_i)) =p(xi)log(q(xi))(1p(xi))log(1q(xi))

这里说一下对数损失函数,对数损失函数是交叉熵损失函数对应于二分类问题时的特殊形式,就是上式所对应的形式。

5、单标签多分类与多标签分类中的交叉熵

在第4部分举得例子中,是单标签分类,一个样本只能属于一种类别, ∑ i = 1 n p ( x i ) = 1 \sum_{i=1}^np(x_i)=1 i=1np(xi)=1

但在多标签分类中,一个样本可能属于多种类别,多种类别是相互独立的,所以 ∑ i = 1 n p ( x i ) \sum_{i=1}^np(x_i) i=1np(xi)一般是不等于1的。

这个时候,每一种类别都计算一次对数损失函数,总的交叉熵是将每个类别计算的对数损失相加。

∑ i = 1 n − p ( x i ) l o g ( q ( x i ) ) − ( 1 − p ( x i ) ) l o g ( 1 − q ( x i ) ) \sum_{i=1}^n-p(x_i)log(q(x_i))-(1-p(x_i))log(1-q(x_i)) i=1np(xi)log(q(xi))(1p(xi))log(1q(xi))

当然,上式计算的仍然是一个样本的交叉熵。
m个样本的交叉熵为

∑ j = 1 m ∑ i = 1 n − p ( x i j ) l o g ( q ( x i j ) ) − ( 1 − p ( x i j ) ) l o g ( 1 − q ( x i j ) ) \sum_{j=1}^m\sum_{i=1}^n-p(x_{ij})log(q(x_{ij}))-(1-p(x_{ij}))log(1-q(x_{ij})) j=1mi=1np(xij)log(q(xij))(1p(xij))log(1q(xij))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值