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

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

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

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)。 为了将 整数目标值 转换为 分类目标值。

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

<think>好的,我现在需要解决的问题是:如何在多分类问题中计算交叉熵损失函数的梯度。首先,我得回忆一下交叉熵损失函数的基本概念和应用场景。根据之前学过的内容,交叉熵损失函数常用于分类任务,尤其是多分类,通常Softmax函数结合使用。比如引用[3]提到,Softmax将输出转化为概率分布,交叉熵则衡量预测真实分布的差异。 接下来,我需要明确交叉熵损失函数的数学表达式。假设在多分类问题中,有C个类别,模型的输出经过Softmax函数处理后得到每个类别的概率分布。设真实标签为one-hot编码形式,记为$\mathbf{y}$,其中真实类别对应的位置为1,其余为0。模型的预测概率分布为$\mathbf{\hat{y}} = \text{Softmax}(\mathbf{z})$,其中$\mathbf{z}$是模型最后一层的输出(logits)。 交叉熵损失函数的公式应为: $$ L = -\sum_{i=1}^{C} y_i \log(\hat{y}_i) $$ 这里,$y_i$是真实标签的第i个元素,$\hat{y}_i$是Softmax输出的第i个概率。 现在的问题是如何计算损失函数$L$关于logits $\mathbf{z}$的梯度,即$\frac{\partial L}{\partial z_j}$。根据链式法则,梯度计算需要先计算$\frac{\partial L}{\partial \hat{y}_k}$,再乘以$\frac{\partial \hat{y}_k}{\partial z_j}$,最后对所有k求和。 首先计算$\frac{\partial L}{\partial \hat{y}_k}$: $$ \frac{\partial L}{\partial \hat{y}_k} = -\frac{y_k}{\hat{y}_k} $$ 因为$L$只对$\hat{y}_k$有依赖,其他项在求和时导数为0。 接下来,计算Softmax的导数$\frac{\partial \hat{y}_k}{\partial z_j}$。Softmax函数的定义为: $$ \hat{y}_k = \frac{e^{z_k}}{\sum_{m=1}^{C} e^{z_m}} $$ 当计算$\frac{\partial \hat{y}_k}{\partial z_j}$时,需要考虑两种情况:k=j和k≠j。 当k=j时: $$ \frac{\partial \hat{y}_j}{\partial z_j} = \hat{y}_j (1 - \hat{y}_j) $$ 当k≠j时: $$ \frac{\partial \hat{y}_k}{\partial z_j} = -\hat{y}_k \hat{y}_j $$ 因此,综合两种情况,可以写出: $$ \frac{\partial \hat{y}_k}{\partial z_j} = \hat{y}_k (\delta_{kj} - \hat{y}_j) $$ 其中,$\delta_{kj}$是Kronecker delta函数,当k=j时为1,否则为0。 现在将两部分导数结合: $$ \frac{\partial L}{\partial z_j} = \sum_{k=1}^{C} \frac{\partial L}{\partial \hat{y}_k} \cdot \frac{\partial \hat{y}_k}{\partial z_j} = \sum_{k=1}^{C} \left( -\frac{y_k}{\hat{y}_k} \right) \cdot \hat{y}_k (\delta_{kj} - \hat{y}_j) $$ 这里,$\hat{y}_k$和分母的$\hat{y}_k$约掉,剩下: $$ -\sum_{k=1}^{C} y_k (\delta_{kj} - \hat{y}_j) = -\sum_{k=1}^{C} y_k \delta_{kj} + \sum_{k=1}^{C} y_k \hat{y}_j $$ 第一个求和式只剩$y_j$,第二个求和式因为$\sum y_k =1$(真实标签是one-hot),所以得到: $$ - y_j + \hat{y}_j \sum_{k=1}^{C} y_k = -y_j + \hat{y}_j \cdot 1 = \hat{y}_j - y_j $$ 因此,梯度为$\frac{\partial L}{\partial z_j} = \hat{y}_j - y_j$。这意味着整个梯度向量$\nabla_{\mathbf{z}} L = \mathbf{\hat{y}} - \mathbf{y}$,非常简洁,这也是为什么Softmax和交叉熵结合在反向传播中高效的原因,如引用[3]中提到的。 总结推导过程,关键步骤在于正确应用链式法则,处理Softmax的导数,并注意真实标签的one-hot特性,使得中间项能够简化。最后得到的梯度表达式形式简单,便于计算,这也是该组合在深度学习中广泛应用的原因之一。</think>### 多分类交叉熵损失函数的梯度计算 在多分类任务中,交叉熵损失函数Softmax函数结合使用。设真实标签为one-hot向量$\mathbf{y}$,模型输出logits为$\mathbf{z}$,Softmax输出概率$\mathbf{\hat{y}}$。交叉熵损失函数为: $$ L = -\sum_{i=1}^{C} y_i \log(\hat{y}_i) $$ 其中$\hat{y}_i = \frac{e^{z_i}}{\sum_{k=1}^C e^{z_k}}$。 #### 梯度推导步骤 1. **计算损失对Softmax输出的梯度**: $$ \frac{\partial L}{\partial \hat{y}_k} = -\frac{y_k}{\hat{y}_k} $$ 2. **计算Softmax输出对logits的梯度**: - 当$k = j$时: $$ \frac{\partial \hat{y}_j}{\partial z_j} = \hat{y}_j (1 - \hat{y}_j) $$ - 当$k \neq j$时: $$ \frac{\partial \hat{y}_k}{\partial z_j} = -\hat{y}_k \hat{y}_j $$ - 合并为: $$ \frac{\partial \hat{y}_k}{\partial z_j} = \hat{y}_k (\delta_{kj} - \hat{y}_j) $$ 3. **链式法则结合两部分梯度**: $$ \frac{\partial L}{\partial z_j} = \sum_{k=1}^{C} \left( -\frac{y_k}{\hat{y}_k} \cdot \hat{y}_k (\delta_{kj} - \hat{y}_j) \right) = \hat{y}_j - y_j $$ 最终梯度为: $$ \nabla_{\mathbf{z}} L = \mathbf{\hat{y}} - \mathbf{y} $$ 这一简洁形式使得反向传播高效稳定[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值