L1正则化和L2正则化的区别

举报
林欣 发表于 2025/10/25 23:39:08 2025/10/25
【摘要】 L1正则化和L2正则化是机器学习中常用的两种正则化方法,它们通过在损失函数中添加不同的惩罚项来约束模型复杂度,防止过拟合。两者的核心区别体现在惩罚项形式、权重效果、几何解释、计算复杂度以及适用场景上。以下是详细对比: 1. 惩罚项形式L1正则化(Lasso):惩罚项为模型权重的绝对值之和,数学形式为:[\lambda \cdot \sum_{i=1}^{n} |w_i|]其中,(\lambd...

L1正则化和L2正则化是机器学习中常用的两种正则化方法,它们通过在损失函数中添加不同的惩罚项来约束模型复杂度,防止过拟合。两者的核心区别体现在惩罚项形式、权重效果、几何解释、计算复杂度以及适用场景上。以下是详细对比:

1. 惩罚项形式

  • L1正则化(Lasso)
    惩罚项为模型权重的绝对值之和,数学形式为:
    [
    \lambda \cdot \sum_{i=1}^{n} |w_i|
    ]
    其中,(\lambda) 是正则化系数,(w_i) 是模型权重(不包括偏置项)。

  • L2正则化(岭回归/权重衰减)
    惩罚项为模型权重的平方和,数学形式为:
    [
    \lambda \cdot \frac{1}{2} \sum_{i=1}^{n} w_i^2
    ]
    (\frac{1}{2}) 是为了简化求导过程(导数后变为 (w_i))。

2. 权重效果

  • L1正则化

    • 稀疏性:L1倾向于将部分权重直接压缩为0,产生稀疏解(即部分特征被完全忽略)。
    • 特征选择:通过稀疏性,L1可以自动进行特征选择,适用于高维数据或特征冗余的场景。
  • L2正则化

    • 权重衰减:L2会使权重向0收缩,但不会完全变为0(除非(\lambda)极大)。
    • 平滑性:权重分布更均匀,适用于特征均相关但无冗余的场景。

3. 几何解释

  • L1正则化

    • 约束条件为权重的菱形(L1球)。在二维情况下,菱形的顶点更容易与损失函数的等高线相交,导致权重在坐标轴上(即部分权重为0)。
      (菱形顶点与等高线相交,对应稀疏解)
  • L2正则化

    • 约束条件为权重的欧氏球面(L2球)。在二维情况下,球面与等高线的切点通常不在坐标轴上,因此权重不会完全为0。
      (球面与等高线相切,权重非零)

4. 计算复杂度

  • L1正则化

    • 损失函数在0点不可导(绝对值函数的尖点),需使用次梯度法或坐标下降法优化。
    • 计算复杂度较高,尤其是特征维度大时。
  • L2正则化

    • 损失函数是二次的,可通过解析方法(如岭回归的闭式解)直接求解,或使用梯度下降高效优化。
    • 计算效率更高,适合大规模数据。

5. 适用场景

  • L1正则化

    • 特征选择:当数据存在冗余特征或需要自动筛选重要特征时(如文本分类、基因选择)。
    • 高维数据:特征数量远大于样本数量时(如(p \gg n)的场景)。
    • 可解释性:稀疏模型更易解释哪些特征对预测起关键作用。
  • L2正则化

    • 特征均相关:当特征之间存在相关性但无冗余时(如图像处理、时间序列分析)。
    • 数值稳定性:需要防止权重过大导致数值不稳定时(如深度学习中的权重衰减)。
    • 解析解需求:需要快速求解闭式解时(如岭回归)。

6. 对比总结表

特性 L1正则化(Lasso) L2正则化(岭回归)
惩罚项 (\lambda \cdot \sum w_i
权重效果 稀疏性(部分权重为0) 权重衰减(趋近于0但不等于0)
几何解释 约束在菱形(L1球)上 约束在欧氏球面(L2球)上
计算复杂度 高(需次梯度或坐标下降) 低(可解析解或梯度下降)
适用场景 特征选择、高维数据、可解释性 特征相关、数值稳定、解析解需求
典型算法 Lasso回归、弹性网络(Elastic Net) 岭回归、神经网络权重衰减

7. 代码示例对比

(1) 线性回归中的L1和L2正则化(Scikit-learn)

from sklearn.linear_model import Lasso, Ridge

# L1正则化(Lasso)
lasso = Lasso(alpha=0.1)  # alpha=λ
lasso.fit(X_train, y_train)

# L2正则化(岭回归)
ridge = Ridge(alpha=0.1)  # alpha=λ
ridge.fit(X_train, y_train)

(2) 神经网络中的L1和L2正则化(Keras)

from tensorflow.keras import regularizers
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# L1正则化
model_l1 = Sequential([
    Dense(64, activation='relu', 
          kernel_regularizer=regularizers.l1(0.01)),  # L1惩罚
    Dense(10, activation='softmax')
])

# L2正则化
model_l2 = Sequential([
    Dense(64, activation='relu', 
          kernel_regularizer=regularizers.l2(0.01)),  # L2惩罚
    Dense(10, activation='softmax')
])

8. 如何选择?

  • 需要特征选择或高维数据 → 优先选L1(如Lasso)。
  • 特征相关但无冗余,或需要数值稳定 → 优先选L2(如岭回归)。
  • 两者结合:弹性网络(Elastic Net)同时使用L1和L2惩罚,平衡稀疏性和稳定性。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。