正则化的概念,相信对于熟悉机器学习的同学来说并不陌生。
前不久我参加了一次面试,过程中被面试官问到了L1和L2正则项,却苦于只记得大概含义,却说不出更具体的例子,回答得并不是很好。面试结束之后我深刻反思,痛定思痛,于是有了对正则化示例的梳理,就是为了加深自己的印象,以免下次再被问到。
什么是正则化?
机器学习模型中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,即 L1正则化 和 L2正则化 ,或者称作 L1范数 和 L2范数 。
在机器学习算法的训练过程中,经常会遇到过拟合的问题。过拟合即学习模型对训练集学习的“太好”后,可能把训练集本身的一些特点当做所有潜在样本都会具有的一般性质,例如捡到一片树叶是锯齿状就以为所有的树叶都是锯齿状。这样就会导致模型的泛化性能下降。
解决过拟合的方法之一,就是为模型添加正则项。L1正则化和L2正则化可以看做是损失函数(目标函数)的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制,以中和模型的复杂程度,避免模型过拟合。
机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。以线性回归模型为例,使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归):
优化目标:
min 式子(1)
加上L1正则项(lasso回归):
min 式子(2)
加上L2正则项(岭回归):
min 式子(3)
正则化就是为了使模型结构风险最小化,即在经验风险最小化的基础上(也就是训练误差最小化),尽可能采用简单的模型,以此提高泛化预测精度。
对于梯度下降法,求解优化目标函数的过程可以画出等值线。
假设X为一个二维样本,那么要求解的参数也是二维。如下图:
原函数等高线
L1和L2加入后的函数图像:
从上图中我们可以看出:
如果不加L1和L2正则化,对于线性回归这种目标函数为凸函数的情况,最终的结果就是最里边的紫色的小圈圈等高线上的点。
当加入L1正则化的时候,我们先画出 的图像,也就是一个菱形,代表这些曲线上的点算出来的范数 都为F。那我们现在的目标是不仅是原曲线算得值要小(越来越接近中心的紫色圆圈),还要使得菱形越小越好(F越小越好)。要和原函数一样的话,与紫色圆圈相交的那个菱形就会很大,因此我们要取到一个最优的值。
那么如何求值呢?
首先,以同一条原曲线目标等高线来说,现在以最外围的红色等高线为
例,我们看到,对于红色曲线上的每个点都可以做一个菱形,根据
上图可知,当这个菱形与某条等高线相切(仅有一个交点)的时候,
这个菱形最小,上图相割对比较大的两个菱形对应的L1范数更大。
换言之,能使得在相同的 下,由于相切时的 小,即 小,
所以能够使得 更小。
其次,我们可以看出,最终加入L1范数得到的解,一定是某个菱形和某条原函数等高线的切点。
我们经过观察可以看到,几乎对于很多原函数等高曲线,和某个菱形相交的时候非常容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度可能是0,比如上图最终解是 ,这也就是我们所说的L1更容易得到稀疏解(解向量中0比较多)的原因。
当加入L2正则化的时候,分析和L1正则化是类似的,也就是说我们仅仅是从菱形变成了圆形而已,同样还是求原曲线和圆形的切点作为最终解。当然与L1范数比,求得的L2范数从图上来看,不容易交在坐标轴上,但是仍然比较靠近坐标轴。因此这也就是我们老说的,L2范数能让解比较小(靠近0),但是比较平滑(不等于0)。
综上所述,我们可以看见,加入正则项,在最小化经验误差的情况下,可以让我们选择更简单(趋向于0)的解。
因此,加正则化项就是结构风险最小化的一种实现。
小结
正则化降低过拟合原因在于,正则化是结构风险最小化的一种策略实现。
给损失函数f加上正则化项,能使得新优化目标函数h = f+normal,需要在f和normal中做一个权衡,如果还像原来只优化f的情况下,那可能得到的一组解比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,符合 奥卡姆剃刀理论(简单有效原理),同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。
L1正则化就是在损失函数后面所加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L2正则化就是loss function后边所加正则项为L2范数的平方,加上L2正则相比于L1正则来说,得到的解比较平滑(不是稀疏),但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。
————我是分割线————
今天的分享就到此结束啦,如果喜欢我们的分享,欢迎大家点赞、在看、转发,后续我们会不定期更新更多相关的内容,感兴趣的小伙伴请关注【数据圆桌】,和我们一起进步和成长~