L1、L2、smooth L1三类损失函数

本文介绍了常见的回归损失函数,包括均方误差(MSE)、平均绝对误差(MAE),即L2损失和L1损失,分析了它们的优缺点,如MSE方便求导但可能梯度爆炸,MAE梯度稳定但中心点不可导。还对比了L1_Loss和L2_Loss在鲁棒性和稳定性上的差异,最后介绍了能让L1变得光滑的smooth L1损失函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见的MSE、MAE损失函数
1.1 均方误差、平方损失
均方误差(MSE)是回归损失函数中最常用的误差,它是预测值与目标值之间差值的平方和,其公式如下所示:
在这里插入图片描述
下图是均方根误差值的曲线分布,其中最小值为预测值为目标值的位置。在这里插入图片描述
优点:各点都连续光滑,方便求导,具有较为稳定的解

缺点:不是特别的稳健,为什么?因为当函数的输入值距离中心值较远的时候,使用梯度下降法求解的时候梯度很大,可能导致梯度爆炸

什么是梯度爆炸?
误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。
深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。
网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。

梯度爆炸引发的问题
在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。

1.2 平均绝对误差
平均绝对误差(MAE)是另一种常用的回归损失函数,它是目标值与预测值之差绝对值的和,表示了预测值的平均误差幅度,而不需要考虑误差的方向,范围是0到∞,其公式如下所示:
在这里插入图片描述
在这里插入图片描述
优点:无论对于什么样的输入值,都有着稳定的梯度,不会导致梯度爆炸问题,具有较为稳健性的解。
缺点:在中心点是折点,不能求导,不方便求解。

上面的两种损失函数也被称之为L2损失和L1损失

二、L1_Loss和L2_Loss
2.1 L1_Loss和L2_Loss的公式
L1范数损失函数,也被称为最小绝对值偏差(LAD),最小绝对值误差(LAE)。总的说来,它是把目标值(Yi)与估计值(f(xi))的绝对差值的总和(S)最小化:
在这里插入图片描述
L2范数损失函数,也被称为最小平方误差(LSE)。总的来说,它是把目标值(Yi)与估计值(f(xi))的差值的平方和(S)最小化:
在这里插入图片描述

import numpy as np

def L1(yhat, y):
    loss = np.sum(np.abs(y - yhat))
    return loss

def L2(yhat, y):
    loss =np.sum(np.power((y - yhat), 2))
    return loss
#调用
yhat = np.array([0.1, 0.2, 0.3, 0.4, 0.5])
y = np.array([1, 1, 0, 1, 1])

print("L1 = " ,(L1(yhat,y)))
print("L2 = " ,(L2(yhat,y)))

L1范数与L2范数作为损失函数的区别能快速地总结如下:
在这里插入图片描述
2.2 几个关键的概念
(1)鲁棒性
最小绝对值偏差之所以是鲁棒的,是因为它能处理数据中的异常值。这或许在那些异常值可能被安全地和有效地忽略的研究中很有用。如果需要考虑任一或全部的异常值,那么最小绝对值偏差是更好的选择。
从直观上说,因为L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数来得大,因此模型会对这个样本更加敏感,这就需要调整模型来最小化误差。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。

(2)稳定性
最小绝对值偏差方法的不稳定性意味着,对于数据集的一个小的水平方向的波动,回归线也许会跳跃很大(如,在转折点处求导)。在一些数据结构上,该方法有许多连续解;但是,对数据集的一个微小移动,就会跳过某个数据结构在一定区域内的许多连续解。在跳过这个区域内的解后,最小绝对值偏差线可能会比之前的线有更大的倾斜。
相反地,最小平方法的解是稳定的,因为对于一个数据点的任何微小波动,回归线总是只会发生轻微移动;也就说,回归参数是数据集的连续函数。

三、smooth L1损失函数
其实顾名思义,smooth L1说的是光滑之后的L1,前面说过了L1损失的缺点就是有折点,不光滑,导致不稳定,那如何让其变得光滑呢?smooth L1损失函数为:
在这里插入图片描述
smooth L1损失函数曲线如下图所示,作者这样设置的目的是想让loss对于离群点更加鲁棒,相比于L2损失函数,其对离群点(指的是距离中心较远的点)、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞。
在这里插入图片描述

<think>好的,用户想了解Smooth L1损失函数的定义、公式和应用场景。首先,我需要回忆一下SmoothL1的相关知识。Smooth L1损失函数结合了L1和L2损失的优点,通常在回归任务中使用,比如目标检测中的边界框回归。接下来,我要确认它的数学公式。根据引用[1]和[3],SmoothL1在误差较小时使用L2形式,较大时使用L1形式,这样可以避免离群值的影响,同时梯度更稳定。公式应该分段表示,当绝对误差小于1时用平方项,否则用线性项。然后,应用场景方面,用户提到的引用[1]提到FasterR-CNN中使用Smooth L1,这应该是一个典型例子。需要说明它在目标检测中的应用,特别是在边界框回归中的优势,比如处理坐标预测时的稳健性。此外,可能还适用于其他需要鲁棒回归的任务,比如姿态估计或光流预测。 用户可能还想知道与L1、L2的区别,所以需要对比它们的优缺点。引用[3]指出L1在中心点不可导,而SmoothL1在转折点更平滑,梯度更稳定。同时,L2对离群值敏感,而SmoothL1对此更鲁棒。这些对比能帮助用户理解为何选择Smooth L1。需要检查公式是否正确,确保使用$$...$$格式。例如,SmoothL1的公式是否正确分段,参数是否合适。同时,确保引用的来源正确,比如引用[1]提到smooth L1比L1在折点处更平滑,这要在回答中体现。 可能用户还关心如何实现这个损失函数,是否需要代码示例?但用户的问题中没有明确要求,不过引用[2]提到损失函数的Python实现,如果可能的话可以简单提及实现方法,但根据用户的问题,可能不需要详细代码,除非用户后续提问。最后,生成的相关问题需要围绕Smooth L1的扩展,比如与其他损失函数的对比,实际应用案例,或者参数调整的影响。确保问题有助于用户深入理解该主题。</think>### Smooth L1损失函数详解 #### 1. **定义与公式** Smooth L1损失函数是L1损失和L2损失的结合形式,**在误差较小时表现为L2损失(平滑梯度),误差较大时表现为L1损失(抑制离群值干扰)**。其数学公式为: $$ L_{\text{smooth}L1}(x) = \begin{cases} 0.5x^2 & \text{if } |x| < 1 \\ |x| - 0.5 & \text{otherwise} \end{cases} $$ 其中$x$为预测值与真实值的差值[^1][^3]。 #### 2. **核心特点** - **梯度稳定性**:在$|x|=1$处连续可导,避免了L1损失在零点不可导的问题[^3]。 - **鲁棒性**:对离群值的敏感度低于L2损失(如MSE),防止梯度爆炸[^1]。 - **计算效率**:分段函数设计简化了计算。 #### 3. **应用场景** - **目标检测**:如Faster R-CNN中边界框(Bounding Box)的坐标回归任务,用于提升位置预测精度[^1]。 - **鲁棒回归问题**:需要平衡噪声数据与离群值影响的场景,如光流估计、姿态估计。 - **实时性要求高的模型**:因计算复杂度低,适合部署在移动端或边缘设备。 #### 4. **对比L1/L2损失** | 损失类型 | 优点 | 缺点 | 适用场景 | |---------|------|------|---------| | L1(MAE) | 对离群值鲁棒 | 零点不可导,收敛慢 | 强噪声数据 | | L2(MSE) | 梯度平滑易优化 | 对离群值敏感 | 低噪声回归 | | Smooth L1 | 兼顾梯度稳定与鲁棒性 | 需手动设定阈值(如$|x|=1$) | 高精度回归任务[^1][^3] | #### 5. **Python实现示例** ```python import torch def smooth_l1_loss(pred, target, beta=1.0): diff = torch.abs(pred - target) loss = torch.where(diff < beta, 0.5 * diff ** 2 / beta, diff - 0.5 * beta) return loss.mean() ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值