L1、L2正则化

本文详细解释了L1与L2正则化的基本概念及其在机器学习中的应用,包括它们如何帮助防止过拟合,以及从几何、凸优化和先验知识角度对L1产生稀疏解、L2产生平滑解的原因进行了探讨。

一、什么是L1、L2正则化(Regularization)

参考文献:https://blog.youkuaiyun.com/jinping_shi/article/details/52433975
机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1-norm和ℓ2-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。

L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。
对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为 ||w||1 | | w | | 1
L2正则化是指权值向量w
中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为 ||w||2 | | w | | 2

L0正则化:非零参数的个数

二、正则化的作用是什么

  1. L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
  2. L2正则化产生平滑解,获得值很小的参数,可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

1)L1、L2怎么防止过拟合的?
L1会自动地选择很少一部分变量构造模型,将一些参数变为0,也就意味着最终的近似解只依赖很少的变量。通过简化模型防止过拟合。
L2控制所有特征的权重,每个参数值都会很小。一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象

2)参数值越小代表模型越简单吗?
L2拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。

3)L0正则可以做特征选择吗
从直观上看,利用非零参数的个数,可以很好的来选择特征,实现特征稀疏的效果,具体操作时选择参数非零的特征即可。但因为L0正则化很难求解,是个NP难问题,因此一般采用L1正则化。L1正则化是L0正则化的最优凸近似,比L0容易求解,并且也可以实现稀疏的效果。

三、为什么L1可以产生稀疏解、L2可以产生平滑解

几何角度直观理解

参考文献
https://www.zhihu.com/question/37096933?sort=created

这里写图片描述
这里写图片描述
关于上面的等价,类似于拉格朗日乘子法,把约束变成无约束。
平方误差项在等值线的中心取到最小。
等值线越往外越大。
正则化项约束了参数不能随心所欲的取,即必须满足约束,解必须在蓝色区域内,而同时要使得等值线的值尽可能小,因此,最优解一定是在等值线与边界首次相交的地方。

等值线与角接触的机率会远大于与其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型。
L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此等值线与L2等值线相交时使得w1或w2等于零的机率小了许多。
西瓜书上 p253图
这里写图片描述

凸优化角度理解

参考文献
https://www.zhihu.com/question/37096933?sort=created
这里写图片描述

x=0 x = 0 是一个极小值点只要保证施加L1后 x=0 x = 0 处左右两边导数异号就行。原函数用 f(x) f ( x ) 表示,则施加 L1 L 1 x=0 x = 0 处左右两边导数分别是 f(0)C f ′ ( 0 ) − C f(0)+C f ′ ( 0 ) + C ,只要 C>|f(0)| C > | f ′ ( 0 ) | 就能保证异号。
x=0 x = 0 是一个极小值点,对于 L2 L 2 ,需要保证费用函数在0处的导数为0。 f(0)=0 f ′ ( 0 ) = 0
感受两个条件的强弱,就知道为什么 L1 L 1 更容易得到稀疏解了。

先验知识角度理解

参考文献
https://www.zhihu.com/question/37096933?sort=created
L1,L2范式来自于对参数 w w 的先验知识,模型参数考虑了数据先验,模型效果当然就更好。
参数w 的分布来自于高斯分布,那么就应该在代价函数中加入数据先验P(x),一般由于推导和计算方便会加入对数似然,也就是log(P(x))。如果你去看看高斯分布的概率密度函数P(x),你会发现取对数后的log(P(x))就剩下一个平方项了,这就是L2范式的由来–高斯先验.
参数w的分布是稀疏的,不妨就认为它来自某种laplace分布.不知你是否见过laplace分布的概率密度函数,我贴出一张维基上的图,
这里写图片描述
laplace分布是尖尖的分布,是不是很像一个pulse?从这张图上,你应该就能看出,服从laplace分布的数据就是稀疏的了(只有很小的概率有值,大部分概率值都很小或为0).
再看看laplace分布的概率密度函数
这里写图片描述
如果取对数,剩下的是一个一次项|x-u|,这就是L1范式.
所以用L1范式去正则,就假定了你的参数是laplace分布,是稀疏的.

### L1正则化与L2正则化的概念 在机器学习和深度学习领域,L1正则化和L2正则化是用于防止过拟合的重要技术。这两种方法的核心思想是在损失函数中加入额外的惩罚项,从而约束模型复杂度。 #### L1正则化 L1正则化通过在损失函数中增加权重绝对值之和作为惩罚项来实现正则化[^1]。这种形式的正则化通常被称为拉普拉斯正则化或Lasso回归。它的一个显著特点是能够生成稀疏解,即部分特征对应的权重会被精确设置为零[^2]。这一特性使得L1正则化非常适合于高维数据中的特征选择任务,因为它能有效剔除无关紧要的特征[^3]。 #### L2正则化 相比之下,L2正则化采用的是权重平方和的形式作为惩罚项。这种方法又称为岭回归(Ridge Regression)。不同于L1正则化,L2正则化不会使任何权重完全降为零;相反,它倾向于缩小所有权重的大小并均匀分布这些权重到各个特征上。因此,在实际应用中,L2正则化更注重平滑处理而非直接删除变量。 --- ### L1正则化与L2正则化的区别 以下是两者的主要差异: | **对比维度** | **L1正则化** | **L2正则化** | |---------------------|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| | **稀疏性** | 能够产生稀疏解决方案,即将一些不重要的特征权重设为0,适用于特征选择场景 | 不会产生严格意义上的稀疏性,而是让所有的权重都变得较小 | | **对异常值敏感程度**| 对异常值相对较为稳健 | 更容易受到极端值的影响 | | **优化难度** | 寻找全局最优解可能较困难 | 数学性质较好,求解过程更加稳定 | 具体来说,由于L1范数不可微分的特点,其最优化算法收敛速度可能会慢于基于二次型目标函数构建起来的标准梯度下降法所对应的情况下的表现水平。然而正是如此才成就了前者独特的“压缩感知”能力——即使面对大量冗余输入也能提取出真正有意义的信息片段出来加以利用。 --- ### 应用场合分析 - 当面临海量候选属性却只希望保留少数几个关键因素参与建模时,则优先考虑引入L1规范化机制; - 如果仅仅是为了抑制过度复杂的假设空间规模扩张趋势的话那么选用后者往往更为合适一点因为这样既可以维持较高的数值稳定性同时也无需担心丢失掉潜在有用的知识成分。 此外值得注意的一点就是尽管二者均属于线性变换范畴之内但是各自侧重方向存在本质差别所以并不能简单地说哪一个更好或者更适合某种特定类型的题目解答需求而已实际上更多时候还是取决于具体的业务背景以及相应的先验知识积累状况等因素综合考量之后再做决定才是明智之举。 ```python import numpy as np from sklearn.linear_model import Lasso, Ridge # 构造简单的模拟数据集 X = np.array([[1, 2], [3, 4]]) y = np.array([5, 6]) # 使用L1正则化训练模型 lasso_reg = Lasso(alpha=0.1) lasso_reg.fit(X, y) print("L1正则化后的系数:", lasso_reg.coef_) # 使用L2正则化训练模型 ridge_reg = Ridge(alpha=0.1) ridge_reg.fit(X, y) print("L2正则化后的系数:", ridge_reg.coef_) ``` 上述代码展示了如何分别运用`scikit-learn`库里的`Lasso`类和`Ridge`类来进行不同种类别的参数估计操作流程演示说明文档链接如下所示. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值