引言
在人工智能(AI)领域,尤其是在机器学习和深度学习中,正则化(regularization)具有非常重要的地位。它不仅是训练模型过程中不可或缺的一部分,也是提高模型性能的关键因素之一。此外,正则化还可以提升模型的泛化能力,使得训练后的模型在面对新数据时能够做出更为准确的预测。
通过阅读本篇博客,你可以:
1.知道过拟合与欠拟合的区别
2.掌握如何使用正则化防止过拟合
一、过拟合与欠拟合
1.欠拟合(Under Fitting)
欠拟合(Under Fitting)指模型没有拟合到位,即模型在训练数据和测试数据上都表现不佳,无法捕捉到数据的潜在规律。如下图所示,我们能很明显的发现这条绿色的直线没有很好的对红点和蓝点进行分类,这就是欠拟合的一个经典的例子。
2.过拟合(Over Fitting)
过拟合(Over Fitting)指的是拟合过度,由于模型过于复杂,捕捉到了训练数据当中的噪声和异常点。导致了模型在训练数据上表现得非常好,能够准确预测训练集中的每一个样本,但在测试数据或新数据上表现不佳。如下图所示,这条曲线对红蓝点进行了过度的区分,将很多异常点和离群点包括在内。
3.正好拟合(Just Right Fitting)
正好拟合(Just Right Fitting)指模型能够恰当地平衡复杂程度,既有足够的模型参数来捕捉数据特征,又没有过多的参数导致对训练数据的过度拟合或噪声的敏感。模型在训练和测试数据上的表现都接近最优。这是我们想达到的模型最佳状态。如下图所示,绿色的曲线抛去了噪声和异常点,将蓝点和红点进行了很好的分类。
二、正则化的目的
正则化的目的其实就是防止过拟合,增加模型的鲁棒性(Robust,在环境变化、噪声、干扰下保持良好的性能和稳定性),也就是让模型的泛化能力和推广能力更加强大。我们举一个例子:对于鲁棒性而言,以下两个式子描述同一条直线哪个更好?
对于鲁棒性而言,第一个的选择是更好的,因为 也就是权重越小,模型的容错能力也就越强。我们可以代入数字进行验证,比如将100分别代入两个式子当中,如果在某个过程中发生了偏差,导致代入的数字变成了101,那么在式子1中的误差就很小,但是放在式子2中偏差就大很多了。所以我们需要使用正则化加强模型的鲁棒性。但 也不能太小,否则模型的正确率就无法得到保证了。要有一定的容错率又要保证正确率就要通过正则化来实现。
我们给模型原先的损失函数上加一个正则惩罚项。拿线性回归举例就是
我们知道线性回归当中的 , 与 MSE 成反比, 越小,MSE越大,MSE 越大,损失就越大,这并不是我们想要看到的。所以从本质上来说,正则化就是牺牲模型正确率来换取推广能力和抗干扰能力的一种方法。
三、正则化的常用方法
在正则化中,常用的惩罚项有 正则项 和 正则项。它们的公式如下:
其实就是所有模型参数的绝对值总和, 就是所有模型参数的平方和。
1.L1稀疏
L1正则化(L1 Regularization)是一种通过在损失函数中添加L1范数作为惩罚项,从而促使模型参数稀疏化的技术。L1正则化的公式如下:
公式中的 是 L1范数所占权重, 的值越大,模型的泛化能力就越强。我们知道梯度下降法的公式为:
同时,我们知道梯度的计算公式就是对损失函数中的 求偏导:
所以,在原损失函数的基础上,我们要对L1正则项进行求偏导:
从这个公式我们看出,每个维度的参数在梯度下降时的步伐都会变大,每个维度的参数都会在原本的基础上多跨出 的大小。由于L1正则项的偏导数是确定的,所以多走的步伐大小也是不随着 改变的,也就意味着当 与 的数据量相差较大时。数据量偏小的一方会更快地到达 0 。此时,L1正则化使权重参数稀疏的效果就达到了。
从几何的层面来看,L1正则化会偏向于下图。
2.L2平滑
与L1正则化相同地,我们也把L2正则化放到梯度下降法中讲解。所以直接开始对L2正则项求梯度:
从求完导的公式中我们可以知道,与L1正则化同理,梯度下降法每次参数更新的时候,L2正则项的存在会使更新的步伐比原损失函数大 。此时我们就发现了L2正则化与L1正则化的不同。L2正则化多走的步伐是会受到参数本身影响的,这就意味着即使 和 的数据级相差很大,他们都会以相同的比例下降,而不会出现有某个维度的参数减为0的情况。这就使得L2正则化可以使整体的 变小,梯度下降更加平滑。
从几何的层面来看,L2正则化会偏向于下图。
3.L1正则化和L2正则化的不同作用
我们分析了L1正则化和L2正则化的原理。从中我们可以发现,L1正则化能够使部分不重要的参数降为0,L2正则化能够使整体的参数变小。虽然他们的目的都是减少模型的复杂度和提高模型预测性能,但是在效果和应用场景上存在显著差异。
L1正则化能够促使参数稀疏,通常用于帮助特征选择,适合解释性要求高的模型。L2正则化则通过整体收缩模型参数减少模型复杂度,适合应用于多重共线性的特征数据来提升模型的泛化能力。
总结
本篇博客讲解了正则化的作用、实现方式以及原理。希望可以对大家起到作用,谢谢。
关注我,内容持续更新(后续内容在作者专栏《从零基础到AI算法工程师》)!!!