分类(二):损失函数
statistic
本文字数:1.4k 字 | 阅读时长 ≈ 5 min

分类(二):损失函数

statistic
本文字数:1.4k 字 | 阅读时长 ≈ 5 min

分类问题(二): 损失函数

在上一篇我们探讨了分类问题的基本概念,同时介绍了熵的概念,并解释了交叉熵和最大似然之间的关系。分类问题可以理解将两个类别$p,q$的所属分布接近,就是最小化交叉熵

1. 多分类交叉熵

1.1 分类预测

在多分类任务中输出的是目标属于每个类别的概率,所有类别的概率和为 1,其中概率最大的类别就是目标所属的分类

多分类使用 softmax 函数将向量的每一个分量映射到 [0,1] 区间,并且将向量进行归一化,保证所有分量的输出和为 1,因此在多分类任务中提取的特征最后都要经过 softmax 函数,输出是每个类别的概率,然后使用 交叉熵作为损失函数

softmax 函数定义如下
$$
S_{i} = \frac{e{zi}}{\sum_{i=1}{n}e^{zi}}
$$
其中,输入的向量为$z_{i}(i=1,2,…,n)$,由此我们可以得到目标属于每个类别的概率,概率最大的就是预测得到的目标的类别

1.2 交叉熵损失

使用softmax函数可以将特征向量映射为所属类别的概率,可以看作是预测类别的概率分布$q(c_{i})$,有
$$
q(c_{i}) = \frac{e{zi}}{\sum_{i=1}{n}e^{zi}}
$$
其中$c_{i}$为某个类别,设训练数据中类别的概率分布为$p(c_{i})$和预测概率分布$q(c_{i})$的交叉熵为
$$
H(p,q)=-\sum_{i}p(c_{i})\log q(c_{i})
$$
每个训练样本所属的类别是已知的,并且每个样本只会属于一个类别(概率为1),属于其他类别的概率为0,具体的,可以假设有个三分类任务,分别是:猫猪狗,现有一个训练样本为猫,则
$$
\begin{aligned}
p(cat)=1 \
p(pig)=0 \
p(dog)=0
\end{aligned}
$$
假设通过预测得到的三个类别的概率分别为: $q(cat)=0.6, q(pig)=0.2, q(dog)=0.2$,计算$p,q$的交叉熵为
$$
\begin{aligned}
H(p,q) &= -[p(cat)\log q(cat)+p(pig)\log q(pig)+p(dog)\log q(dog)] \
&= -[1\cdot \log 0.6 + 0\cdot \log 0.2 + 0\cdot \log 0.2] \
&= -\log 0.6 = -\log q(cat)
\end{aligned}
$$
可以看到对于猫的分类最后计算只与$q(cat)$有关,利用这种特性可以将样本的类别进行重新编码,进而简化交叉熵的计算,这种编码方式就是one-hot编码,以上面例子为例
$$
\begin{aligned}
cat=(100) \
pig=(010) \
dog=(001)
\end{aligned}
$$
通过这种编码,计算交叉熵熵时,只需要计算和训练样本对应类别预测概率的值,其他项都是$0\cdot \log q(c_{i})=0$,即
$$
Corss~Entrophy(p,q) = -\log q(c_{i})
$$
其中$c_{i}$为训练样本对应的类别,上式也被称为负对数似然(negative log-likelihood, nll)

2. 二分类交叉熵

多分类使用softmax函数将最后的输出映射为每个类别的概率,在二分类中使用sigmoid将输出映射为正样本的概率,这是因为在二分类中,只有两个类别(正样本,负样本),只需要求得正样本的概率$q$,则1-q就是负样本的概率

sigmoid函数的表达式如下
$$
\sigma(z) = \frac{1}{1+e^{-z}}
$$
sigmoid的输入为z,输出为(0,1),可以表示分类为正样本的概率,二分类的交叉熵是多分类的一个特列
$$
Corss~Entrophy(p,q) = -\sum_{i}^{m}p(x_{i})\log q(x_{i})
$$
因为有两个类别$x\in x_{1}, x_{2}$,则有
$$
\begin{aligned}
Corss~Entrophy(p,q) &= -\sum_{i}^{m}p(x_{i})\log q(x_{i}) \
&= -[p(x_{1})\log q(x_{1}) + p(x_{2})\log q(x_{2})] \
&= -[p\log q+(1-p)\log (1-q)]
\end{aligned}
$$

3. 为什么多分类用softmax

softmaxsigmoid函数的区别在于是否互斥

假设输出10类,输出通道是10

  1. sigmoid表示这十类互不相关,得到的10个概率值中每个值代表输入这类的概率和不属于这类的概率,都属于$[0,1]$,比如第一个类的概率为0.2,表示属于这个类的概率为0.2,不属于这个类的概率为0.8,并且这个概率与其他九个类没有关系。经过sigmoid输出的10个值互不影响,只关注某一类的可能性概率有多大,每一类都是二分类,所以加起来也不等于1,可以使第一类的概率为0.9,第二个为0.8
  2. softmax综合考虑10个类,属于每个类的概率,这10个类相互影响,和为1

进一步理解

  1. 从网络角度来理解,输出维度是2,3,4等叫多分类,输出维度1为2分类。如果输出维度是2的话也可以是2分类,不过最后用softmax函数,而不是sigmoid函数
  2. sigmoid用到10分类中相当于10个分类器,10个人分别判断自己负责的类别,且相互独立。softmax是10分类中使用1个分类器,1个人判断10个类
  3. 多分类也可以用sigmoid函数,只不过效果较差

简单来说

  1. softmax适用于预测结果互斥的情况,也就是label是one-hot的情况,例如$[0,0,1]$,$[1,0,0]$
  2. sigmoid适用于结果不互斥的情况,就是说label是$[1,1,0],[1,1,1]$的情况
4月 06, 2025
3月 10, 2025
12月 31, 2024