常见损失函数总结(一)

博客先探讨选择损失函数的意义,需考量损失最优时模型性能及到达最优点的代价。接着介绍常见分类损失函数,包括0 - 1 Loss、cross - entropy Loss、Hinge Loss、Exponential Loss和Modified Huber Loss,分析了各损失函数的特点及部分推导过程。

在介绍常见损失函数之前,我想先就选择损失函数的意义做一下探讨,我认为损失函数应该从两个方面去进行考量:

(1) 如果损失函数达到最优了,在多大程度上可以认为模型的性能是非常好的?这点是最基本的要求,如果即使损失函数达到了全局最优,模型性能仍然不能很好的工作(例如MSE对比MAE,即使找到了全局最优仍然不能获取很好的性能),那应该考虑换个模型或者损失函数。

(2) 损失函数是否可以到达最优点或者局部最优点,如果可以,代价是什么?这就需要我们考虑优化算法的收敛速度,时间复杂度,空间复杂度等等。

分类损失函数

(1) 0-1 Loss

                                                              

最简单的损失函数形式,但不可对x求导(阶跃函数),应用受局限。

(2) cross-entropy Loss

交叉熵:,其可以衡量分布p和分布q的距离,并可作为神经网络的一种损失函数。假设神经网络的原始输出为{y}',在经过softmax变换后可转为概率分布形式\hat{y} = softmax({y}'),这里softmax定义为:

                                                                      \hat{y}_i = softmax({y}')_i = \frac{e^{​{y}'_i}}{\sum_j^n e^{​{y}'_j}}

实际神经网络输出为y(形式为[0,0,...,1,0,...,0]),则二者的距离为

                                                                             L(y,\hat{y}) \\ = H(y||\hat{y}) \\ =-\sum_i^n y_i log \hat{y_i}

上式即为y\hat{y}之间的交叉熵损失函数。实际上,逻辑回归的损失函数也可以理解为交叉熵损失函数,假设数据为(x^{(i)},y^{(i)}),其对于总体数据的损失函数为:-\sum_{k=1}^m logP(y^{(k)}|x^{(k)});对于固定数据(x^{(k)},y^{(k)}),其属于类别j的概率为\hat{y}_i^{(k)}= \frac{e^{\theta_i^Tx^{(k)}}}{\sum e^{\theta_j^Tx^{(k)}}},损失函数为:

                                                                    -logP(y^{(k)}|x^{(k)}) \\ = -log \prod_i^C (\frac{e^{\theta_i^Tx^{(k)}}}{\sum e^{\theta_j^Tx^{(k)}}})^{y_i^{(k)}} \\ = -\sum_i^C y_i^{(k)}log \frac{e^{\theta_i^Tx^{(k)}}}{\sum e^{\theta_j^Tx^{(k)}}} \\ = -\sum_i^C y_i^{(k)}log\hat{y}_i^{(k)}

这正是交叉熵损失函数的形式。

(3)Hinge Loss

我们来观察一下hinge loss的形式,如果把yf(x)看做是分类置信度或者是margin的话,其实样本的置信度在超过1之后就不会对损失函数有很大影响了。这一点也说明了SVM方法解的稀疏性(之和支持向量有关)。

                                                        

SVM的损失函数也是hinge loss。下面我们就来看下svm中的hinge loss 是如何被推导出来的:带有软间隔的SVM的最优化形式为:

                                                     

约束条件第一行可以改为\xi_i \geq 1 - y_i(w^Tx_i + b)。结合约束条件第二行,约束条件可以转化为:

                                                       \xi_i \geq max(0, 1 - y_i(w^Tx_i + b))

再进而优化问题可以转化为:

                                            \underset{w,b}{min} \quad \frac{1}{2}||w||^2 + C\sum_{i=1}^m max(0, 1 - y_i(w^Tx_i + b))

可以看到SVM损失函数可以转化为hinge loss 加上一个正则项,而正则项的大小取决于SVM的松弛度。

(4) Exponential Loss

                                                          

指数损失函数从形式上就可以看出,其非常容易放大异常点对模型的影响。

(5) Modified Huber Loss

                                    

modified huber loss 结合了 hinge loss 和 cross entropy loss 的优点,其在yf(x) 在-1到1之间的函数形式令其以概率的形式判断分类,另外,在小于-1和大于1的区域,它保证了对于异常点的鲁棒性,和解的稀疏性。

参考资料:

[1] 常见回归和分类损失函数比较

### YOLO 模型中常见损失函数及其作用 #### 1. **平方误差损失 (MSE Loss)** 在早期版本的 YOLO 中(如 YOLOv1),边界框回归采用的是均方误差损失。这种损失用于预测边界框的位置和大小,具体来说是对中心坐标 \(x, y\) 和宽度高度 \(w, h\) 进行优化。尽管简单易用,但它并未考虑不同尺寸物体之间的差异以及重叠区域的影响[^1]。 ```python import torch.nn as nn mse_loss = nn.MSELoss() ``` --- #### 2. **交叉熵损失 (Cross Entropy Loss)** 对于分类任务,YOLO 使用交叉熵损失来衡量预测类别分布与真实标签之间的差距。这部分主要负责提高模型对目标类别的识别能力。 ```python cross_entropy_loss = nn.CrossEntropyLoss() ``` --- #### 3. **IoU 类损失** 从 YOLOv4 起,研究者更倾向于使用基于 IoU 的损失函数,这类方法能够更好地评估边界框定位的准确性。以下是几种常见的变体: - **GIoU (Generalized Intersection over Union):** GIoU 是传统 IoU 的扩展版,在计算交并比的基础上引入了个惩罚项,从而解决了当两个矩形完全不相交时无法提供梯度信号的问题。 - **DIoU (Distance-IoU):** DIoU 不仅考虑了重叠面积的比例关系,还加入了两边界框中心点距离作为额外约束条件,有助于加速收敛过程并提升性能表现。 - **CIoU (Complete-IoU):** CIoU 综合考量了三个因素——重叠程度、中心点偏离量以及宽高比例致性,因此被认为是最先进的位置敏感型损失之。 ```python def giou_loss(pred_boxes, target_boxes): # 实现 GIou 计算逻辑... pass def diou_loss(pred_boxes, target_boxes): # 实现 DIou 计算逻辑... pass def ciou_loss(pred_boxes, target_boxes): # 实现 CIou 计算逻辑... pass ``` --- #### 4. **Focal Loss** 针对样本不平衡问题设计的种改进型交叉熵损失形式。通过调整权重系数使得难分样本获得更高的关注度,进而改善整体检测效果特别是小目标场景下的召回率指标得分情况显著优于常规做法。 ```python focal_loss = F.binary_cross_entropy_with_logits(logits, targets, weight=weights, reduction='mean') ``` --- ### 总结说明 每种类型的损失都有其特定的应用范围及优势所在:平方差适合基础几何参数校准;而各类 IoU 变种则更加贴合实际需求侧重于空间布局匹配精准度方面;至于 focal loss 则专注于解决极端数据分布带来的挑战等问题。这些组件共同构成了现代 YOLO 架构高效运行的核心支柱[^2].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值