二分类和多分类问题中的损失函数(Loss Function)总结与比较


表格汇总

损失函数名称 推荐指数 适用类型 适用模型 Pytorch类 需掌握程度 预测层激活函数
0-1 Loss 二分类 机器学习 了解
Perceptron Loss 二分类 机器学习 了解
Exponential Loss ★✰ 二分类 机器学习 了解
Hinge Loss ★★ 二分类 机器学习 了解
Ramp Loss ★★✰ 二分类 机器学习 了解
Rescaled Hinge Loss ★★★ 二分类 机器学习 了解
Binary Cross Entropy Loss ★★★★ 二分类 机器学习
深度学习
nn.BCELoss 熟练运用 Sigmoid
Cross Entropy Loss ★★★★ 多分类 机器学习
深度学习
nn.CrossEntropyLoss 熟练运用 Softmax

本文中损失函数推荐指数、需了解程度等都是我拍脑袋想的,并没有实验或者数据支撑,仅供参考

二分类损失函数

0-1 Loss

推荐指数:★✰✰✰✰

适用范围:二分类

Pytorch类:无

需掌握程度:了解

预测层激活函数:无

公式:

L(y,f(x))={1, if yf(x)<00, if yf(x)0    y{1,1}

图像:


在这里插入图片描述

解释:若预测值和真实值符号相同,则loss为0,否则loss为1


Perceptron Loss

推荐指数:★✰✰✰✰

适用范围:二分类

Pytorch类:无

需掌握程度:了解

预测层激活函数:无

公式:

L(y,f(x))=max{0,yf(x)}    y{1,1}

图像:


在这里插入图片描述

解释:如果预测值与真实值符号相同,则loss为 0,否则,loss为 f(x)

Exponential Loss

推荐指数:★★✰✰✰

适用范围:二分类

Pytorch类:无

需掌握程度:了解

预测层激活函数:无

提出年份:1995年

公式:

L(y,f(x))=eyf(x)     y{1,1}

图像:


在这里插入图片描述

解释:和0-1 Loss类似,如果预测结果f(x)y 符号一致,则 |f(x)| 越大loss越接近0,反之若f(x)y 符号不一致,那么|f(x)|越大loss越大。

这里的f(x)因为没有过sigmoid,所以 f(x)(,+)f(x) 越大,也就越认为Label可能为1,反之同理。


Hinge Loss

推荐指数:★★✰✰✰

适用范围:二分类

Pytorch类:nn.HingeEmbeddingLoss (有区别)

需掌握程度:了解

预测层激活函数:

公式:

L(y,f(x))=max{0,marginyf(x)},  y{1,1},  margin1

图像:


在这里插入图片描述

解释:当Label为1时,且预测结果 f(x)1,则loss为0,否则loss就为 1f(x) 。 当Label为 1 时,若f(x)1 ,则 loss 为0,否则loss为 1+f(x)

上述解释中,我默认 margin=1

Ramp Loss

推荐指数:★★★✰✰

适用范围:二分类

Pytorch类:无

需掌握程度:了解

预测层激活函数:无

公式:

L(y,f(x))=max{0,1yf(x)}max{0,marginyf(x)},  y{1,1},  margin0.5

图像:


在这里插入图片描述

解释:对Hinge Loss进一步优化,当预测Label错误时,也给一个最大的loss。

Rescaled Hinge Loss

推荐指数:★★★✰✰

适用范围:二分类

Pytorch类:无

需掌握程度:了解

预测层激活函数:无

公式:

图像:


在这里插入图片描述

解释:与Ramp Loss类似,在其基础上优化了预测错误的情况,当预测错误时,不设loss上线,而是让其缓慢增长。

Binary Cross Entropy Loss(BCELoss)

推荐指数:★★★★✰

适用范围:二分类

Pytorch类:nn.BCELoss

需掌握程度:熟练运用

预测层激活函数:Sigmoid

公式:

L(y,p~)=logp~,~~~ where, p~={p, if y=11p, if y=0 p[0,1]

另一种写法(常见写法):

L(y,p)=ylogp+(1y)log(1p)

图像:


在这里插入图片描述

解释:最后的线性层需要通过sigmoid后得到概率 p,若标签为 1,则损失为 logp,若标签为 1,则损失为 log(1p)


二分类损失函数的发展与比较

我们这里按照逐步迭代的方式来比较这些损失函数,首先,人们提出了 0-1 Loss
在这里插入图片描述
该损失函数缺点明显,其loss取值只有两种,0或1,这样不利于收敛。所以人们提出了Perceptron Loss来解决该问题:


在这里插入图片描述
该损失函数函数对预测错误时进行了优化,预测正确时,loss依然为0,但预测错误时,按照错误程度来决定loss大小。但这样还是还是优缺点,当预测正确时,loss完全取0无法展示其有多么正确,例如同样是Label为1,一个预测结果为100,另一个预测结果为0.1 (结果越大说明模型越觉得Label为1),那明显前者预测结果更对。为了体现预测正确时的loss,又引入了 Exponential Loss


在这里插入图片描述
Exponential Loss 对预测正确的情况也增加了损失计算。但同样又引入了新问题,一是对预测错误时的损失惩罚成指数增长,这样数据中中的异常值可能会对模型造成巨大的损害,使模型不够稳定,二是不管预测的有多么对,总是有loss,同样不利于模型的稳定。这两个问题Hinge Loss可以解决:


在这里插入图片描述

hinge loss 和perceptron loss很像,但其引入了margin参数。首先,预测错误情况下的loss线性增长缓解了 Exponential Loss中的第一个问题。同时,为预测正确时的结果增加了阈值margin,当预测结果大于margin时,就认为你足够正确了,loss为0,但是如果不够margin,虽然预测正确了,也是会有loss的。 虽然hinge loss缓解了预测错误时损失指数增长的问题,但还是损失还是会无限增长,为了解决该问题,人们又提出了Ramp Loss


在这里插入图片描述

Ramp Loss和hinge loss类似,只不过它对于预测错误的情况给了一个最大loss值,这样就可以避免某些异常数据导致loss过大,进而引起模型不稳定的情况。但如果直接设置loss上限多少有点粗暴,所以人们又提出了另一种方案Rescaled Hinge Loss


在这里插入图片描述

Rescaled Hinge Loss 中,当预测错误时,可以让其loss根据错误程度缓慢增长loss,避免了直接设置最大值。



多分类损失函数

Cross Entropy Loss

推荐指数:★★★★✰

适用范围:多分类

Pytorch类:nn.CrossEntropyLoss

需掌握程度:熟练运用

预测层激活函数:Softmax

公式:

L(y,P(yx))=logP(yx)

图像:


在这里插入图片描述

解释:P(y|x) 为预测结果认为是 y 标签的概率,例如类别为 猫、狗、猪,某样本标签为,预测结果经过Softmax后得到的概率分布为 [0.1,0.7,0,2], 则 L=log0.7,底数为 e


参考文献

A Comprehensive Survey of Loss Functions in Machine Learning: https://link.springer.com/article/10.1007/s40745-020-00253-5

Next Post Previous Post
No Comment
Add Comment
comment url