L1和L2正则化图形方式理解

本文探讨了L1和L2正则化的原理,介绍了如何通过正则化限制模型复杂度,减少过拟合。L1以L1范数惩罚参数,形成正方形限制区;L2用L2范数,得到圆形限制区。两者通过增加正则项,平衡模型精度与泛化能力。

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

一. 简介

我们知道在机器学习的过程就是求最优的模型参数的过程,在训练集上我们一味的要求均方误差越小越好,这样反而会导致过拟合问题,而所谓的过拟合问题就是指模型在训练集上表现的很好但是在测试集上表现的很差的一种情况,拿分类问题来看如下:
在这里插入图片描述
减少过拟合的一个好办法就是对模型正则化(即约束它),正则化以增大训练误差为代价,来减少测试误差(如果在训练误差上很小,可能出现过拟合的情况)。如下是MSE损失函数的定义:
M S E ( X , h θ ) = 1 m ∑ i = 1 m ( θ T ⋅ X ( i ) − y ( i ) ) 2 MSE(X,h_{\theta})=\frac 1 m \sum_{i=1}^m( \theta^T\cdot X^{(i)}-y^{(i)})^2 MSE(X,hθ)=m1i=1m(θTX(i)y(i))2

二. L1正则化和L2正则化

2.1 L2正则化

L2正则化的公式是直接在原来损失函数的基础上加上权重参数的平方和,添加的这一项为正则化项也叫做平滑项。
L o s s L 1 = M S E + α ∑ i = 1 n θ i 2 Loss_{L1}=MSE+\alpha \sum_{i=1}^n \theta_i^2 LossL1=MSE+αi=1nθi2

  1. MES是未包含正则化项的训练样本误差
  2. α \alpha α是正则化参数(可以调节的)

前面我们已经知道正则化的目的是限制参数过多或者过大,避免模型更加复杂。拿多项式模型举例子,多项式项数越多,模型越复杂,这时候也越容易发生过拟合现象,如何让复杂的多项式模型变的简单这就是正则化要解决的问题,我们可以想到的是可以让多项式高阶部分的权重( θ \theta θ)为0,这样就可以让高阶多项式转换为低阶的多项式,为了达到这个目的,我们通过限制前面正则项的数值上界;例如让 ∑ i = 1 n θ i 2 < C \sum_{i=1}^n \theta_i^2<C i=1nθi2<C,这样我们的损失函数的定义从原来的“让训练误差最小”变成了“在所有的参数的平方和不超过C的前提条件下,还使得样本的训练误差最小”。

到这里可以解释一下为什么正则化项也叫做平滑项了,在这之前我们需要知道模型多项式系数越少,相应地多项式项数就越少,意味着模型函数图像的曲线形状越简单,而正则化项的存在就是为了让高阶多项式变成低阶多项式,相应的多项式图像会变得更简单平滑,这就是正则化项也叫做平滑项目的原因。

下面假设只有两个参数, θ 1 \theta_1 θ1 θ 2 \theta_2 θ2,在不加入正则项时,使用梯度下降求最小代价时,可能会是下图这种情况,会一直沿着梯度的反方向前进,直到找到全局最优值即可。
在这里插入图片描述
现在我们加入正则化项后现在就变成了如下这种情况(因为正则化项为模型参数的平方和,所以正则化项在多维空间中的俯瞰图会是一个圆)在图中淡蓝色区域内的权重 θ \theta θ才是合法的,这就正则化l1的限制方法。
在这里插入图片描述
在这里插入图片描述
在没有限制的条件下,使用梯度下降算法在黑色的椭圆区域内一直沿着红色箭头方向前进,直到达到全局最优值为止,但是由于限定条件的存在, θ \theta θ会是不能超过淡蓝色区域的,最多也只能达到圆的边缘位置,沿着圆的切线方向。如下图取了空间中的一点,红色箭头为在无限制下梯度下降的方向,将该向量分解成一个蓝色的向量和一个绿色的向量,其中蓝色的向量会在一次一次迭代中逐渐向正则化范围边界移动,最后落在边境上成为边界上面的一个点,蓝色箭头就相当于给绿色箭头加上的限制。
在这里插入图片描述
在一次次迭代中会变成下图的样子,最后一次迭代会落在正则项的等值线上面。正则化加上后,我们相当于在原来梯度下降的箭头上面加上了限制,一方面我们不能逃离蓝色箭头的限制,另一方面又要保证箭头要向着梯度减少的方向运动,所以运动方向是上面的绿色箭头方向,最后红色箭头会和绿色箭头在同一方向(与圆相切的方向),就代表着运动已经结束了。
在这里插入图片描述
通过上面的图片我们可以发现最后的落点并不是全局最小值,这就要讲到正则化“惩罚”了,它惩罚的总是代价函数(损失函数),即增加正则化项后,代价适当变大了,即模型收到了“惩罚”,根据方差-偏差分解原则,偏差增大,方差会减小,防止过拟合的能力增强。

拓展:
在统计学和机器学习领域,一个重要的结论就是,模型的泛化误差可以被表示为三个截然不同的误差之和

  1. 偏差:
    这部分泛化误差的原因在于错误的假设,比如假设数据色线性的,而实际上是二次的。高偏差模型最有可能对训练数据拟合不足
  2. 方差:
    这部分误差是由于模型对训练数据的微小变化过度敏感导致的,具有高自由度的模型(例如高阶多项式模型)很可能也有高方差,所以很容易对训练数据过度拟合
  3. 不可避免的误差
    这部分误差是由于数据本身的噪音所致。减少这部分误差的唯一方法就是清理数据。

2.2 L1正则化

L1正则化和L2正则化原理是类似的她的定义如下:
L o s s L 1 = M S E + α ∑ i = 1 n ∣ θ i ∣ Loss_{L1}=MSE+\alpha \sum_{i=1}^n |\theta_{i}| LossL1=MSE+αi=1nθi
同样采用两个参数 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2
在这里插入图片描述
L1正则化限定了参数的有效区域为一个正方形,空间的点会同意满足不超过有效区域,且沿着梯度方向前进,最后只能位于正方形的边缘为孩子。过程与L1类似。

### L1与L2正则化的定义及主要区别 #### 定义 L1正则化是指在损失函数中加入权重向量的L1范数作为惩罚项。这种正则化方式倾向于使部分权重变为零,从而实现特征选择的效果[^2]。 L2正则化则是指在损失函数中加入权重向量的L2范数平方作为惩罚项。这种方式会促使权重值趋向于较小数值,但通常不会完全为零,因此其作用在于防止过拟合并提高模型稳定性[^4]。 --- #### 主要区别 1. **稀疏性** L1正则化更容易获得稀疏解,即某些权重会被精确缩减至零,从而使对应的特征被自动排除在外。而L2正则化虽然也能减少权重大小,但它并不会将任何权重降为绝对意义上的零,而是使其趋近于零,因而不具备真正的稀疏效果。 2. **对异常值敏感程度** 由于L1正则基于绝对值计算,相比起依赖平方运算的L2正则而言,前者对于较大的权值变化更加鲁棒;后者因为涉及平方操作,在面对较大偏离时可能会放大这些偏差的影响[^1]。 3. **几何解释** 在高维空间下观察约束区域形状时发现:采用L1正则形成的边界呈现多面体形态(菱形或其他棱角分明图形),这样的结构更可能接触到坐标轴上的点——对应着某个特定方向上参数全为零的情形;相反地,应用L2正则产生的单位球表面较为圆润光滑,难以触及确切坐标的原点位置[^3]。 4. **适用场景** 如果目标数据集存在许多冗余或者无关紧要的输入变量,则推荐优先考虑使用L1方法来进行建模训练过程中的简化处理。而对于那些希望维持整体平稳表现且不存在明显孤立重要因子的数据集合来说,选用L2策略往往更为合适一些。 5. **优化特性** 加入L2正则后的二次型目标函数通常是严格凸的,有助于梯度下降算法更快收敛到全局最优解附近。然而当引入L1成分之后,尽管依旧保持局部最优点的存在唯一性,但由于非可微性质的缘故,寻找最终答案的过程或许变得稍微复杂一点。 --- ```python import torch from torch import nn, optim class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.linear = nn.Linear(10, 1) def forward(self, x): return self.linear(x) def l1_regularization(model, lambda_l1=0.01): l1_loss = 0 for param in model.parameters(): l1_loss += torch.sum(torch.abs(param)) return lambda_l1 * l1_loss model = Model() criterion = nn.MSELoss() # Example of applying both regularizations during training loop for data, target in dataloader: output = model(data) loss = criterion(output, target) + l1_regularization(model) + (lambda_l2 / 2) * sum([torch.norm(p)**2 for p in model.parameters()]) optimizer.zero_grad() loss.backward() optimizer.step() ``` 上述代码展示了如何在PyTorch框架里手动添加L1L2正则化项到神经网络模型之中去执行相应的训练流程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值