分类任务在几乎所有的视觉任务中都有涉及,无论是图像分类还是目标检测,实例分割,语义分割,全景分割,人脸识别等等。
二分类交叉熵损失函数
首先以二分类任务进行举例,假设我们正在使用深度学习方法进行判断肿瘤是否为恶性的分类任务(恶性为1,否则为0,反之也可以,但是在整个训练的过程中要保持定义的一致性),对于网络的输出,其中上标
表示输出维度为1,我们首先对该输出进行sigmoid激活,即:
其中。
基于此,我们继续定义二分类交叉熵损失函数, 对于一个含有m个样本的batch来说,损失函数为:
其中是ground truth,即分类的真实值,当
是1时,优化二分类交叉熵损失会将增大
,使其向1接近,反之则会减小
,使其向0接近,从而达到正确预测的目的。
多分类交叉熵损失
由二分类交叉熵损失函数进行扩展,当交叉熵损失函数用于多分类任务时,即为多分类交叉熵损失函数。以图像分类为例,当我们进行n(此处以10为例)个类别的预测时,搭建的分类网络的输出层的维度就为n,首先对网络的输出层的输出做softmax操作(有人将softmax称作激活函数,我的理解是softmax并不能称作激活函数,因为softmax虽然有非线性的性质,但是每个输出的softmax是与其他输出相关联的,我们熟知的ReLU,leakyReLU,sigmoid等都是对网络层输出的直接作用,而与其他输出没有关系)。在下图所示的全连接网络中(图片来自作图工具http://alexlenail.me/NN-SVG/index.html)
我们以输出维度进行举例,可以想象正在进行MNIST手写光学数字字符分类任务,softmax函数写作:
从上式可以看出softmax函数的一个作用就是将输出归一化,经过softmax函数之后的输出:
- 均为正数
- 均位于(0, 1)区间内,且其和为1
因此可以将该输出看做对于每一个分类的预测概率,概率最高者自然就是神经网络认为的最有可能的分类。基于此,在ImageNet 1000 类图像分类任务中,常用的Top1精度或者Top5精度,即可做出如下解释:
计算Top1精度时,对于一张测试图像,如果概率最大的类别与ground truth匹配,则认为分类正确,为True Positive,而计算Top5精度时,如果概率最大的前五个类别中存在与ground truth匹配者,则认为分类正确,为True Positive,这也是为什么Top1精度比Top5精度要低。
计算出输出向量的softmax之后,就可以进行交叉熵损失的计算了:
其中,是当前图像中的正样本数量,
是分类总数,因为在使用one-hot编码时,当
时才有上式成立,所以可以将公式(4)简化为(感觉这里不应该这么写,应该有更好的表达):
Label Smoothing
谈到分类任务绕不开的话题就是label smoothing(标签平滑)技术,label smoothing的作用在论文(http://www.cs.toronto.edu/~hinton/absps/smoothing.pdf)中具有详细的总结,对于图像分类任务来说,标签平滑可以
- 防止过拟合
- 优化模型校准(模型校准的概念见https://zhuanlan.zhihu.com/p/325834653)
label smoothing将one-hot编码方式进行了“软化”,即对于one-hot编码方式
,不将当前类对应的索引处的编码设置为1,而是选择一个label smoothing参数,将其设置为
,其他的类则设置为
,其中K是类的总数量,综上label smoothing的编码方式为
.
由以上叙述可知,在使用label smoothing时,计算交叉熵损失的过程如下式:
