深度学习——L1及L2范数

博客围绕深度学习中监督类学习问题展开,指出要在规则化参数同时最小化误差以防止过拟合。详细介绍了L1范数和L2正则化,对比了二者差别,如L1趋向产生少量特征,L2选择更多接近0的特征,还提及实践中L2正则化通常更优。

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

在深度学习中,监督类学习问题其实就是在规则化参数同时最小化误差。最小化误差目的是让模型拟合训练数据,而规则化参数的目的是防止模型过分拟合训练数据。

参数太多,会导致模型复杂度上升,容易过拟合,也就是训练误差小,测试误差大。因此,我们需要保证模型足够简单,并在此基础上训练误差小,这样训练得到的参数才能保证测试误差也小,而模型简单就是通过规则函数来实现的。
 

L1范数和L2范数的差别

一个是绝对值最小,一个是平方最小:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。

L1范数

L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”。简而言之,即使参数值接近于零。在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n。如下:

同样计算导数得:

 上式中sgn(w)表示w的符号。那么权重w的更新规则为:​

 比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉η*λ*sgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

L2正则化

对于L2正则化:C=C0+λ2n∑iω2iC=C0+λ2n∑iωi2,相比于未加正则化之前,权重的偏导多了一项λnωλnω,偏置的偏导没变化,那么在梯度下降时ωω的更新变为:

可以看出ωω的系数使得权重下降加速,因此L2正则也称weight decay(caffe中损失层的weight_decay参数与此有关)。对于随机梯度下降(对一个mini-batch中的所有x的偏导求平均):

对于L1正则化:C=C0+λn∑i|ωi|C=C0+λn∑i|ωi|,梯度下降的更新为:

符号函数在ωω大于0时为1,小于0时为-1,在ω=0ω=0时|ω||ω|没有导数,因此可令sgn(0)=0,在0处不使用L1正则化。
L1相比于L2,有所不同:

  • L1减少的是一个常量,L2减少的是权重的固定比例
  • 孰快孰慢取决于权重本身的大小,权重刚大时可能L2快,较小时L1快
  • L1使权重稀疏,L2使权重平滑,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0

实践中L2正则化通常优于L1正则化。

### 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、付费专栏及课程。

余额充值