分类任务在几乎所有的视觉任务中都有涉及,无论是图像分类还是目标检测,实例分割,语义分割,全景分割,人脸识别等等。

二分类交叉熵损失函数

首先以二分类任务进行举例,假设我们正在使用深度学习方法进行判断肿瘤是否为恶性的分类任务(恶性为1,否则为0,反之也可以,但是在整个训练的过程中要保持定义的一致性),对于网络的输出分类损失 - 图1,其中上标分类损失 - 图2表示输出维度为1,我们首先对该输出进行sigmoid激活,即:
分类损失 - 图3
其中分类损失 - 图4
基于此,我们继续定义二分类交叉熵损失函数, 对于一个含有m个样本的batch分类损失 - 图5来说,损失函数为:
分类损失 - 图6
其中分类损失 - 图7是ground truth,即分类的真实值,当分类损失 - 图8是1时,优化二分类交叉熵损失会将增大分类损失 - 图9,使其向1接近,反之则会减小分类损失 - 图10,使其向0接近,从而达到正确预测的目的。

多分类交叉熵损失

由二分类交叉熵损失函数进行扩展,当交叉熵损失函数用于多分类任务时,即为多分类交叉熵损失函数。以图像分类为例,当我们进行n(此处以10为例)个类别的预测时,搭建的分类网络的输出层的维度就为n,首先对网络的输出层的输出做softmax操作(有人将softmax称作激活函数,我的理解是softmax并不能称作激活函数,因为softmax虽然有非线性的性质,但是每个输出的softmax是与其他输出相关联的,我们熟知的ReLU,leakyReLU,sigmoid等都是对网络层输出的直接作用,而与其他输出没有关系)。在下图所示的全连接网络中(图片来自作图工具http://alexlenail.me/NN-SVG/index.html
image.png
我们以输出维度分类损失 - 图12进行举例,可以想象正在进行MNIST手写光学数字字符分类任务,softmax函数写作:
分类损失 - 图13
从上式可以看出softmax函数的一个作用就是将输出归一化,经过softmax函数之后的输出:

  1. 均为正数
  2. 均位于(0, 1)区间内,且其和为1

因此可以将该输出看做对于每一个分类的预测概率,概率最高者自然就是神经网络认为的最有可能的分类。基于此,在ImageNet 1000 类图像分类任务中,常用的Top1精度或者Top5精度,即可做出如下解释:
计算Top1精度时,对于一张测试图像,如果概率最大的类别与ground truth匹配,则认为分类正确,为True Positive,而计算Top5精度时,如果概率最大的前五个类别中存在与ground truth匹配者,则认为分类正确,为True Positive,这也是为什么Top1精度比Top5精度要低。
计算出输出向量的softmax之后,就可以进行交叉熵损失的计算了:
分类损失 - 图14
其中,分类损失 - 图15是当前图像中的正样本数量,分类损失 - 图16是分类总数,因为在使用one-hot编码时,当分类损失 - 图17时才有上式成立,所以可以将公式(4)简化为(感觉这里不应该这么写,应该有更好的表达):
分类损失 - 图18

Label Smoothing

谈到分类任务绕不开的话题就是label smoothing(标签平滑)技术,label smoothing的作用在论文(http://www.cs.toronto.edu/~hinton/absps/smoothing.pdf)中具有详细的总结,对于图像分类任务来说,标签平滑可以

label smoothing将one-hot编码方式进行了“软化”,即对于one-hot编码方式分类损失 - 图19
,不将当前类对应的索引处的编码设置为1,而是选择一个label smoothing参数分类损失 - 图20,将其设置为分类损失 - 图21,其他的类则设置为分类损失 - 图22,其中K是类的总数量,综上label smoothing的编码方式为分类损失 - 图23.
由以上叙述可知,在使用label smoothing时,计算交叉熵损失的过程如下式:
分类损失 - 图24