交叉熵损失函数

交叉熵(Cross Entropy)是与均值误差(MSE)一样常用的损失函数,用在分类中。

一、分类的损失函数

为什么我们选择交叉熵作为损失函数呢?它与其他的损失函数相比有什么好处呢?我们用下面的例子来说明:
我们训练一个简单的神经网络,来判断图片中的动物是猫、狗还是兔子,用独热码表示最后结果。
模型一

正确答案 猫概率 狗概率 兔子概率 预测
猫(1 0 0) 0.8 0.1 0.1 猫(1 0 0)
狗(0 1 0) 0.05 0.9 0.05 狗(0 1 0)
兔子(0 0 1) 0.4 0.3 0.3 猫(1 0 0)
模型二
正确答案 猫概率 狗概率 兔子概率 预测
猫(1 0 0) 0.6 0.2 0.2 猫(1 0 0)
狗(0 1 0) 0.25 0.7 0.05 狗(0 1 0)
兔子(0 0 1) 0.8 0.15 0.05 猫(1 0 0)
我们可以看到,尽管最后两个模型的输出完全一样,但从概率上看,模型一的表现要比模型二更好。
1.分类错误率

最朴素的一种定义方式,是直接计算分类错误的数量占总数量的百分比,即
C l a s s i f i c a t i o n   E r r o r = n u m b e r   o f   e r r o r t o t a l   n u m b e r Classification\ Error = \frac{number\ of\ error}{total\ number} Classification Error=total numbernumber of error上面两个模型的分类错误率都是 1 3 \frac{1}{3} 31,这样的损失函数无法判断出哪个模型表现更加优异。

2. 均方误差

均方误差一般用于回归,然而它也能用在分类中,我们把每个类别的独热码当作真实值,把概率当作预测值,来计算每个样本的误差,再求平均值,即 M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n(\hat y_i-y_i)^2 MSE=n1i=1n(y^iyi)2模型一
样本一 M S E 11 = 1 3 [ ( 1 − 0.8 ) 2 + ( 0 − 0.1 ) 2 + ( 0 − 0.1 ) 2 ] = 0.02 MSE_{11}=\frac{1}{3}[(1-0.8)^2+(0-0.1)^2+(0-0.1)^2]=0.02 MSE11=31[(10.8)2+(00.1)2+(00.1)2]=0.02
样本二 M S E 12 = 1 3 [ ( 0 − 0.05 ) 2 + ( 1 − 0.95 ) 2 + ( 0 − 0.05 ) 2 ] = 0.0025 MSE_{12}=\frac{1}{3}[(0-0.05)^2+(1-0.95)^2+(0-0.05)^2]=0.0025 MSE12=31[(00.05)2+(10.95)2+(00.05)2]=0.0025
样本三 M S E 13 = 1 3 [ ( 0 − 0.4 ) 2 + ( 0 − 0.3 ) 2 + ( 1 − 0.3 ) 2 ] = 0.247 MSE_{13}=\frac{1}{3}[(0-0.4)^2+(0-0.3)^2+(1-0.3)^2]=0.247 MSE13=31[(00.4)2+(00.3)2+(10.3)2]=0.247
模型总误差 M S E 1 = 1 3 ( M S E 11 + M S E 12 + M S E 13 ) = 0.0897 MSE_1 = \frac{1}{3}(MSE_{11}+MSE_{12}+MSE_{13})=0.0897 MSE1=31(MSE11+MSE12+MSE13)=0.0897
模型二
样本一 M S E 21 = 1 3 [ ( 1 − 0.6 ) 2 + ( 0 − 0.2 ) 2 + ( 0 − 0.2 ) 2 ] = 0.08 MSE_{21}=\frac{1}{3}[(1-0.6)^2+(0-0.2)^2+(0-0.2)^2]=0.08 MSE21=31[(10.6)2+(00.2)2+(00.2)2]=0.08
样本二 M S E 22 = 1 3 [ ( 0 − 0.25 ) 2 + ( 1 − 0.7 ) 2 + ( 0 − 0.05 ) 2 ] = 0.0517 MSE_{22}=\frac{1}{3}[(0-0.25)^2+(1-0.7)^2+(0-0.05)^2]=0.0517 MSE22=31[(00.25)2+(10.7)2+(00.05)2]=0.0517
样本三 M S E 23 = 1 3 [ ( 0 − 0.8 ) 2 + ( 0 − 0.15 ) 2 + ( 1 − 0.05 ) 2 ] = 0.5217 MSE_{23}=\frac{1}{3}[(0-0.8)^2+(0-0.15)^2+(1-0.05)^2]=0.5217 MSE23=31[(00.8)2+(00.15)2+(10.05)2]=0.5217
模型总误差 M S E 2 = 1 3 ( M S E 21 + M S E 22 + M S E 23 ) = 0.2178 MSE_2 = \frac{1}{3}(MSE_{21}+MSE_{22}+MSE_{23})=0.2178 MSE2=31(MSE21+MSE22+MSE23)=0.2178

我们可以看到,由于我们引进对概率的计算,模型一的均方误差要小于模型二的均方误差。然而,我强烈不建议把MSE当作分类的损失函数,有以下两个原因:一是MSE用作分类的时候,训练刚开始的时候梯度下降的速度非常缓慢;二是并不是所有分类模型的MSE都是凸问题,因此深度学习的优化器表现会非常糟糕。下面我们来介绍比MSE在分类中更好用的交叉熵。

二、交叉熵的推导

交叉熵是信息论中的内容,我们从最基础的概念开始推导。

1. 信息量

一件事情可以包含多少信息呢?显而易见的事情大家都明白,不会包含很多信息;相反,出现概率越小的事情,就越违背人的直觉,也包含了越多的信息。例如:期中考试以往班上的第一名考了第一名,这件事在常人看来是正常的;而班级的最后一名考了第一名,蕴含了许多的信息——或许是他十分努力,奋发图强,或是他在课外和补习班老师上课,等等,都作为隐藏的信息,包含在这个事件当中。因此我们发现,一件事情的信息量与其发生的概率有关。
我们设离散随机变量 X X X为事件, χ \chi χ为其取值范围, p ( x ) = P r ( X = x ) , x ∈ χ p(x)=Pr(X=x),x\in \chi p(x)=Pr(X=x),xχ为事件 x x x发生的概率,我们定义 X = x 0 X=x_0 X=x0的信息量为(注:所有对数的底都是自然对数 e e e): I ( x 0 ) = − log ⁡ ( p ( x 0 ) ) I(x_0)=-\log(p(x_0)) I(x0)=log(p(x0))

2.信息熵

为什么我们要为事件 X X X定义一个取值范围呢?因为一件事情可能有各种各样的可能性,而 χ \chi χ代表了事件发生所有的可能性。例如:我打开了电脑,

事件 概率
电脑正常开机 0.95
电脑黑屏,无法启动 0.04
电脑爆炸了 0.01
信息熵的定义是,所有事件的信息量乘上概率的期望,即
H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ ( p ( x i ) ) H(X)=-\sum_{i=1}^np(x_i)\log(p(x_i)) H(X)=i=1np(xi)log(p(xi))在上面的例子中,我们的信息熵为 H ( X ) = − ( 0.95 × log ⁡ ( 0.95 ) + 0.05 × log ⁡ ( 0.05 ) + 0.01 × log ⁡ ( 0.01 ) ) H(X)=-(0.95\times \log(0.95)+0.05\times \log(0.05)+0.01 \times \log(0.01)) H(X)=(0.95×log(0.95)+0.05×log(0.05)+0.01×log(0.01))
有的问题只有两个可能性(例如扔硬币),服从伯努利分布,可以将信息熵的公式简化为:
p ( 0 ) = p ,   p ( 1 ) = 1 − p p(0)=p,\ p(1)=1-p p(0)=p, p(1)=1p

H ( X ) = − ∑ i = 1 n p ( x i ) log ⁡ ( p ( x i ) ) = − ( p log ⁡ p + ( 1 − p ) log ⁡ ( 1 − p ) ) = − p log ⁡ p − ( 1 − p ) log ⁡ ( 1 − p ) \begin{aligned} H(X) &=-\sum_{i=1}^np(x_i)\log(p(x_i))\\ &=-(p\log p+ (1-p)\log(1-p))\\ &= -p\log p-(1-p)\log(1-p) \end{aligned} H(X)=i=1np(xi)log(p(xi))=(plogp+(1p)log(1p))=plogp(1p)log(1p)

3. 相对熵/KL散度

不同事件在不同的条件下发生的概率是不同的,比如夏天和冬天买雪糕的概率是不同的。假设对于一个事件 X X X,有两个概率分布 P ( X ) P(X) P(X) Q ( X )

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值