深入理解L1、L2正则化

本文介绍机器学习中L1和L2正则化的基本原理及其应用。L1正则化可使模型参数稀疏化,适用于特征选择;L2正则化则有助于防止模型过拟合。通过对比两种正则化方式下的损失函数图像,揭示了它们各自的特点及作用。

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

原文链接: https://www.cnblogs.com/zingp/p/10375691.html

1 正则化的概念

  • 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数+额外项,常用的额外项一般有两种,英文称作ℓ1−𝑛𝑜𝑟𝑚和ℓ2−𝑛𝑜𝑟𝑚,中文称作L1正则化L2正则化,或者L1范数和L2范数(实际是L2范数的平方)。

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

  • 线性回归L1正则化损失函数:

\min_w [\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda \|w\|_1 ]........(1)

  • 线性回归L2正则化损失函数:

\min_w[\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda\|w\|_2^2] ........(2)

  • 公式(1)(2)中𝑤表示特征的系数(𝑥的参数),可以看到正则化项是对系数做了限制。L1正则化和L2正则化的说明如下:
    • L1正则化是指权值向量𝑤w中各个元素的绝对值之和,通常表示为\|w\|_1
    • L2正则化是指权值向量𝑤w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为\|w\|_2
    • 一般都会在正则化项之前添加一个系数\lambda。Python中用\alpha表示,这个系数需要用户指定(也就是我们要调的超参)。

2 正则化的作用

  • L1正则化可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,可以用于特征选择。
    • 稀疏性,说白了就是模型的很多参数是0。通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,很多参数是0,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,即使去掉对模型也没有什么影响,此时我们就可以只关注系数是非零值的特征。这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能。
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。

3 L1正则化与稀疏性

  • 事实上,”带正则项”和“带约束条件”是等价的
  • 为了约束w的可能取值空间从而防止过拟合,我们为该最优化问题加上一个约束,就是w的L1范数不能大于m:

\begin{cases} \min \sum_{i=1}^{N}(w^Tx_i - y_i)^2 \\ s.t. \|w\|_1 \leqslant m. \end{cases}........(3)

  • 问题转化成了带约束条件的凸优化问题,写出拉格朗日函数:


\sum_{i=1}^{N}(w^Tx_i - y_i)^2 + \lambda (\|w\|_1-m)........(4)

  • 设𝑊∗和𝜆∗是原问题的最优解,则根据𝐾𝐾𝑇条件得:

\begin{cases} 0 = \nabla_w[\sum_{i=1}^{N}(W_*^Tx_i - y_i)^2 + \lambda_* (\|w\|_1-m)] \\ 0 \leqslant \lambda_*. \end{cases}........(5)

  • 仔细看上面第一个式子,与公式(1)其实是等价的,等价于(3)式

  • 设L1正则化损失函数:J = J_0 + \lambda \sum_{w} |w|,其中J_0 = \sum_{i=1}^{N}(w^Tx_i - y_i)^2原始损失函数,加号后面的一项是L1正则化项,𝜆是正则化系数

  • 注意到L1正则化是权值的绝对值之和,𝐽是带有绝对值符号的函数,因此𝐽是不完全可微的。机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数J_0后添加L1正则化项时,相当于对J_0做了一个约束。令L=\lambda \sum_w|w|,则J=J_0+L,此时我们的任务变成在𝐿约束下求出J_0取最小值的解。

  • 考虑二维的情况,即只有两个权值𝑤1和𝑤2,此时𝐿=|𝑤1|+|𝑤2|对于梯度下降法,求解J_0的过程可以画出等值线,同时L1正则化的函数𝐿也可以在𝑤1、𝑤2的二维平面上画出来。如下图:
    image

  • 上图中等值线是J_0的等值线,黑色方形是𝐿函数的图形。在图中,当J_0等值线与𝐿图形首次相交的地方就是最优解。上图中J_0与𝐿在𝐿的一个顶点处相交,这个顶点就是最优解。注意到这个顶点的值是(𝑤1,𝑤2)=(0,𝑤2)。可以直观想象,因为𝐿函数有很多突出的角(二维情况下四个,多维情况下更多),J_0与这些角接触的机率会远大于与𝐿其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。

  • 而正则化前面的系数𝜆,可以控制𝐿图形的大小。𝜆越小,𝐿的图形越大(上图中的黑色方框);𝜆 越大,𝐿的图形就越小,可以小到黑色方框只超出原点范围一点点,这是最优点的值(𝑤1,𝑤2)=(0,𝑤2)中的𝑤2可以取到很小的值。

  • 同理,又L2正则化损失函数:J = J_0 + \lambda \sum_w w^2,同样可画出其在二维平面的图像,如下:
    image

  • 二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此J_0与𝐿相交时使得𝑤1或𝑤2等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。

4 L2正则化为什么能防止过拟合

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


J_{\theta} = \frac{1}{2n}\sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)})^2 ........(6)

  • (2)在梯度下降中𝜃的迭代公式为:

\theta_j = \theta_j - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)}........(7)

  • (3) 其中𝛼是learning rate。 上式是没有添加L2正则化项的迭代公式,如果在原始代价函数之后添加L2正则化,则迭代公式为:


\theta_j = \theta_j(1- \alpha \frac{\lambda}{n}) - \alpha \frac{1}{n} \sum_{i=1}^n (h \theta (x^{(i)}) - y^{(i)}) x_j^{(i)} ........(8)

  • 其中𝜆就是正则化参数。从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代,𝜃𝑗都要先乘以一个小于1的因子,从而使得𝜃𝑗不断减小,因此总得来看,𝜃是不断减小的。
    最开始也提到L1正则化一定程度上也可以防止过拟合。之前做了解释,当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。

5 正则化项的参数选择

  • L1、L2的参数𝜆如何选择好?
  • 以L2正则化参数为例:从公式(8)可以看到,λ越大,𝜃𝑗衰减得越快。另一个理解可以参考L2求解图, 𝜆越大,L2圆的半径越小,最后求得代价函数最值时各参数也会变得很小;当然也不是越大越好,太大容易引起欠拟合。
  • 经验
    从0开始,逐渐增大𝜆。在训练集上学习到参数,然后在测试集上验证误差。反复进行这个过程,直到测试集上的误差最小。一般的说,随着𝜆从0开始增大,测试集的误分类率应该是先减小后增大,交叉验证的目的,就是为了找到误分类率最小的那个位置。建议一开始将正则项系数λ设置为0,先确定一个比较好的learning rate。然后固定该learning rate,给𝜆一个值(比如1.0),然后根据validation accuracy,将λ增大或者减小10倍,增减10倍是粗调节,当你确定了𝜆的合适的数量级后,比如𝜆=0.01,再进一步地细调节,比如调节为0.02,0.03,0.009之类。

参考文献

作者:ZingpLiu
出处:http://www.cnblogs.com/zingp/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

### 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`类来进行不同种类别的参数估计操作流程演示说明文档链接如下所示. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值