首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在机器学习的世界里打怪升级——谈谈正则化

前面几篇我们主要介绍了线性回归模型,它易于理解,可解释性强。但它有一个弱点,就是容易发生过拟合,尤其是在高维特征下。

我们再来回顾下线性回归模型:

可以看到,模型给每一个特征都“配备”了一个参数w。在特征数量很多的情况下,每一个特征都参与到模型的构建当中,这就容易将噪声也归纳进来,造成过拟合。

约束

那么如何避免这种情况的发生呢?通常是给损失函数加一个约束项,也叫正则化项。这也是工业界和学术界经常使用的方法,并且得到广泛应用。

具体来说,通常有两种正则化方式,分别是L2正则化和L1正则化。

L2正则化

顾名思义,L2正则化就是使用了L2范数进行构建。先来看下线性回归模型的损失函数:

给(1)式加上L2正则化项就是

可以看到,正则化项其实是系数w的模的平方,其中λ是L2正则化项的系数,它来控制约束的强弱。而正则化项前的1/2则纯粹是为了之后的求导方便而添加的。

下面我们来具体看下λ对参数w的影响。

我们的目的是要使L(w)取得最小值,那么当λ越大时,要想使(2)式取到最小值,对应的w就必须足够小。因此,λ越大,对w的约束就越大,w就越趋近于0;同样,λ越小,对w的“惩罚”就越小,当λ=0时,相当于没有正则化项。

在sickit-learn中,我们用岭回归(Ridge)来实现L2正则化,来看下它的模型参数:

可以看到,Ridge模型中的第一个参数alpha就对应了上面公式(2)中的λ,alpha默认值为1。

L1正则化

L1正则化用L1范数来构建,也就是给损失函数添加了参数w的绝对值:

λ的作用与L2正则化中的相同,也是对参数w的一种惩罚。λ越大,惩罚越重,w越趋近于0。

那么在scikit-learn中,我们用Lasso回归来实现L1正则化,我们也看下它的模型参数:

同样,Lasso模型的第一个参数alpha就对应了公式(3)中的λ,默认值是1。

需要注意的是,无论L1还是L2正则化,我们只对w[1]到w[n]之间的系数进行正则化约束。也就是说,没有对截距b(w[0])进行正则化约束,因为在构造时,我们令x[0]恒等于1,因此无需对b进行约束。

对比

上面我们介绍了两种正则化方法,那么L1和L2正则化到底有什么特点呢?

L2正则化的作用,是减小参数w,使w尽可能趋近于0;而L1正则化是让某一些参数直接等于0。也就是说,L1正则化会让参数向量w看起来更稀疏一些。为什么会这样呢?我们画图来说明。

首先来看L2正则化:

如图所示,绿色部分为正则化约束条件,蓝色部分为损失函数,我们所求的参数w也就是二者的交点。不难看出,无论损失函数的图像如何,它与L2正则化图像的交点有很大概率在以点p为代表的一些点上,而不大可能在与坐标轴相交的以q点为代表的一些点上。而p点的坐标均不为0,因此L2正则化的作用只是尽量减小w,而不太会使其为0。

再来看看L1正则化:

L1正则化的约束图像是一个菱形,从图中不难看出,不论损失函数长什么样子,它与L1正则化的图像大概率相交在顶点处(比如p),而点p有一个坐标为0。因此,在高维向量w中,使用L1正则化就会使很多参数w变成0。

正则化后的梯度下降

在我们给损失函数添加了正则化项之后,问题也就随之而来了。那就是如何对新的损失函数L(w)进行优化呢?

其实优化方法和原来的一样,还是对L(w)求导,然后令导数为0即可求出所需参数w。

·L2正则化

我们先来对使用了L2正则化的损失函数进行求导,也就是对公式(2)进行求导,可得

而运用梯度下降更新参数的方式是

将(4)式代入(5)式中,可得

(6)式中的F(w)就是之前我们没有添加正则化项时的梯度,类似于(5)式。对比之前没有添加正则化项时的参数更新规则,不难发现,每次更新,正则化的作用就是减小了参数w。

我们画个图来说明L2正则化的过程:

如图所示,蓝色区域为损失函数L(w)的图像,而红色区域为正则化项对w的约束。我们要求的就是w只能在红色边界上移动,同时要取得L(w)的最小值。

假设红色边界上有一点P,蓝色箭头就是负梯度方向,别忘了在梯度下降中,我们始终要沿着负梯度方向进行。但现在有个问题是,我们不能按原来的路线前进,因为有了约束项,我们只能在红色的圆上行走。

那具体怎么个走法呢?我们可以看到,蓝色箭头方向总是可以分解成P点的切线方向和P点的法线方向,而这两者是垂直的。换句话说,我们原本沿蓝色箭头方向的运动被分解成了切线方向的运动和法线方向的运动。(物理学:运动的合成与分解)

那么,只要蓝色箭头在切线方向有分量,P点就会一直运动下去。那到什么时候停止呢?从图中可以看出,当P点运动到Q点时,蓝色箭头与法线方向重合,在切线方向没有分量,此时停止运动,也就得到了L(w)的最小值。

·L1正则化

我们再来看看加了L1正则化的梯度下降是如何的。首先,我们要对公式(3)求导,可得

注意到,(7)式有一个sign(w)函数。这个函数的含义是,当w>0时,sign(w)=1;当w

将(7)式代入梯度下降的公式(5)中,可得

从公式中不难看出,当w>0时,更新后w变小;当w

下面,我们还是画图来说明L1正则化的过程:

如上图,在L1正则化中,我们沿负梯度方向的运动(蓝色箭头)总是可以分解成切线方向和法线方向的运动。只要蓝色箭头在切线方向上有分量,p点就会一直运动下去。

那什么时候停止呢?很明显,只有运动到正则化边界的顶点q时,切线方向的分量消失,此时才能找到使L(w)最小的w。

最小二乘法中的正则化

除了梯度下降,我们还可以用最小二乘来直接求出损失函数的最优解。如果给最小二乘中的损失函数也加上正则化项,又该如何求解呢?

首先,我们写出使用最小二乘法时的损失函数:

给它加一个L2正则化项,就变为

其中λ是L2正则化的系数。对其求导,可得

为了求出最小值,令(9)式为0,化简可得出w为

上一篇我们说过,当方阵X'可逆时,我们才能得到类似于上式的结果。现在将原先的方阵X'加了一个新的方阵λ,就保证了二者之和一定可逆。因此,可直接得出(10)式的结果。

其中,λ是这样一个方阵

除了从左上到右下对角线上的元素,其他元素均为0。而且对角线第一个元素是1,为什么是这样呢?因为我们的截距b没有参与正则化的约束。

为什么加了这个方阵后就一定可逆呢?

我们知道一个方阵如果不可逆,那它的对角线上至少有一个元素为0。加了这个方阵λ之后,就保证了对角线绝对不为0,因此新的方阵绝对可逆。

好了,关于正则化我们就介绍到这里。勇士,为了机器学习,继续前进吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201206A0288B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券