【深度学习】smooth L1 loss 计算

RPN的目标函数是分类和回归损失的和,分类采用 交叉熵,回归采用稳定的 Smooth L1

SmoothL1公式 为:
s m o o t h L 1 ( x ) = { 0.5 x 2 , ∣ x ∣ ≤ 1 ∣ x ∣ − 0.5 , ∣ x ∣ > 1 smooth_{L_{1}}(x)=\left\{ \begin{aligned} &0.5x^{2}&,&|x|\leq1 \\ &|x|-0.5&,&|x|>1 \end{aligned} \right. smoothL1(x)={0.5x2x0.5x1x>1

整体损失函数 具体为:
这里写图片描述
Smooth L1

  • 相比于L1损失函数,可以收敛得更快。
  • 相比于L2损失函数,对离群点、异常值不敏感,梯度变化相对更小,训练时不容易跑飞。

[1] Faster R-CNN原理介绍
[2] 深度网络中softmax_loss、Smooth L1 loss计算以及反向传播推导

### 深度学习中损失函数的概念 在深度学习领域,损失函数用于衡量模型预测值与真实标签之间的差异。通过最小化这种差异来优化神经网络参数,从而提高模型性能[^1]。 ### 常见的损失函数类型及应用场景 #### 分类问题的损失函数 对于多分类任务,常用的损失函数有: - **交叉熵损失函数 (Cross Entropy Loss)** 这是最广泛使用的分类损失函数之一,尤其适用于二元或多类别分类场景。其公式如下所示: \[ H(y, p) = -\sum_{i} y_i \log(p_i) \] 其中 \(y\) 表示实际标签分布而\(p\) 则代表预测概率向量[^2]。 - **负对数似然损失 (NLL Loss)** 主要应用于处理离散型数据集上的多分类问题,在Softmax层之后使用效果更佳[^4]。 #### 回归问题的损失函数 针对连续数值输出的任务,则会采用不同的评价标准: - **L1 损失函数** 它计算的是绝对误差平均值,具有较强的鲁棒性可以抵抗异常点的影响。 \[ L_1(\hat{y}, y)=|{\hat {y}}-{y}| \] - **MSE(均方差)损失函数** MSE 是指目标变量和估计之间平方差的期望值,常被用来评估线性回归模型的好坏程度。 ```python import torch.nn as nn mse_loss_fn = nn.MSELoss() ``` - **Smooth L1 Loss** 结合了L1和L2的优点,在一定程度上缓解梯度过大或者过小的问题,特别适合于边界框坐标预测等场合。 ### 自定义损失函数 当现有损失函数无法满足特定需求时,可以根据具体业务逻辑设计新的损失函数。这通常涉及到调整权重系数、引入额外惩罚项等方式以更好地适应目标任务特性。 ### 如何选择合适的损失函数? 挑选最适宜当前项目的损失函数取决于多个因素,包括但不限于输入特征空间维度大小、样本数量多少以及是否存在不平衡现象等等。建议先尝试经典方案再逐步探索改进版本直至找到最优解法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值