二分类、多分类与多标签问题及对应损失函数的选择

二分类、多分类与多标签问题及对应损失函数的选择

之前只是了解了一些图像分类的知识,知道它大概的意思,因为笔者的研究最终也可以叫做分类,所以今天有时间来一起整理下图像分类以及对应的损失函数。开始学习~😜

1 . 概念

(1)二分类:表示分类任务有两个类别,比如我们想识别图片中是不是狗,也就是说,训练一个分类器,输入一幅图片,用特征向量x表示,输出是不是狗,用y=0或1表示。二类分类是假设每个样本都被设置了一个且仅有一个标签 0 或者 1。

(2)多类分类: 表示分类任务中有多个类别, 比如对一堆水果图片分类, 它们可能是橘子、苹果、梨等. 多类分类是假设每个样本都被设置了一个且仅有一个标签: 一个水果可以是苹果或者梨, 但是同时不可能是两者。

(3)多标签分类: 给每个样本一系列的目标标签. 可以想象成一个数据点的各属性不是相互排斥的(一个水果既是苹果又是梨就是相互排斥的), 比如一个文档相关的话题. 一个文本可能被同时认为是宗教、政治、金融或者教育相关话题。

其实二分类和多分类的相同点就是每个样本有且仅有一个标签,但是二分类表示分类任务中只有两个类别,而多分类表示分类任务有多个类别。多标签表示每个样本存在一系列的目标标签。

2. 多分类如何分类?

首先,两类问题是分类问题中最简单的一种。其次,很多多类问题可以被分解为多个两类问题进行求解。所以,历史上有很多算法都是针对两类问题提出的。下面直接来分析如何处理多分类问题:

2.1 直接分成多类

在这里插入图片描述

2.2 一对一策略

给定数据集D这里有N个类别,这种情况下就是将这些类别两两配对,从而产生N(N−1)2个二分类任务,在测试的时候把样本交给这些分类器,然后进行投票。
在这里插入图片描述

2.3 一对其余策略

将每一次的一个类作为正例,其余作为反例,总共训练N个分类器。测试的时候若仅有一个分类器预测为正的类别则对应的类别标记作为最终分类结果,若有多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。
在这里插入图片描述

3. 多标签问题与二分类问题关系

(1)多标签面临的问题: 图片的标签数目不是固定的,有的有一个标签,有的有两个标签,但标签的种类总数是固定的,比如为5类。

解决该问题: 采用了标签补齐的方法,即缺失的标签全部使用0标记,这意味着,不再使用one-hot编码(类别是独立的,样本只属于多种类别的其中之一)。例如:标签为:-1,1,1,-1,1 ;-1表示该类标签没有,1表示该类标签存在,则这张图片的标签编码为:

0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1

(2)如何衡量损失?

计算出一张图片各个标签的损失,然后取平均值。

多标签问题处理方法的本质:把一个多标签问题,转化为了在每个标签上的二分类问题(非0即1)。

4. 损失函数的选择问题

4.1 基于逻辑回归的二分类问题

(1)sigmoid函数用于逻辑回归

在这里插入图片描述
该公式是基于sigmoid函数
补充知识:sigmoid函数可以将元素的值变换到0和1之间:
在这里插入图片描述
sigmoid函数的图像如下:当输入接近0时,sigmoid函数接近线性变换
在这里插入图片描述
依据链式法则,sigmoid函数的导数:
在这里插入图片描述
下面绘制了sigmoid函数的导数。当输入为0时,sigmoid函数的导数达到最大值0.25;当输入越偏离0时,sigmoid函数的导数越接近0。
在这里插入图片描述
继续路逻辑回归:

逻辑回归有以下优点:
(1)它的输入范围是 ,而之于刚好为(0,1),正好满足概率分布为(0,1)的要求。我们用概率去描述分类器,自然比单纯的某个阈值要方便很多;
(2)它是一个单调上升的函数,具有良好的连续性,不存在不连续点。

(2)逻辑回归采用的损失函数
对数损失函数或对数似然损失函数:
在这里插入图片描述
逻辑回归中,采用的则是对数损失函数。根据上面的内容,可以得到逻辑回归的对数似然损失函数:
在这里插入图片描述
将以上两个分段表达式合并为一个,则单个样本的损失函数可以描述为:
在这里插入图片描述
即为最终的逻辑回归的损失函数

4.2 基于多分类问题的损失函数

softmax层中的softmax 函数是logistic函数在多分类问题上的推广,它将一个N维的实数向量压缩成一个满足特定条件的N维实数向量。压缩后的向量满足两个条件:
(1)向量中的每个元素的大小都在[0,1]
(2)向量所有元素的和为 1 满足概率分布
因此,softmax适用于多分类问题中对每一个类别的概率判断,softmax的函数公式如下:
在这里插入图片描述
基于 Softmax 的多分类问题采用的是 log似然代价函数来解决。

单个样本的 log似然代价函数的公式为:

在这里插入图片描述
其中,yi表示标签向量的第 i个分量。因为往往只有一个分量为 1 其余的分量都为 0,所以可以去掉损失函数中的求和符号,化简为:
在这里插入图片描述
其中, 是向量 y 中取值为 1 对应的第 j个分量的值。

4.3 交叉熵损失函数与 log 似然代价函数关系

有的文献中也称 log 似然代价函数为交叉熵损失函数,这两个都是交叉熵损失函数,但是看起来长的却有天壤之别。为什么同是交叉熵损失函数,长的却不一样呢?
在这里插入图片描述

因为这两个交叉熵损失函数对应不同的最后一层的输出。第一个对应的最后一层是 sigmoid,用于二分类问题,第二个对应的最后一层是 softmax,用于多分类问题。但是它们的本质是一样的
解释可参考这篇博客分析:二分类、多分类与多标签问题的区别及对应损失函数的选择

4.4 sigmoid + 交叉熵

先看看 sigmoid 作为神经网络最后一层的情况。sigmoid 作为最后一层输出的话,那就不能吧最后一层的输出看作成一个分布了,因为加起来不为 1。现在应该将最后一层的每个神经元看作一个分布,对应的 target 属于二项分布(target的值代表是这个类的概率),那么第 i 个神经元交叉熵为
在这里插入图片描述
其实这个式子可以用求和符号改写,
在这里插入图片描述
其中:
在这里插入图片描述

4.5 Softmax + 对数似然

现在来看 softmax 作为神经网络最后一层的情况。g(x)是什么呢?就是最后一层的输出 y 。p(x)是什么呢?就是我们的one-hot标签。
首先来看信息论中交叉熵的定义:
在这里插入图片描述
交叉熵是用来描述两个分布的距离的,神经网络训练的目的就是使 g(x) 逼近 p(x)。

现在我们带入交叉熵的定义中算一下,就会得到:
在这里插入图片描述

5. 交叉熵损失函数与 log 似然损失函数总结

注意到不管是交叉熵损失函数与 log 似然损失函数,交叉熵损失函数用于二分类问题, log 似然损失函数用于多分类,但是对于某一个样本只属于一个类别,只有一个标签。如果用 one-hot 编码样本的标签那么,对于标签向量只有一个分量的值为 1 其余的值都为 0。
所以不管是交叉熵损失函数与 log 似然损失函数,都可以化简为:
在这里插入图片描述
其中,aj是向量 y 中取值为 1 对应的第 j 个分量的值。这两个长的不一样的损失函数实际上是对应的不同的输出层。本质上是一样的。

区分这两个函数可采用命名方法,对于二分类的交叉熵损失函数称之为 “二分类交叉熵损失函数(binary_crossentropy)” ,对于多分类的交叉熵损失函数称之为 “多类别交叉熵损失函数(categorical_crossentropy)”。

注意: 当使用categorical_crossentropy损失时,你的目标值应该是分类格式 (即,如果你有10个类,每个样本的目标值应该是一个10维的向量,这个向量除了表示类别的那个索引为1,其他均为0)。 为了将 整数目标值 转换为 分类目标值。

参考:
二分类、多分类与多标签问题的区别及对应损失函数的选择

PyTorch是一个流行的开源深度学习框架,它提供了丰富的工具和功能来进行多标签分类任务。多标签分类是指一个样本可以属于多个类别,每个类别之间是相互独立的。 在PyTorch中进行多标签分类,我们可以按照以下步骤进行操作: 1. 数据准备:首先,需要准备好带有标签的训练数据集和验证数据集。每个样本应该有一个对应的输入和一个标签标签是一个二进制向量,其中每个元素表示一个类别,1代表属于该类别,0代表不属于该类别。 2. 构建模型:使用PyTorch的nn模块构建多标签分类模型。可以选择使用现有的预训练模型作为基础模型,也可以自己设计模型。在模型最后一层使用sigmoid激活函数,而不是常用的softmax激活函数,因为sigmoid可以输出独立的概率值而softmax输出的是归一化的概率分布。 3. 定义损失函数和优化器:对于多标签分类任务,常用的损失函数二分类问题的交叉熵损失,可以使用PyTorch中的BCELoss函数。优化器可以选择常用的Adam或SGD等。 4. 训练模型:按照一般的PyTorch训练流程,将输入样本和标签传入模型,计算损失,进行反向传播和参数更新。 5. 模型评估:通过验证数据集评估模型的性能,可以使用F1 score、accuracy或者precision/recall等指标。可以使用PyTorch中的函数计算这些指标。 以上就是使用PyTorch进行多标签分类的基本步骤。需要注意的是,在数据准备过程中要保证数据类别平衡,训练样本足够丰富,模型设计合理,调整超参数来提高模型性能。多标签分类任务可以应用于很多实际问题,如图像标签分类、文本标签分类等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值