分类(二):损失函数

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

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

多分类交叉熵

分类预测

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

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

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

在这里插入图片描述

交叉熵损失

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

二分类交叉熵

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

sigmoid函数的表达式如下
σ(z)=11+e−z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+ez1
sigmoid的输入为z,输出为(0,1),可以表示分类为正样本的概率,二分类的交叉熵是多分类的一个特列
Corss Entrophy(p,q)=−∑imp(xi)log⁡q(xi) Corss~Entrophy(p,q) = -\sum_{i}^{m}p(x_{i})\log q(x_{i}) Corss Entrophy(p,q)=imp(xi)logq(xi)
因为有两个类别x∈x1,x2x\in x_{1}, x_{2}xx1,x2,则有
Corss Entrophy(p,q)=−∑imp(xi)log⁡q(xi)=−[p(x1)log⁡q(x1)+p(x2)log⁡q(x2)]=−[plog⁡q+(1−p)log⁡(1−q)] \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} Corss Entrophy(p,q)=imp(xi)logq(xi)=[p(x1)logq(x1)+p(x2)logq(x2)]=[plogq+(1p)log(1q)]

为什么多分类用softmax

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

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

  1. sigmoid表示这十类互不相关,得到的10个概率值中每个值代表输入这类的概率和不属于这类的概率,都属于[0,1][0,1][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][0,0,1][0,0,1][1,0,0][1,0,0][1,0,0]
  2. sigmoid适用于结果不互斥的情况,就是说label是[1,1,0],[1,1,1][1,1,0],[1,1,1][1,1,0],[1,1,1]的情况
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值