机器学习 | 算法模型 —— 算法训练:损失函数之交叉熵(熵/相对熵/KL散度/sigmoid/softmax)

目录

1.信息论

1.1.信息量

 1.2.熵

 1.3.KL散度(相对熵)

1.4.交叉熵

2.交叉熵的类型

2.1.多分类交叉熵

2.2.二分类交叉熵

3.学习过程(以二分类为例)

3.1.第一项求偏导

3.2.第二项求偏导

3.3.第三项求导

3.4.计算结果


1.信息论

交叉熵(cross entropy)是深度学习中常用的一个概念,一般用来求目标与预测值之间的差距。同时,交叉熵也是信息论中的一个概念,要想了解交叉熵的本质,需要先从最基本的概念讲起。

1.1.信息量

首先是信息量。假设我们听到了两件事,分别如下:

  • 事件A:巴西队进入了2020世界杯决赛圈。
  • 事件B:中国队进入了2020世界杯决赛圈。

仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。所以当越不可能的事件发生了,我们获取到的信息量就越大。越可能发生的事件发生了,我们获取到的信息量就越小。那么信息量应该和事件发生的概率有关。假设X是一个离散型随机变量,其取值集合为χ,概率分布函数p(x)=Pr(X=x),x∈χp(x)=Pr(X=x),x∈χ,则定义事件X=x0X=x0的信息量为:

这里写图片描述

 1.2.熵

考虑另一个问题,对于某个事件,有n种可能性,每一种可能性都有一个概率p(xi)。这样就可以计算出某一种可能性的信息量。举一个例子,假设你拿出了你的电脑,按下开关,会有三种可能性,下表列出了每一种可能的概率及其对应的信息量:

序号事件概率p信息量I
A电脑正常开机0.7-log(p(A))=0.36
B电脑无法开机0.2-log(p(B))=1.61
C电脑爆炸了0.1-log(p(C))=2.30

熵则表示的是所有信息量的期望

因此,上述表格中的熵可计算为:

 1.3.KL散度(相对熵)

相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度来衡量这两个分布的差异(换个角度来说,也是两个分布的相似度)。即如果用P来描述目标问题,而不是用Q来描述目标问题,得到的信息增量。在机器学习中,P往往用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1],直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。
KL散度计算公式

 上述公式中,n表示事件的所有可能性。KL单独的值越小,表明两个分布之间越相似。

1.4.交叉熵

对KL散度进行变形可得:

 等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵

在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即DKL(y||y^),由于KL散度中的前一部分−H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型

2.交叉熵的类型

交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid(或softmax)函数一起出现。

2.1.多分类交叉熵

多分类任务中输出的是目标属于每个类别的概率,所有类别概率的和为1,其中概率最大的类别就是目标所属的分类。 而softmax函数能将一个向量的每个分量映射到[0,1]区间,并且对整个向量的输出做了归一化,保证所有分量输出的和为1,正好满足多分类任务的输出要求。所以,在多分类中,在最后就需要将提取的到特征经过softmax函数的,输出为每个类别的概率,然后再使用交叉熵 作为损失函数。softmax函数定义如下:

其中输入向量为Z=[z1,z2,z3, ... , zk](k = 1,2,3 ... n)。直观的变换过程如下图所示:

通过前面的特征提取到的特征向量为(z1,z2,…,zk) ,将向量输入到softmax函数中,即可得到目标属于每个类别的概率,概率最大的就是预测得到的目标的类别。使用softmax函数可以将特征向量映射为所属类别的概率,可以看作是预测类别的概率分布q(ci),有:

 其中,ci为某个类别。设训练数据中类别的真实概率分布为p(ci) ,那么目标分布p(ci)和预测分布q(ci)的交叉熵为:

【引例】

每个训练样本所属的类别是已知的,并且每个样本只会属于一个类别(概率为1),属于其他类别概率为0。具体的,可以假设有个三分类任务,三个类分别是:猫,猪,狗。现有一个训练样本类别为猫,则有:

通过预测得到的三个类别的概率分别为:q(cat)=0.6,q(pig)=0.2,q(dog)=0.2,计算p 和q的交叉熵为:

利用这种特性,可以将样本的类别进行重新编码,就可以简化交叉熵的计算,这种编码方式就是OneHot编码。以上述实例为例:

 

通过这种编码方式,在计算交叉熵时,只需要计算和训练样本对应类别预测概率的值,其他的项都是 0 * log q(ci) = 0,具体的,交叉熵计算公式变成如下: 

其中ci为训练样本对应的类别,上式也被称为负对数似然(negative log-likelihood,nll) 

2.2.二分类交叉熵

多分类中使用softmax函数将最后的输出映射为每个类别的概率,而在二分类中则通常使用sigmoid将输出映射为正样本的概率。这是因为二分类中,只有两个类别:{正样本,负样本},只需要求得正样本的概率q,则1−q就是负样本的概率。sigmoid函数的表示形式如下:

 sigmoid的输入为Z={z1, z2} ,其输出元素的值为(0,1)范围内的值,可以表示分类为正样本的概率。二分类的交叉熵可以看作是交叉熵损失的一个特列,交叉熵为:

由于二分类仅有两个分类x1和x2,则有:

 因为只有两个选择,则有p(x1)+p(x2)=1,q(x1)+q(x2)=1。设,训练样本中x1的概率为p,则x2为1−p; 预测的x1的概率为q,则x2的预测概率为1−q 。则上式可改写为:

也就是二分类交叉熵的损失函数。 

3.学习过程(以二分类为例)

如上图所示,求导过程可分成三个子过程,即拆成三项偏导的乘积:

3.1.第一项求偏导

3.2.第二项求偏导

3.3.第三项求导

3.4.计算结果

得到了上述最终的偏导结果之后,接下来只需要基于反向传播的误差、学习速率、原始权重和上述公式便可以计算出更新之后的权重。

参考博客:https://zhuanlan.zhihu.com/p/35709485

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博士僧小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值