正则化时,L1比L2更容易使参数变得稀疏

探讨L1和L2正则化如何影响模型参数的最优值,特别是在使参数值趋于零的作用上,以及它们如何导致模型变得更加稀疏。

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

假设费用函数 L 与某个参数 x 的关系如图所示:


则最优的 x 在绿点处,x 非零。

 

现在施加 L2 regularization,新的费用函数(L + Cx^2)如图中蓝线所示:

最优的 x 在黄点处,x 的绝对值减小了,但依然非零。

 

而如果施加 L1 regularization,则新的费用函数(L + C|x|)如图中粉线所示:

最优的 x 就变成了 0。这里利用的就是绝对值函数的尖峰。

 

两种 regularization 能不能把最优的 x 变成 0,取决于原先的费用函数在 0 点处的导数。
如果本来导数不为 0,那么施加 L2 regularization 后导数依然不为 0,最优的 x 也不会变成 0。
而施加 L1 regularization 时,只要 regularization 项的系数 C 大于原先费用函数在 0 点处的导数的绝对值,x = 0 就会变成一个极小值点。

上面只分析了一个参数 x。事实上 L1 regularization 会使得许多参数的最优值变成 0,这样模型就稀疏了。

 

转:链接:https://www.zhihu.com/question/37096933/answer/70426653

### L1 正则化 L1 正则化,也称为 Lasso 正则化,是一种通过在损失函数中添加权重的绝对值之来限制模型复杂度的方法。具体来说,L1 正则化的目标函数可以表示为: $$ J(\theta) = \text{Loss}(\theta) + \lambda \sum_{i=1}^{n} |\theta_i| $$ 其中,$\text{Loss}(\theta)$ 是模型的原始损失函数,$\theta_i$ 是模型的参数,$\lambda$ 是正则化系数,用于控制正则化项的强度。L1 正则化的一个显著特点是它倾向于产生稀疏的权重矩阵,即很多权重会被压缩为零。这种特性使得 L1 正则化在特征选择中非常有用,因为它可以帮助模型自动忽略那些不重要的特征[^1]。 ### L2 正则化 L2 正则化,也称为 Ridge 正则化,是另一种常见的正则化方法,它通过在损失函数中添加权重的平方来限制模型复杂度。L2 正则化的目标函数可以表示为: $$ J(\theta) = \text{Loss}(\theta) + \lambda \sum_{i=1}^{n} \theta_i^2 $$ 与 L1 正则化不同,L2 正则化不会使权重变为零,而是会使权重接近零。这意味着 L2 正则化不会进行特征选择,而是通过减小权重的大小来降低模型的复杂度。L2 正则化有助于防止模型过拟合,特别是在特征之间存在多重共线性的情况下[^1]。 ### L1 L2 正则化的区别 尽管 L1 L2 正则化都旨在通过限制模型复杂度来提高模型的泛化能力,但它们在效果上有显著的不同。L1 正则化通过引入稀疏性,使得模型能够进行特征选择,从而简化模型并提高解释性。而 L2 正则化则通过平滑权重分布来提高模型的稳定性,尤其是在数据量较少或特征间存在高度相关性的情况下。此外,L1 正则化的优化问题通常是非连续且不可导的,这可能导致优化过程中的困难;相比之下,L2 正则化的问题更加平滑,优化起来更为容易[^2]。 ### 代码示例 为了更好地理解 L1 L2 正则化的效果,下面提供了一个使用 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=10, noise=0.1) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # L1 正则化(Lasso) lasso = Lasso(alpha=0.1) lasso.fit(X_train, y_train) y_pred_lasso = lasso.predict(X_test) mse_lasso = 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) mse_ridge = mean_squared_error(y_test, y_pred_ridge) print(f'Lasso MSE: {mse_lasso}') print(f'Ridge MSE: {mse_ridge}') ``` 在这个例子中,我们使用了 `Lasso` `Ridge` 类来分别实现 L1 L2 正则化。通过调整 `alpha` 参数,可以控制正则化的强度。输出的均方误差(MSE)可以帮助我们评估两种正则化方法的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值