L1与L2正则的比较

L1和L2正则化是机器学习中防止过拟合的重要手段。L1正则化产生稀疏模型,适合特征选择,通过拉普拉斯分布产生角点,部分权重为0。L2正则化通过高斯分布,使权重趋向于0但不为0,保持模型平滑。L1常用于Lasso回归,L2用于Ridge回归,两者在损失函数中引入不同范数,调整模型复杂度。

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

L1L1L1L2L2L2正则的区别

正则化(RegularizationRegularizationRegularization) 是机器学习中对原始损失函数引入惩罚项,以防止过拟合或提高模型泛化性能的一类方法的统称。所谓惩罚是指对损失函数中的某些参数做一些限制。此时目标函数变成了原始损失函数+惩罚项,常用的正则项一般有两种,英文称作l1−norml_{1}−norml1norml2−norml_{2}−norml2norm,中文称作L1L1L1正则化和L2L2L2正则化,或者L1L1L1范数和L2L2L2范数(实际是L2L2L2范数的平方)。

对于线性回归模型,使用L1L1L1正则化的模型叫做LassoLassoLasso回归,使用L2L2L2正则化的模型叫做RidgeRidgeRidge回归(岭回归)。

1. L1L1L1正则化

假设带有L1L1L1正则化的目标函数为:
J=J0+∣∣W∣∣1=J0+α∑∣w∣         (1)J=J_0 + ||W||_1 = J_0 + \alpha\sum|w|\ \ \ \ \ \ \ \ \ (1)J=J0+W1=J0+αw         (1)

其中,J0J_0J0为原始的损失函数,α∑∣w∣\alpha \sum |w|αw为L1正则化项,α\alphaα为正则化系数,www 表示特征的系数(x的参数),可以看到正则化项是对系数做了限制。L1正则化是指权值向量www中各个元素的绝对值之和,通常表示为∣∣w∣∣1||w||_1w1

L1L1L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为000 ,产生稀疏权重矩阵,进而防止过拟合。

L1L1L1正则化项相当于对原始损失函数J0J_0J0做了一个约束。我们令L=α∑∣w∣L = \alpha\sum|w|L=αw,那么整个目标函数可以写成:
J=J0+L     (2) J= J_0 + L \ \ \ \ \ (2) J=J0+L     (2)

我们的目的就是求出在约束条件LLL下,J0J_0J0取最小值的解。为了方便理解,我们考虑二维的情况,此时L=∣w1∣+∣w2∣L = |w_1| + |w_2|L=w1+w2

L1正则化图示

图中等高线是 J0J_0J0 的等高线,黑色菱形是 LLL 函数的图形。图中当等高线 J0J_0J0LLL 图形首次相交的地方就是最优解。上图中 J0J_0J0LLL 在一个顶点处相交,这个顶点就是最优解 w∗w^∗w

拓展到多维,LLL 函数就会有很多突出的角(二维情况下四个,多维情况下更多),J0J_0J0 与这些角接触的概率远大于与 LLL 其它部位接触的概率(这是很直觉的想象,突出的角比直线的边离等值线更近),而在这些角的位置上使很多权重为0。所以在最优解处,L1正则化就可以产生稀疏模型,进而可以用于特征选择。

α\alphaα正则化系数,可以控制 LLL 图形的大小,α\alphaα越小,LLL 图形越大,α\alphaα越大,LLL 图形越小。

L1L1L1正则化对所有参数的惩罚力度都一样,可以让一部分权重变为000,去除某些特征(权重为0则等效于去除),因此产生稀疏模型。

那么稀疏模型有什么好处呢?

稀疏化正则化项一个最重要的优势就在于实现特征的自动选择。所谓稀疏性,说白了就是模型的很多参数是0。通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(termtermterm)作为一个特征,那么特征数量会达到上万个(bigrambigrambigram)。但是只有少数特征对该模型有贡献,绝大部分特征是没有贡献的。在最小化目标函数时,需要考虑这些额外的特征,虽然能获得更小的训练误差,但在预测阶段,模型会考虑这些无用的特征,从而可能干扰模型的正确预测。

这种模型就是所谓的泛化性能不强,有过拟合的嫌疑。如果通过稀疏化正则化项得到一个稀疏模型,很多参数是000,此时我们就可以只关注系数是非零值的特征。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。这就是稀疏模型与特征选择的关系。

2. L2L2L2正则化

假设带有L2L2L2正则化的目标函数为:
J=J0+∣∣w∣∣22=J0+α∑w2         (3) J = J_0 + ||w||^2_2 = J_0+\alpha \sum w^2 \ \ \ \ \ \ \ \ \ (3) J=J0+w22=J0+αw2         (3)
L1L1L1正则化,www 表示特征的系数(xxx的参数),可以看到正则化项是对系数做了限制。L2L2L2正则化是指权值向量www中各个元素的平方和然后再求平方根(可以看到RidgeRidgeRidge回归的L2L2L2正则化项有平方符号),通常表示为∣∣w∣∣2||w||_2w2

L2L2L2范数符合高斯分布,是完全可微的。和L1L1L1相比,图像上为一个⚪。一般最优值不会在坐标轴上出现。在最小化正则项时,参数不断趋向于000,但并不是000

如下图:

L2正则化图示
相比于L1L1L1正则化,L2L2L2正则化的函数 LLLJ0J_0J0 第一次相交的地方出现在具有稀疏性的位置的概率就变得非常小了。这就从直观上来解释了为什么L1L1L1正则化能产生稀疏性,而L2L2L2正则化不能产生稀疏性的原因了。

L2L2L2正则化的作用:主要是为了防止过拟合

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

越是复杂的模型,越是尝试对所有样本进行拟合,包括异常点。这就会造成在较小的区间中产生较大的波动,这个较大的波动也会反映在这个区间的导数比较大。只有越大的参数才可能产生较大的导数。因此参数越小,模型就越简单。

为什么L2L2L2正则化能够得到值很小的参数???

我们通过线性回归,来看一下L2L2L2正则化解决过拟合问题。

假设要求解的参数为θ\thetaθhθ(x)h_{\theta}(x)hθ(x) 是假设函数。线性回归一般使用平方差损失函数。单个样本的平方差是hθ(x)−y)2h_{\theta}(x) - y)^2hθ(x)y)2,如果考虑所有样本,损失函数是对每个样本的平方差求和,假设有 mmm 个样本,线性回归的损失函数如下,
J(θ)=12m∑i=1m(hθ(x(i))−y(i))2        (4) J(\theta) = \frac{1}{2m} \sum^m_{i=1} (h_{\theta}(x^{(i)}) - y^{(i)})^2 \ \ \ \ \ \ \ \ (4) J(θ)=2m1i=1m(hθ(x(i))y(i))2        (4)

其梯度下降算法公式为:
θj=θj−α1m[∑i=1m(hθ(x(i)−y(i))xj(i)]        (5) \theta_j = \theta_j - \alpha \frac{1}{m}[\sum_{i=1}^m(h_{\theta}(x^{(i)}-y^{(i)})x_j^{(i)}] \ \ \ \ \ \ \ \ (5) θj=θjαm1[i=1m(hθ(x(i)y(i))xj(i)]        (5)

加入L2L2L2正则化后,其损失函数为
J(θ)=12∑i=1m((hθ(x(i))−y(i))2+λ∑i=1mθj2)        (6) J(\theta) = \frac{1}{2}\sum^m_{i=1}((h_{\theta}(x^{(i)}) - y^{(i)})^2 + \lambda\sum^m_{i=1}\theta_j^2) \ \ \ \ \ \ \ \ (6) J(θ)=21i=1m((hθ(x(i))y(i))2+λi=1mθj2)        (6)
其梯度下降算法公式为:
θj=θj−(α1m[∑i=1m(hθ(x(i)−y(i))xj(i)]+λθj)=θj(1−αλm)−(α1m∑i=1m(hθ(x(i)−y(i))xj(i))        (7) \theta_j = \theta_j - (\alpha \frac{1}{m}[\sum_{i=1}^m(h_{\theta}(x^{(i)}-y^{(i)})x_j^{(i)}] + \lambda \theta_j)=\theta_j(1-\alpha\frac{\lambda}{m}) - (\alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}-y^{(i)})x_j^{(i)}) \ \ \ \ \ \ \ \ (7) θj=θj(αm1[i=1m(hθ(x(i)y(i))xj(i)]+λθj)=θj(1αmλ)(αm1i=1m(hθ(x(i)y(i))xj(i))        (7)
可以看到,由于学习率 α>0,λ>0\alpha > 0, \lambda >0α>0,λ>0,且这两个值一般都是很小的正数,所以 0<1−αλm<10< 1-\alpha\frac{\lambda}{m} < 10<1αmλ<1,所以每次 θ\thetaθ 在更新的时候都会减小,λ\lambdaλ 越大,衰减的越快,这也是L2正则化可以获得更小的权重值的原因。

正如在线性回归中的应用,L2L2L2正则化就是在损失函数中加入一个L2L2L2范数和一个超参数λ\lambdaλL2L2L2范数用 ∣∣w∣∣2||w||^2w2 这种符号表示,它的意思是对于向量 www 中的各个数先求平方再加和。线性回归中加入的对于 θj\theta_jθj 求平方和就是一个L2范数。超参数λ\lambdaλ 则用于控制参数惩罚的程度。

我们在举个例子,来展示L2L2L2正则化如何解决过拟合的现象

来源:吴恩达机器学习课程

将上述公式分为两部分,左边部分即为原始的损失函数,右边部分为L2L2L2正则化项(注意:正则化项中不包含θ0\theta_0θ0)。λ\lambdaλ 为超参数,是人为设定的。为了最小化整个损失函数,那么就要减小 θ1\theta_1θ1 ~ θn\theta_nθn 的值。对于上图中的那种过拟合状态,加入正则项后,θ1\theta_1θ1 ~ θn\theta_nθn减小,也就是使得权重衰减,这样就会降低高阶项对于整个函数的影响,使得估计函数变得比较平滑。

可以想象一种极端的情况,如果λ\lambdaλ 为无穷大,那么 θ1\theta_1θ1 ~ θn\theta_nθn 趋近于0,那么整个式子就只剩一个θ0\theta_0θ0,为一条和y轴垂直的直线,这种状态为严重的欠拟合状态。可以看到,当λ\lambdaλ为0时,即为原来的状态,此时过拟合。所以会有一个恰当的λ\lambdaλ使得模型处于既不过拟合又不欠拟合的状态。

在未加入L2L2L2正则化发生过拟合时,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,在某些很小的区间里,函数值的变化很剧烈,也就是某些 www 值非常大。为此,L2L2L2 正则化的加入惩罚了权重变大的趋势,逼迫所有 www 尽可能趋向零但不为零(L2L2L2正则化的导数趋于零),导致权重较为平滑。

3. 直观理解为什么L1L1L1正则更稀疏,L2L2L2正则权重接近于0.

假设只有一个参数为www,损失函数为L(w)L(w)L(w),分别加上L1L1L1正则项和L2L2L2正则项后有:

JL1(w)=L(w)+λ∣w∣JL2(w)=L(w)+λw2 J_{L1}(w)=L(w) +\lambda|w| \\ J_{L2}(w)=L(w)+\lambda w^{2} JL1(w)=L(w)+λwJL2(w)=L(w)+λw2
这里,假设L(w)L(w)L(w)在0处的导数值为d0d_{0}d0,即:
∂L(w)∂w∣w=0=d0 \left.\frac{\partial L(w)}{\partial w}\right|_{w=0}=d_{0} wL(w)w=0=d0
这时,可以推导使用L1L1L1正则和L2L2L2正则时的导数。

当引入L2L2L2正则项,在000处的导数:∂JL2(w)∂w∣w=0=d0+2×λ×w=d0\left.\frac{\partial J_{L 2}(w)}{\partial w}\right|_{w=0}=d_{0}+2 \times \lambda \times w=d_{0}wJL2(w)w=0=d0+2×λ×w=d0

引入L1L1L1正则项,在000处的导数:
∂JL1(w)∂w∣w=0−=d0−λ∂JL1(w)∂w∣w=0+=d0+λ \begin{array}{l} \left.\frac{\partial J_{L 1}(w)}{\partial w}\right|_{w=0^{-}}=d_{0}-\lambda \\ \left.\frac{\partial J_{L 1}(w)}{\partial w}\right|_{w=0^{+}}=d_{0}+\lambda \end{array} wJL1(w)w=0=d0λwJL1(w)w=0+=d0+λ
可见,引入L2L2L2正则时,损失函数在0处的导数仍是d0d_{0}d0 ,无变化。

而引入L1L1L1正则后,损失函数在000处的导数有一个突变。从d0−λd_{0}-\lambdad0λd0+λd_{0}+\lambdad0+λ。若d0−λd_{0}-\lambdad0λd0+λd_{0}+\lambdad0+λ异号,则在000处会是一个极小值点。因此,优化时,很可能优化到该极小值点上,即w=0w=0w=0处。

当然,这里只解释了有一个参数的情况,如果有更多的参数,也是类似的。因此,用L1正则更容易产生稀疏解。

4. 从先验概率分布来了解,为何L1正则更加稀疏?

假设,我们的数据数据是稀疏的,不妨就认为它来自某种laplacelaplacelaplace分布。其中laplacelaplacelaplace的概率密度函数图像如下图所示:

再看看laplacelaplacelaplace分布的概率密度函数:
f(x∣μ,b)=12bexp⁡(−∣x−μ∣b) f(x \mid \mu, b)=\frac{1}{2 b} \exp \left(-\frac{|x-\mu|}{b}\right) f(xμ,b)=2b1exp(bxμ)
如果取对数,剩下的是一个一次项∣x−u∣|x-u|xu,这就是L1L1L1范式。所以用L1L1L1范式去正则,就假定了你的数据是稀疏的laplacelaplacelaplace分布。

5. 总结

  • L1L1L1正则化项是模型各个参数的绝对值之和。L2L2L2正则化项是模型各个参数的平方和的开方值。
  • L1L1L1正则化可以使部分权重为000,产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择;一定程度上,L1L1L1也可以防止过拟合,当L1L1L1的正则化系数很小时,得到的最优解会很小,可以达到和L2L2L2正则化类似的效果。
  • L2L2L2正则化通过权重衰减,可以使所有的权重趋向于000,但不为000,导致模型权重参数较小且较为平滑,防止模型过拟合(overfittingoverfittingoverfitting);
  • L2L2L2正则化的效果是对原最优解的每个元素进行不同比例的放缩;L1L1L1正则化则会使原最优解的元素产生不同量的偏移,并使某些元素为000,从而产生稀疏性。

参考

  1. https://www.cnblogs.com/zingp/p/10375691.html
  2. https://www.jianshu.com/p/27ac92472205
  3. https://www.cnblogs.com/heguanyou/p/7582578.html
  4. https://blog.youkuaiyun.com/jinping_shi/article/details/52433975
  5. https://blog.youkuaiyun.com/b876144622/article/details/81276818
### L1 L2 正则化的基本概念 在机器学习中,**L1正则化(Lasso)****L2正则化(Ridge)**是两种常见的正则化方法,它们通过向损失函数中引入额外的惩罚项来控制模型复杂度,从而提升模型的泛化能力并减少过拟合现象。L1正则化对权重的绝对值进行惩罚,而L2正则化则对权重的平方进行惩罚。 --- ### 数学表达形式 - **L1正则化**的损失函数形式为: $$ J_{L1}(\theta) = \text{Loss}(\theta) + \lambda \sum_{i=1}^{n} |\theta_i| $$ 其中,$\lambda$ 是正则化系数,用于平衡原始损失正则化项的重要性 [^3]。 - **L2正则化**的损失函数形式为: $$ J_{L2}(\theta) = \text{Loss}(\theta) + \lambda \sum_{i=1}^{n} \theta_i^2 $$ 这里的 $\theta_i$ 表示模型参数 [^4]。 --- ### L1 L2 正则化区别 #### 1. 稀疏性(Sparsity) L1正则化倾向于生成稀疏的权重矩阵,即部分特征对应的权重会被压缩为零。这种特性使得L1正则化可以作为特征选择的一种手段,适用于需要降维或强调关键特征的场景 [^1]。 相比之下,L2正则化不会将权重完全压缩到零,而是让所有权重趋向于较小的数值。因此,它保留了所有特征的信息,但降低了模型的复杂性 [^2]。 #### 2. 对异常值的敏感性 由于L2正则化使用平方项,对较大的权重施加更重的惩罚,因此其对异常值更加敏感。而L1正则化基于绝对值,在面对较大权重时惩罚力度增长较慢,因此相对鲁棒一些 [^4]。 #### 3. 凸优化性质 L2正则化具有更强的凸性,使得优化过程更容易收敛到全局最优解。而L1正则化虽然也具备一定的凸性,但由于其不可导点的存在(如0点),在优化过程中可能需要采用次梯度等特殊处理 [^3]。 --- ### 应用场景 #### L1正则化适用场景: - 特征维度高且存在大量冗余特征。 - 需要简化模型并提取重要特征。 - 在线性回归、逻辑回归中进行特征选择 [^1]。 #### L2正则化适用场景: - 模型参数较多且特征之间可能存在共线性。 - 希望保留所有特征信息,同时防止过拟合。 - 在深度神经网络中常用于权重衰减(weight decay)策略 [^2]。 --- ### 实现方式示例(Python) 以下是一个使用 `scikit-learn` 库实现 L1 L2 正则化的简单线性回归模型示例: ```python from sklearn.linear_model import Lasso, Ridge from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 生成模拟数据 X, y = make_regression(n_features=20, n_informative=5, noise=0.1) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # L1 正则化 (Lasso) lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) y_pred_lasso = lasso.predict(X_test) print("Lasso MSE:", mean_squared_error(y_test, y_pred_lasso)) # L2 正则化 (Ridge) ridge = Ridge(alpha=0.1) ridge.fit(X_train, y_train) y_pred_ridge = ridge.predict(X_test) print("Ridge MSE:", mean_squared_error(y_test, y_pred_ridge)) ``` 上述代码展示了如何分别使用 L1 L2 正则化训练模型,并评估其在测试集上的性能表现 。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值