背景
分类问题是机器学习任务中的一个经典任务,分类问题又分为二分类问题和多分类问题,在分类问题中,使用最多的损失函数是交叉熵损失函数(Cross Entropy Loss)。
交叉熵
交叉熵(Cross Entropy)是Shannon信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息。
在信息论中,交叉熵是表示两个概率分布p,q,其中p表示真实分布,q表示非真实分布,在相同的一组事件中,其中,用非真实分布q来表示某个事件发生所需要的平均比特数。假设现在有一个样本集中两个概率分布p,q,其中p为真实分布,q为非真实分布。假如,按照真实分布p来衡量识别一个样本所需要的编码长度的期望为:
H(p)=i∑p(i)⋅log(p(i)1)
但是,如果采用错误的分布q来表示来自真实分布p的平均编码长度,则应该是:
H(p,q)=i∑p(i)⋅log(q(i)1)
此时就将H(p,q)称之为交叉熵。对于离散变量,交叉熵的计算方式如下:
H(p,q)=i∑p(i)⋅log(q(i)1)
其中 i 为可能的值
二分类问题
对于二分类问题,我们的预测结果通常为“是(1)”或“不是(0)”。我们常在深度学习神经网络的最后一层(输出层)使用Sigmoid函数作为激活函数。
对于Sigmoid函数,
sigmoid(z)=1+e−z1
它的值域为(0, 1),刚好可以作为分类问题的预测结果为1的概率。
假设对于样本 x 预测结果 y=1 的概率为
P(y=1∣x)=y^
那么预测结果y=0的概率为
P(y=0∣x)=1−y^
那么我们预测的样本x的分布为q
|
1 |
0 |
P |
y^ |
1−y^ |
而样本x的真实分布为p
根据离散变量交叉熵的计算公式带入真实分布 p 和 预测分布 q 可得
H(p,q)=i∑p(i)⋅log(q(i)1)=p(y=0∣x)⋅log(q(y=0∣x)1)+p(y=1∣x)⋅log(q(y=1∣x)1)=ylog(y^1)+(1−y)log(1−y^1)=−[ylogy^+(1−y)log(1−y^)]
那么对m个样本,二分类问题的交叉熵损失函数可表示为
J=−m1i=1∑m[ylogy^+(1−y)log(1−y^)]
交叉熵计算的是两种分布的近似程度,在机器学习中,我们希望算法预测的分布尽可能地接近真实分布,就要想办法减小预测分布和真实分布的交叉熵。这是使用交叉熵作为损失函数的理论依据。
多分类问题
在多分类问题中,我们通常在深度学习的最后一层使用Softmax分类器来将输出结果映射到不同类型的概率上去。
假设我们的分类结果有 n 个类。最后一层(输出层)就会输出n个值.
假设对样本x最后一层输出为
(a1,a2,a3...an)
经过Softmax层处理后
yi^=softmax(ai)=∑j=1neajeai
得到
(y1^,y2^,y3^...yn^)
显然
i=1∑nyi=1
这是符合概率论,所有情况的概率加起来为1。
根据交叉熵的计算公式
H(p,q)=i∑p(i)⋅log(q(i)1)=i=1∑nyi⋅log(yi^1)=−i=1∑nyi⋅logyi^
那么对m个样本,多分类问题的交叉熵损失函数可表示为
J=−m1i=1∑mj=1∑nyj(i)⋅logyj^(i)