分类问题(二): 损失函数
在上一篇我们探讨了分类问题的基本概念,同时介绍了熵的概念,并解释了交叉熵和最大似然之间的关系。分类问题可以理解将两个类别的所属分布接近,就是最小化交叉熵
多分类交叉熵
分类预测
在多分类任务中输出的是目标属于每个类别的概率,所有类别的概率和为1,其中概率最大的类别就是目标所属的分类
多分类使用softmax函数将向量的每一个分量映射到[0,1]区间,并且将向量进行归一化,保证所有分量的输出和为1,因此在多分类任务中提取的特征最后都要经过softmax函数,输出是每个类别的概率,然后使用交叉熵作为损失函数
softmax函数定义如下
其中,输入的向量为,由此我们可以得到目标属于每个类别的概率,概率最大的就是预测得到的目标的类别
交叉熵损失
使用softmax函数可以将特征向量映射为所属类别的概率,可以看作是预测类别的概率分布,有
其中为某个类别,设训练数据中类别的概率分布为
和预测概率分布
的交叉熵为
每个训练样本所属的类别是已知的,并且每个样本只会属于一个类别(概率为1),属于其他类别的概率为0,具体的,可以假设有个三分类任务,分别是:猫猪狗,现有一个训练样本为猫,则
假设通过预测得到的三个类别的概率分别为: ,计算
的交叉熵为
可以看到对于猫的分类最后计算只与有关,利用这种特性可以将样本的类别进行重新编码,进而简化交叉熵的计算,这种编码方式就是
one-hot编码,以上面例子为例
通过这种编码,计算交叉熵熵时,只需要计算和训练样本对应类别预测概率的值,其他项都是,即
其中为训练样本对应的类别,上式也被称为负对数似然(negative log-likelihood, nll)
二分类交叉熵
多分类使用softmax函数将最后的输出映射为每个类别的概率,在二分类中使用sigmoid将输出映射为正样本的概率,这是因为在二分类中,只有两个类别(正样本,负样本),只需要求得正样本的概率,则
1-q就是负样本的概率
sigmoid函数的表达式如下
sigmoid的输入为z,输出为(0,1),可以表示分类为正样本的概率,二分类的交叉熵是多分类的一个特列
因为有两个类别,则有
为什么多分类用softmax
softmax和sigmoid函数的区别在于是否互斥
假设输出10类,输出通道是10
sigmoid表示这十类互不相关,得到的10个概率值中每个值代表输入这类的概率和不属于这类的概率,都属于,比如第一个类的概率为0.2,表示属于这个类的概率为0.2,不属于这个类的概率为0.8,并且这个概率与其他九个类没有关系。经过
sigmoid输出的10个值互不影响,只关注某一类的可能性概率有多大,每一类都是二分类,所以加起来也不等于1,可以使第一类的概率为0.9,第二个为0.8softmax综合考虑10个类,属于每个类的概率,这10个类相互影响,和为1
进一步理解
- 从网络角度来理解,输出维度是2,3,4等叫多分类,输出维度1为2分类。如果输出维度是2的话也可以是2分类,不过最后用
softmax函数,而不是sigmoid函数 sigmoid用到10分类中相当于10个分类器,10个人分别判断自己负责的类别,且相互独立。softmax是10分类中使用1个分类器,1个人判断10个类- 多分类也可以用
sigmoid函数,只不过效果较差
简单来说
softmax适用于预测结果互斥的情况,也就是label是one-hot的情况,例如,
sigmoid适用于结果不互斥的情况,就是说label是的情况