梳理L1、L2与Smooth L1

article/2025/9/18 15:59:14

关于L1、L2的范数、损失函数和正则化,之前一直混淆这几个概念,故对这几天看过的资料进行了学习总结。

范数(norm)是数学中的一种基本概念。在泛函分析中,它定义在赋范线性空间中,并满足一定的条件,即①非负性;②齐次性;③三角不等式。它常常被用来度量某个向量空间(或矩阵)中的每个向量的长度或大小。

首先以L2范数为例对范数做一个简单的说明:

L2范数:

假设 X X X是n维的特征 X = ( x 1 , x 2 , x 3 , … , x n ) X=(x_1,x_2,x_3,…,x_n) X=(x1,x2,x3,,xn)

则L2范数: ∥ X ∥ 2 = ∑ i = 1 n x i 2 \left \|X\right \|_2=\sqrt{\sum_{i=1}^{n}x_i^2} X2=i=1nxi2

一、作为损失函数

本部分内容大多来源于回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比。

公式对比

  • L 1 L_1 L1

    • 公式: L 1 = ∣ f ( x ) − Y ∣ L_1=\left|f(x)-Y\right| L1=f(x)Y

    • 求导: L 1 ′ = ± f ′ ( x ) L'_1=\pm{f'(x)} L1=±f(x)

  • L 2 L_2 L2

    • 公式: L 2 = ∣ f ( x ) − Y ∣ 2 L_2=\left |f(x)-Y\right |^2 L2=f(x)Y2

    • 求导: L 2 ′ = 2 f ′ ( x ) ( f ( x ) − Y ) L'_2=2f'(x)(f(x)-Y) L2=2f(x)(f(x)Y)

  • S m o o t h L 1 Smooth\;L_1 SmoothL1

    • 公式:

      S m o o t h L 1 = { 0.5 ( f ( x ) − Y ) 2 if  ∣ f ( x ) − Y ∣ < 1 ∣ f ( x ) − Y ∣ − 0.5 if  f ( x ) − Y < − 1 o r f ( x ) − Y > 1 Smooth\;L_1=\begin{cases} 0.5(f(x)-Y)^2 & \text{ if } \left|f(x)-Y\right|<1 \\ \left|f(x)-Y\right|-0.5 & \text{ if } f(x)-Y<-1\; or\;f(x)-Y>1 \end{cases} SmoothL1={0.5(f(x)Y)2f(x)Y0.5 if f(x)Y<1 if f(x)Y<1orf(x)Y>1

    • 求导:

      S m o o t h L 1 ′ = { f ′ ( x ) ( f ( x ) − Y ) if  ∣ f ( x ) − Y ∣ < 1 ± 1 if  f ( x ) − Y < − 1 o r f ( x ) − Y > 1 Smooth\;L'_1=\begin{cases} f'(x)(f(x)-Y) & \text{ if } \left|f(x)-Y\right|<1 \\ \pm 1 & \text{ if } f(x)-Y<-1\; or\;f(x)-Y>1 \end{cases} SmoothL1={f(x)(f(x)Y)±1 if f(x)Y<1 if f(x)Y<1orf(x)Y>1

上述三个函数的图像对比如下:

L1、L2与Smooth L1图像对比

L1 Loss

L1 Loss即平均绝对误差(Mean Absolute Error,MAE) ,是指模型预测值𝑓(𝑥)和真实值𝑦之间距离的平均值,其公式如下:
M A E = ∑ i = 1 n ∣ f ( x i ) − y i ∣ n MAE=\frac{\sum_{i=1}^{n}\left|f(x_i)-y_i\right|}{n} MAE=ni=1nf(xi)yi
𝐿1对𝑥的导数为常数,在训练的后期,预测值与ground truth差异很小时,𝐿1的导数的绝对值仍然为1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

tips:

  • 平均绝对误差MAE

  • 在0处不可导

  • 对离群点不敏感

  • 梯度稳定,不会导致梯度爆炸(对很小的损失值,梯度也很大)

L2 Loss

L2 Loss即为均方误差(Mean Square Error,MSE),是模型预测值𝑓(𝑥)与真实样本值𝑦之间差值平方的平均值,其公式如下
M S E = ∑ i = 1 n ( f ( x i ) − y i ) 2 n MSE=\frac{\sum_{i=1}^{n}(f(x_i)-y_i)^2}{n} MSE=ni=1n(f(xi)yi)2
其中, y i y_i yi f ( x i ) f(x_i) f(xi)分别表示第𝑖个样本的真实值及其对应的预测值,𝑛为样本的个数。

MSE的函数曲线光滑、连续,处处可导,便于使用梯度下降算法,是一种常用的损失函数。 而且,随着误差的减小,梯度也在减小,这有利于收敛,即使使用固定的学习速率,也能较快的收敛到最小值。

当𝑦和𝑓(𝑥)也就是真实值和预测值的差值大于1时,会放大误差;而当差值小于1时,则会缩小误差,这是平方运算决定的。MSE对于较大的误差(>1)给予较大的惩罚,较小的误差(<1)给予较小的惩罚。也就是说,对离群点比较敏感,受其影响较大。

tips:

  • 函数曲线连续,处处可导

  • 随着误差减小,梯度也减小,有利于快速收敛

  • 常用于解决回归问题

MSE和MAE的选择

从梯度的求解以及收敛上,MSE是优于MAE的。MSE处处可导,而且梯度值也是动态变化的,能够快速的收敛;而MAE在0点处不可导,且其梯度保持不变。对于很小的损失值其梯度也很大,在深度学习中,就需要使用变化的学习率,在损失值很小时降低学习率。

对离群(异常)值得处理上,MAE要明显好于MSE。

如果离群点(异常值)需要被检测出来,则可以选择MSE作为损失函数;如果离群点只是当做受损的数据处理,则可以选择MAE作为损失函数。

总之,MAE作为损失函数更稳定,并且对离群值不敏感,但是其导数不连续,求解效率低。另外,在深度学习中,收敛较慢。MSE导数求解速度高,但是其对离群值敏感,不过可以将离群值的导数设为0(导数值大于某个阈值)来避免这种情况。

在某些情况下,上述两种损失函数都不能满足需求。例如,若数据中90%的样本对应的目标值为150,剩下10%在0到30之间。那么使用MAE作为损失函数的模型可能会忽视10%的异常点,而对所有样本的预测值都为150。这是因为模型会按中位数来预测。而使用MSE的模型则会给出很多介于0到30的预测值,因为模型会向异常点偏移。

这种情况下,MSE和MAE都是不可取的,简单的办法是对目标变量进行变换,或者使用别的损失函数,例如:Huber,Log-Cosh以及分位数损失等。

Smooth L1 Loss

在Faster R-CNN以及SSD中对边框的回归使用的损失函数都是Smooth L1 作为损失函数,
S m o o t h L 1 = { 0.5 ( f ( x ) − Y ) 2 if  ∣ f ( x ) − Y ∣ < 1 ∣ f ( x ) − Y ∣ − 0.5 otherwise  Smooth\;L_1=\begin{cases} 0.5(f(x)-Y)^2 & \text{ if } \left|f(x)-Y\right|<1 \\ \left|f(x)-Y\right|-0.5 & \text{ otherwise } \end{cases} SmoothL1={0.5(f(x)Y)2f(x)Y0.5 if f(x)Y<1 otherwise 
Smooth L1 能从两个方面限制梯度:

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

Smooth L1 实际上就是一个分段函数,在[-1,1]之间实际上就是L2损失,这样解决了L1的不光滑问题,在[-1,1]区间外,实际上就是L1损失,这样就解决了离群点梯度爆炸的问题。

Smooth L1 实现 (PyTorch)

def _smooth_l1_loss(input, target, reduction='none'):# type: (Tensor, Tensor) -> Tensort = torch.abs(input - target)ret = torch.where(t < 1, 0.5 * t ** 2, t - 0.5)if reduction != 'none':ret = torch.mean(ret) if reduction == 'mean' else torch.sum(ret)return ret      

也可以添加个参数beta 这样就可以控制,什么范围的误差使用MSE,什么范围内的误差使用MAE了。

def smooth_l1_loss(input, target, beta=1. / 9, reduction = 'none'):"""very similar to the smooth_l1_loss from pytorch, but withthe extra beta parameter"""n = torch.abs(input - target)cond = n < betaret = torch.where(cond, 0.5 * n ** 2 / beta, n - 0.5 * beta)if reduction != 'none':ret = torch.mean(ret) if reduction == 'mean' else torch.sum(ret)return ret

小结

对于大多数CNN网络,我们一般是使用L2-loss而不是L1-loss,因为L2-loss的收敛速度要比L1-loss要快得多。

对于边框预测回归问题,通常也可以选择平方损失函数(L2损失),但L2范数的缺点是当存在离群点(outliers)的时候,这些点会占loss的主要组成部分。比如说真实值为1,预测10次,有一次预测值为1000,其余次的预测值为1左右,显然loss值主要由1000决定。所以FastRCNN采用稍微缓和一点绝对损失函数(smooth L1损失),它是随着误差线性增长,而不是平方增长。

Smooth L1 和 L1 Loss 函数的区别在于,L1 Loss 在0点处导数不唯一,可能影响收敛。Smooth L1的解决办法是在 0 点附近使用平方函数使得它更加平滑。

Smooth L1的优点

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

二、作为正则项

正则化为什么可以避免过拟合?

正规化是防止过拟合的一种重要技巧。正则化通过降低模型的复杂性, 达到避免过拟合的问题。

过拟合的时候,拟合函数的系数往往非常大,为什么?过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。

L1正则

L1正则常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,我们可以将0对应的特征遗弃,进而用来选择特征。一定程度上L1正则也可以防止模型过拟合。

假设L(W)是未加正则项的损失,λ是一个超参,控制正则化项的大小。

则最终的损失函数: L = L ( W ) + λ ∑ i = 1 n ∣ w i ∣ L=L(W)+\lambda \sum_{i=1}^{n}\left|w_i\right| L=L(W)+λi=1nwi

L2正则

梯度衰减(weights decay),主要用来防止模型过拟合,直观上理解就是L2正则化是对于大数值的权重向量进行严厉惩罚。

则最终的损失函数: L = L ( W ) + λ ∑ i = 1 n w i 2 L=L(W)+\lambda \sum_{i=1}^{n}w_i^2 L=L(W)+λi=1nwi2

为什么L1会产生稀疏解?

可以通过损失函数对w求导来证明,当 w i w_i wi小于1的时候,L2的惩罚项会越来越小,而L1还是会非常大,所以L1会使参数为0,而L2很难。

求导公式待补充

参考资料

L1和L2 详解(范数、损失函数、正则化)

回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比

损失函数:L1 loss, L2 loss, smooth L1 loss


http://chatgpt.dhexx.cn/article/D5VgZDkX.shtml

相关文章

L1范数与L2范数的区别与联系

L1范数与L2范数的区别与联系 一、过拟合与正则化 过拟合指的就是在机器学习模型训练过程中把数据学习的太彻底&#xff0c;以至于把噪声数据的特征也学习到了&#xff0c;这样会导致在测试的时候不能够很好地识别数据&#xff0c;即不能正确的分类&#xff0c;模型测试的时候不…

L1正则化及其稀疏性的傻瓜解释

本文翻译自&#xff1a;L1 Norm Regularization and Sparsity Explained for Dummies&#xff0c; 特别感谢原作者Shi Yan&#xff01; 0. 前言 好吧&#xff0c;我想我就是很笨的那一类人。 当理解一个抽象的数学概念&#xff0c;我必须把它转化成一张图像&#xff0c;然后在…

L1/L2范数

文中内容为一下博文整理而来 https://blog.csdn.net/iterate7/article/details/75443504 https://blog.csdn.net/zhaomengszu/article/details/81537197 什么是范数 范数是具有“长度”概念的函数。在向量空间内&#xff0c;为所有的向量的赋予非零的增长度或者大小。不同的范…

机器学习——L1范数充当正则项,让模型获得稀疏解,解决过拟合问题

问&#xff1a;使用L2范数正则项比L1范数正则项得到的是更为稀疏的解。 答&#xff1a;错误&#xff0c;L1范数正则项得到的是更稀疏的解。因为在L1正则项中&#xff0c;惩罚项是每个参数绝对值之和&#xff1b;而在L2正则项中&#xff0c;惩罚项是每个参数平方的和。L1正则项…

L1、L2的作用

L范式都是为了防止模型过拟合&#xff0c;所谓范式就是加入参数的约束。 L1的作用是为了矩阵稀疏化。假设的是模型的参数取值满足拉普拉斯分布。 L2的作用是为了使模型更平滑&#xff0c;得到更好的泛化能力。假设的是参数是满足高斯分布。 借用公众号python与算法社区的内容20…

机器人设计范式

“ 本期技术干货&#xff0c;我们邀请到了小米机器人实验室工程师徐海望&#xff0c;和大家分享在机器人学领域中&#xff0c;关系到机器人的行为模式或操作模型的三种行为执行逻辑&#xff0c;分别是分级范式&#xff08;hierarchical paradigm&#xff09;、反应范式&#xf…

数据库设计之范式与反范式

范式设计 什么是范式&#xff1f; 范式来自英文Normal Form&#xff0c;简称NF。要想表之间设计—个好的关系&#xff0c;必须使关系 满足一定的约束条件&#xff0c;此约束已经形成了规范&#xff0c;分成几个等级&#xff0c;一级比一级要求 得严格。满足这些规范的数据库是…

详解数据库的第一范式、第二范式、第三范式、BCNF范式

版权声明&#xff1a;本文转自小小呆原创文章 https://blog.csdn.net/gui951753/article/details/79609874 第一范式 定义以及分析:问题研究&#xff1a; 第二范式 必备知识点定义分析&#xff1a;解决办法&#xff1a;问题研究&#xff1a; 第三范式&#xff1a; 定义&…

关系范式

一、数据需要规范化的原因&#xff1a; 1.数据冗余大 2.防止更新异常 3.防止插入异常 4.删除异常 数据库范式分为1NF&#xff0c;2NF&#xff0c;3NF&#xff0c;BCNF&#xff0c;4NF&#xff0c;5NF 一张表按照范式的不同等级划分将分为多张表&#xff0c;每张表都是一个…

9.3范式

第一范式&#xff1a;定义&#xff1a;不包含非原子项属性的关系是第一范式的关系。 第二范式&#xff1a;定义&#xff1a;如果R(U,F)1NF,并且R中的每个非属性都完全函数依赖于主键&#xff0c;则R&#xff08;U,F&#xff09; 2NF。可以用模式分解的办法将非第二范式关系分解…

数据库——范式

范式 1、范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。可以理解为&#xff0c;一张数据表的设计结构需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式的英文名称是Normal Form&a…

范式的判断:方法+例题

范式的判断 例1&#xff1a;R&#xff08;A&#xff0c;B&#xff0c;C&#xff09;&#xff0c;F&#xff5b;A→B&#xff0c;B→A&#xff0c;C→A&#xff5d;&#xff0c;请问这是第几范式&#xff1f; 判断步骤&#xff1a;一图了解范式 一、首先判断候选键&#xff1…

mysql范式

MySQL 三大范式 为什么需要数据规范化&#xff1f; 信息重复 更新异常 插入异常 无法正常显示信息 删除异常 丢失有效的信息设计关系型数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&#xff0c;这些不同的规范要求被称为不同的范式&#xff…

BNF范式(巴科斯范式)

BNF范式&#xff08;巴科斯范式&#xff09; 是一种用递归的思想来表述计算机语言符号集的定义规范。 基本结构&#xff1a; <non-terminal> :: <replacement> non-terminal意为非终止符&#xff0c;就是说我们还没有定义完的东西&#xff0c;还可以继续由右边的r…

第一、二、三范式的简单理解

范式 范式&#xff1a; 范式是符合某一种级别的关系模式的集合&#xff0c;表示一个关系内部属性之间的联系何合理化程度 粗略理解&#xff1a; 就是一张数据表的表结构所符合的某种设计标准的级别 数据库范式分为: 第一范式(1NF),第二范式(2NF),第三范式(3NF),BCNF(巴斯范式/鲍…

什么是范式?

原创不易,麻烦点个关注,点个赞,谢谢各位。 范式是符合某一种级别的关系模式的集合。 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。 范式的种类: 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) BC范式(BCNF) 第四范式(4NF) 第五范式(5NF) 1NF的定义…

范式及反范式

** 什么是范式&#xff1f; ** 范式来自英文Normal Form&#xff0c;简称NF。MySQL是关系型数据库&#xff0c;但是要想设计—个好的关 系&#xff0c;必须使关系满足一定的约束条件&#xff0c;此约束已经形成了规范&#xff0c;分成几个等级&#xff0c;一级比 一级要求得…

数字签名算法

数字签名算法主要包含RSA、DSA、ECDSA三种算法 1. 它的消息传递操作是&#xff1a; 由消息发送方构建密匙对&#xff0c;由消息发送的一方公布公钥至消息接收方&#xff0c;消息发送方对消息用私钥做签名处理消息接收方用公钥对消息做验证 2. RSA签名算法主要分为MD系列和SH…

数字签名的应用实例

一 安全信息公告 一些信息安全方面的组织会在其网站上发布一些关于安全漏洞的警告&#xff0c;那么这些警告信息是否真的是该组织发布的呢&#xff1f;我们如何确认发布这些信息的网站没有被第三方篡改呢&#xff1f; 在这样的情况下&#xff0c;就可以使用数字签名&#xff…

openssl数字签名

实验步骤 1. 创建明文文档plain.txt&#xff0c;写入内容。 2. &#xff08;打开bin目录下的exe文件运行&#xff09;计算plain.txt的哈希值&#xff0c;输出到文件digest.txt。 注意这个地方是sha1 是数字1而不是字母L 3. 利用RSA算法对摘要进行签名。 &#xff08;1&#…