L1, L2以及smooth L1 loss

本文介绍了L1和L2范数在损失函数和正则化中的应用,强调了L1的鲁棒性和L2的稳定性。L1损失函数在处理异常值时更为鲁棒,而L2损失函数的解决方案是唯一的。Smooth L1 Loss结合了两者的优点,避免了L1损失函数在接近0时的梯度突变,适用于目标检测等任务。

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

在机器学习实践中,你也许需要在神秘的L1和L2中做出选择。通常的两个决策为:1) L1范数 vs L2范数 的损失函数; 2) L1正则化 vs L2正则化。

作为损失函数

  L1范数损失函数,也被称为最小绝对值偏差(LAD),最小绝对值误差(LAE)。总的说来,它是把目标值(YiYi)与估计值(f(xi)f(xi))的绝对差值的总和(SS)最小化:

 

S=∑i=1n|Yi−f(xi)|.S=∑i=1n|Yi−f(xi)|.

  L2范数损失函数,也被称为最小平方误差(LSE)。总的来说,它是把目标值(YiYi)与估计值(f(xi)f(xi))的差值的平方和(SS)最小化:

 

S=∑i=1n(Yi−f(xi))2.S=∑i=1n(Yi−f(xi))2.

  L1范数与L2范数作为损失函数的区别能快速地总结如下:

L2损失函数L1损失函数
不是非常的鲁棒(robust)鲁棒
稳定解不稳定解
总是一个解可能多个解

  鲁棒性(robustness),根据维基百科,被解释为:

因为与最小平方相比,最小绝对值偏差方法的鲁棒性更好,因此,它在许多场合都有应用。最小绝对值偏差之所以是鲁棒的,是因为它能处理数据中的异常值。这或许在那些异常值可能被安全地和有效地忽略的研究中很有用。如果需要考虑任一或全部的异常值,那么最小绝对值偏差是更好的选择。

从直观上说,因为L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数来得大( e vs e^2 ),因此模型会对这个样本更加敏感,这就需要调整模型来最小化误差。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。

  稳定性,根据维基百科,被解释为:

最小绝对值偏差方法的不稳定性意味着,对于数据集的一个小的水平方向的波动,回归线也许会跳跃很大。在一些数据结构(data configurations)上,该方法有许多连续解;但是,对数据集的一个微小移动,就会跳过某个数据结构在一定区域内的许多连续解。(The method has continuous solutions for some data configurations; however, by moving a datum a small amount, one could “jump past” a configuration which has multiple solutions that span a region. )在跳过这个区域内的解后,最小绝对值偏差线可能会比之前的线有更大的倾斜。相反地,最小平方法的解是稳定的,因为对于一个数据点的任何微小波动,回归线总是只会发生轻微移动;也就说,回归参数是数据集的连续函数。

下面的图是用真实数据和真实拟合模型生成的:

这里使用的基本模型为梯度提升回归(GradientBoostingRegressor),使用L1范数和L2范数作为损失函数。绿线和红色分别代表了模型使用L1范数与L2范数作为损失函数时的情形。实线代表了训练的模型中不含有异常值(橙色)的情形,虚线代表了训练的模型中含有异常值(橙色)的情形。
  我缓慢地将这个异常值从左向右移动,使得它在中间时不那么异常,而在左右两边时更加异常。当这个异常值不那么异常时(在中间的情形),在拟合直线的时候,L2范数的变动较小,而L1范数的表动较大。
  当这个异常值更加异常(上左位置,下右位置,它们离左、右两边更加远)时,这两个范数都有大的变动,但是再一次地,L1范数总体上比L2范数变动更大。
  通过数据可视化,我们能够对这两个损失函数的稳定性有更好的认知。

作为正规化

  在机器学习中,正规化是防止过拟合的一种重要技巧。从数学上讲,它会增加一个正则项,防止系数拟合得过好以至于过拟合。L1与L2的区别只在于,L2是权重的平方和,而L1就是权重的和。如下:

最小平方损失函数的L1正则化:

最小平方损失函数的L2正则化:

它们的性质的区别能快速地总结如下:

L2正则化L1正则化
计算效率高(因为有解析解)在非稀疏情形下计算效率低
非稀疏输出稀疏输出
无特征选择内置特征选择

  解的唯一性是一个更简单的性质,但需要一点想象。首先,看下图:

绿色的线(L2范数)是唯一的最短的路径,而红色、蓝色、黄色线条(L1范数)都是同一路径,长度一样(12)。可以将其扩展至n-维的情形。这就是为什么L2范数有唯一解而L1并不是。
  内置特征选择是L1范数被经常提及的有用的性质,而L2范数并不具备。这是L1范数的自然结果,它趋向于产生稀疏的系数(在后面会解释)。假设模型有100个系数,但是仅仅只有其中的10个是非零的,这实际上是说“其余的90个系数在预测目标值时都是无用的”。L2范数产生非稀疏的系数,因此它不具备这个性质。
  稀疏性指的是一个矩阵(或向量)中只有少数的项是非零的。L1范数具备性质:产生许多0或非常小的系数和少量大的系数。
  计算效率。L1范数没有一个解析解,但是L2范数有。这就允许L2范数在计算上能高效地计算。然而,L1范数的解具备稀疏性,这就允许它可以使用稀疏算法,以使得计算更加高效。

转自:

https://www.cnblogs.com/jclian91/p/9824310.html

 

smooth L1

目标检测中, 如果存在异常点, 如预测4个点, 有一个点偏离很大, L2loss会平方误差, 放大误差, L1对误差的鲁棒性更好. 

作者:知乎用户
链接:https://www.zhihu.com/question/58200555/answer/621174180
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

为了从两个方面限制梯度:

  1. 当预测框与 ground truth 差别过大时,梯度值不至于过大;
  2. 当预测框与 ground truth 差别很小时,梯度值足够小。

考察如下几种损失函数,其中 x 为预测框与 groud truth 之间 elementwise 的差异:

L_2(x)=x^2\tag{1}

L_1(x)=|x|\tag{2}

\mathrm{smooth}_{L_1}(x)= \begin{cases} 0.5x^2& \text{if } |x|<1\\ |x|-0.5& \text{otherwise} \end{cases}\tag{3}

损失函数对 x 的导数分别为:

\frac{\mathrm{d}L_2(x)}{\mathrm{d}x}=2x\tag{4}

\frac{\mathrm{d}L_1(x)}{\mathrm{d}x}=\begin{cases} &1 &\text{if } x\geq0 \\ &-1 &\text{otherwise}   \end{cases}\tag{5}

\frac{\mathrm{d}\mathrm{\ smooth}_{L_1}}{\mathrm{d}x}=\begin{cases} &x &\text{if}\ |x|<1\\ &\pm1 &\text{otherwise}\tag{6}  \end{cases}

观察 (4),当 x 增大时 L_2 损失对 x 的导数也增大。这就导致训练初期,预测值与 groud truth 差异过于大时,损失函数对预测值的梯度十分大,训练不稳定。

根据方程 (5),L_1x 的导数为常数。这就导致训练后期,预测值与 ground truth 差异很小时, L_1 损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

最后观察 (6), \mathrm{smooth}_{L_1}x 较小时,对 x 的梯度也会变小,而在 x 很大时,对 x 的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 \mathrm{smooth}_{L_1} 完美地避开了 L_1L_2 损失的缺陷。其函数图像如下:

由图中可以看出,它在远离坐标原点处,图像和 L_1 loss 很接近,而在坐标原点附近,转折十分平滑,不像 L_1 loss 有个尖角,因此叫做 smooth L_1 loss。

https://zhuanlan.zhihu.com/p/48426076

https://www.zhihu.com/question/58200555/answer/621174180

<think>嗯,用户想了解Smooth L1 Loss的参数和用法,我需要先回忆一下相关的知识。记得Smooth L1 Loss是结合了L1和L2损失的优点,在目标检测中常用,比如Faster R-CNN。参数方面,PyTorch里的SmoothL1Loss有几个参数,比如size_average、reduce、beta等。用户可能需要知道每个参数的作用,以及如何调整它们。 首先,我应该检查引用资料里的信息。引用[3]提到了Smooth L1 Loss的函数定义和应用示例,里面可能涉及参数设置。引用[4]讨论了L1和L2的优缺点,以及Smooth L1如何结合两者,这可能帮助解释应用场景。 用户的问题包括参数详解和应用场景,所以需要分两部分回答。参数部分需要解释每个参数的作用,比如beta控制过渡区间的大小,reduce和size_average影响损失计算的方式。应用场景方面,目标检测是主要的,特别是处理离群点的情况,还有需要平衡梯度稳定和收敛的情况。 要注意使用正确的LaTeX格式,比如数学表达式用$...$。例如,Smooth L1的公式需要正确展示,分段函数用cases环境。还要确保参数说明清晰,可能用列表或编号的方式。 另外,用户提供的引用中有示例代码,可以引用到参数用法的部分,比如beta的设置如何影响损失函数形状。还要注意引用标识的正确添加,比如在提到梯度稳定时引用[2]和[4]。 现在需要组织信息:先介绍Smooth L1 Loss的定义和公式,然后参数详解,每个参数的作用和默认值,接着应用场景,最后示例代码。可能还需要生成相关问题,比如其他损失函数的比较,参数调整的影响等。 需要确认PyTorch中SmoothL1Loss的参数是否有变化,比如是否beta是后来加入的,或者是否有默认值。根据引用[3]的代码示例,可能函数定义时没有显式设置beta,但实际现在PyTorch的文档中可能有beta参数,默认1.0。需要核对正确性。 最后,确保回答结构清晰,分点说明,符合用户要求的格式,同时自然引用文献。</think>### Smooth L1 Loss 参数详解及应用场景 #### 一、Smooth L1 Loss 定义 Smooth L1 Loss 结合了 L1 Loss 和 L2 Loss 的优点,其数学定义为: $$ \text{Smooth L1}(x) = \begin{cases} 0.5x^2 / \beta & \text{if } |x| < \beta \\ |x| - 0.5\beta & \text{otherwise} \end{cases} $$ 其中 $x$ 是预测值真实值的差值,$\beta$ 是控制平滑区间范围的参数[^2][^4]。 --- #### 二、参数详解(以 PyTorch 为例) 在 PyTorch 中,`torch.nn.SmoothL1Loss` 的主要参数如下: 1. **`beta`**(默认值:1.0) - **作用**:控制损失函数从二次函数(L2)过渡到线性函数(L1)的阈值。 - **调整效果**:$\beta$ 越大,平滑区间范围越宽;$\beta \to 0$ 时趋近于 L1 Loss2. **`reduction`**(默认值:`'mean'`) - 可选值:`'none'`(不降维)、`'mean'`(取均值)、`'sum'`(求和)。 - **示例**:若输入为 $N$ 个样本,`reduction='mean'` 会计算所有样本损失的平均值。 3. **`size_average` 和 `reduce`** - 旧版本兼容参数,建议优先使用 `reduction` 参数[^3]。 --- #### 三、应用场景 1. **目标检测**(如 Faster R-CNN) - **原因**:对边界框回归任务,Smooth L1 Loss 能抑制离群点(outliers)的梯度爆炸问题,同时保持对小误差的敏感性[^4]。 2. **需平衡梯度稳定性的场景** - 当数据中存在噪声或离群点时,Smooth L1 Loss 比 L2 Loss 更鲁棒;相比 L1 Loss,它在小误差区域提供更平滑的梯度。 3. **动态学习任务** - 例如:在训练初期使用较大 $\beta$ 加速收敛,后期调小 $\beta$ 以提高精度。 --- #### 四、代码示例(PyTorch) ```python import torch import torch.nn as nn # 定义参数 beta = 0.5 # 调整平滑区间 loss_fn = nn.SmoothL1Loss(beta=beta, reduction='mean') # 生成数据 y_hat = torch.randn(10, requires_grad=True) # 预测值 y = torch.randn(10) # 真实值 # 计算损失 loss = loss_fn(y_hat, y) print(loss) ``` 此代码展示了如何通过调整 $\beta$ 控制损失函数的形状。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值