【深度学习|学习笔记】什么是正则化?如何理解正则化?L0、L1、L2正则化的起源、发展、原理、应用和对比详解,附代码。
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147195226
以下是结合机器学习发展,全面介绍 正则化(Regularization),并深入讲解 L0、L1、L2 正则化的:
随着模型越来越复杂(如深度网络、非线性回归等),我们发现:
于是研究者提出损失函数中加入“惩罚项”的方法:
这就是正则化的来源。
假设我们有一个基本的损失函数,如 MSE(均方误差)或 CrossEntropy(交叉熵):
以 逻辑回归为例:
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# L1 正则化
model_l1 = LogisticRegression(penalty='l1', solver='liblinear', C=1.0)
model_l1.fit(X_train, y_train)
# L2 正则化
model_l2 = LogisticRegression(penalty='l2', solver='liblinear', C=1.0)
model_l2.fit(X_train, y_train)
# 预测与评估
y_pred_l1 = model_l1.predict(X_test)
y_pred_l2 = model_l2.predict(X_test)
print("L1 正则准确率:", accuracy_score(y_test, y_pred_l1))
print("L2 正则准确率:", accuracy_score(y_test, y_pred_l2))
print("L1 权重稀疏性:", (model_l1.coef_ == 0).sum(), "个为0")
print("L2 权重稀疏性:", (model_l2.coef_ == 0).sum(), "个为0")
L0
正则化追求最小特征集,但因不连续、不可导,计算困难,通常用以下方式近似:
应用场景 | 推荐正则类型 |
---|---|
高维稀疏特征选择(如文本) | ✅ L1 / Lasso |
通用稳健模型(如图像识别) | ✅ L2 / Ridge |
特征压缩、自动选择 | ✅ L1、L0启发 |
深度学习网络 | ✅ L2 + Dropout |
sklearn.linear_model.Lasso
:L1 正则sklearn.linear_model.Ridge
:L2 正则LogisticRegression
:支持 penalty='l1' or 'l2'
torch.nn.Linear
+ 手动加正则项:在损失函数中手动添加权重范数正则化类型 | 优点 | 缺点 |
---|---|---|
L0 | 真实稀疏特征选择 | 难以优化,通常不直接使用 |
L1 | 选择性地消除无用特征 | 不稳定(多个特征相关时随机选择) |
L2 | 提升稳定性与泛化能力 | 不会稀疏处理,所有特征都保留 |