理解L1正则化和L2正则化

1. 引入正则化

在这里插入图片描述

曲线1,不能很好地拟合数据,这是高偏差(high bias)的情况,我们称为“欠拟合”(underfitting);

而随着训练次数增多,我们设计的算法慢慢找出了数据的模式,能在尽可能多地拟合数据点的同时反映数据趋势,这时它是一个性能较好的模型。在这基础上,如果我们继续训练,那模型就会进一步挖掘训练数据中的细节和噪声,为了拟合所有数据点“不择手段”,这时它就过拟合了。

所以,曲线3,似乎完美地拟合了我们地数据,但方差较高(high variance),数据过度拟合(overfitting);

在两者之间,可能还有一些像曲线2这样的,复杂程度适中,数据拟合适度的分类器,这个数据拟合看起来更加合理,我们称之为“适度拟合”(just right)。

从左往右看,模型的复杂度逐渐提高,在训练集上的预测错误逐渐减少,但它在测试集上的错误率却呈现一条下凸曲线。
在这里插入图片描述
引入正则化,就是为了防止过拟合。

它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。

为什么通过L1正则、L2正则能够防止过拟合?
解释:
  过拟合产生的原因通常是因为参数比较大导致的,通过添加正则项,假设某个参数比较大,目标函数加上正则项后,也就会变大,因此该参数就不是最优解了。
  问:为什么过拟合产生的原因是参数比较大导致的?
  答:过拟合,就是拟合函数需要顾及每一个点,当存在噪声的时候,原本平滑的拟合曲线会变得波动很大。在某些很小的区间里,函数值的变化很剧烈,这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。

其做法是,在损失函数后面添加一个额外项,常用的额外项一般有两种,一般英文称作 ℓ 1 − n o r m ℓ_1-norm 1norm ℓ 2 − n o r m ℓ_2-norm 2norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。

L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓“惩罚”是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)。

很多线性回归模型正则化的文章会提到L1是通过稀疏参数(减少参数的数量)来降低复杂度,L2是通过减小参数值的大小来降低复杂度。

一般回归分析中回归 w w w表示特征的系数,从上式可以看到正则化项是对系数做了处理(限制)。L1正则化和L2正则化的说明如下:

  • L1正则化是指权值向量 w w w各个元素的绝对值之和,通常表示为 ∣ ∣ w ∣ ∣ 1 = ∑ i w i ∣∣w∣∣_1=\sum_i w_i w1=iwi
  • L2正则化是指权值向量 w w w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为 1 2 ∣ ∣ w ∣ ∣ 2 2 \frac{1}{2}∣∣w∣∣_2^2 21w22

一般都会在正则化项之前添加一个系数,Python中用 α \alpha α表示,一些文章也用 λ \lambda λ表示。这个系数需要用户指定。

2. 添加L1和L2正则化有什么用?

下面是L1正则化和L2正则化的作用,这些表述可以在很多文章中找到。

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合

3. L1和L2正则化的直观理解

这部分内容将解释:

为什么L1正则化可以产生稀疏模型(L1是怎么让系数等于零的),以及为什么L2正则化可以防止过拟合。

3.1 L1正则化

上面提到L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。

那么,为什么要生成一个稀疏矩阵?

稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0。

通常机器学习中特征数量很多,例如,文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。

假设有如下带L1正则化的损失函数: J = J 0 + α ∑ w ∣ w ∣ J=J_0+\alpha \sum_w|w| J=J0+αww
其中 J 0 J_0 J0是原始的损失函数,加号后面的一项是L1正则化项,α是正则化系数。注意到L1正则化是权值的绝对值之和, J J J是带有绝对值符号的函数,因此JJ是不完全可微的。

机器学习的任务就是要通过一些方法(比如梯度下降)求出损失函数的最小值。当我们在原始损失函数 J 0 J_0 J0后添加L1正则化项时,相当于对 J 0 J_0 J0做了一个约束。

L = α ∑ w ∣ w ∣ L=α∑_w|w| L=αww,则 J = J 0 + L J=J_0+L J=J0+L,此时我们的任务变成在 L L L约束下求出 J 0 J_0 J0取最小值的解。

考虑二维的情况,即只有两个权值 w 1 w^1 w1 w 2 w^2 w2,此时 L = ∣ w 1 ∣ + ∣ w 2 ∣ L=|w^1|+|w^2| L=w1+w2,对于梯度下降法,求解 J 0 J_0 J0的过程可以画出等值线,同时 L 1 L1 L1正则化的函数 L L L也可以在 w 1 w 2 w^1w^2 w1w2的二维平面上画出来。如下图:
在这里插入图片描述
图中等值线是 J 0 J_0 J0的等值线,黑色方形是 L L L函数的图形。

在图中,当 J 0 J_0 J0等值线与 L L L图形首次相交的地方就是最优解。

上图中 J 0 J_0 J0 L L L L L L的一个顶点处相交,这个顶点就是最优解。

注意到这个顶点的值是 ( w 1 , w 2 ) = ( 0 , w ) (w^1,w^2)=(0,w) (w1,w2)=(0,w)。可以直观想象,因为 L L L函数有很多『突出的角』(二维情况下四个,多维情况下更多), J 0 J_0 J0与这些角接触的机率会远大于与 L L L其它部位接触的机率,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。

而正则化前面的系数 α α α,可以控制 L L L图形的大小。 α α α越小, L L L的图形越大(上图中的黑色方框); α α α越大, L L L的图形就越小,可以小到黑色方框只超出原点范围一点点,这是最优点的值 ( w 1 , w 2 ) = ( 0 , w ) (w^1,w^2)=(0,w) (w1,w2)=(0,w)中的 w w w可以取到很小的值。

L2正则化

理解1:

类似,假设有如下带L2正则化的损失函数: J = J 0 + α ∑ w w 2 J=J_0+\alpha \sum_ww^2 J=J0+αww2
同样可以画出他们在二维平面上的图形,如下:
在这里插入图片描述
二维平面下L2正则化的函数图形是个圆,与方形相比,被磨去了棱角。因此 J 0 J_0 J0 L L L相交时使得 w 1 w^1 w1 w 2 w^2 w2等于零的机率小了许多,这就是为什么L2正则化不具有稀疏性的原因。

拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。

那为什么L2正则化可以获得值很小的参数?
以线性回归中的梯度下降法为例。假设要求的参数为 θ \theta θ h θ ( x ) h_\theta(x) hθ(x)是我们的假设函数。线性回归一般使用平方差损失函数。单个样本的平方差是 ( h θ ( x ) − y ) 2 (h_\theta(x) - y)^2 (hθ(x)y)2 ,如果考虑所有样本,损失函数是对每个样本的平方差求和,假设有 m m m个样本,线性回归的代价函数如下,为了后续处理方便,乘以一个常数 1 2 m \frac{1}{2m} 2m1
J ( θ ) = 1 2 m ∑ i m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_i^m(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ)=2m1im(hθ(x(i))y(i))2
在梯度下降算法中,需要先对参数求导,得到梯度。梯度本身是上升最快的方向,为了让损失尽可能小,沿梯度的负方向更新参数即可。
对于单个样本,先对某个参数 θ j \theta_j θj求导:
∂ ∂ θ j J ( θ ) = 1 m ∑ i m ( h θ ( x ) − y ) ∂ ∂ θ j h θ ( x ) \frac{\partial}{\partial \theta_j}J(\theta)=\frac{1}{m}\sum_i^m(h_{\theta}(x)-y)\frac{\partial}{\partial \theta_j}h_{\theta}(x) θjJ(θ)=m1im(hθ(x)y)θjhθ(x)
注意到 h θ ( x ) h_\theta(x) hθ(x)的表达式是 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + ⋯ + θ n x n h_\theta(x)=\theta_0 x_0 + \theta_1 x_1 + \dots + \theta_n x_n hθ(x)=θ0x0+θ1x1++θnxn . 最终(3.1)式结果如下:
∂ ∂ θ j J ( θ ) = 1 m ∑ i m ( h θ ( x ) − y ) x j \frac{\partial}{\partial \theta_j}J(\theta)=\frac{1}{m}\sum_i^m(h_{\theta}(x)-y)x_j θjJ(θ)=m1im(hθ(x)y)xj
在考虑所有样本的情况,将每个样本对 θ j \theta_j θj的导数求和即可,得到下式:
∂ ∂ θ j J ( θ ) = 1 m ∑ i m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial \theta_j}J(\theta)=\frac{1}{m}\sum_i^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} θjJ(θ)=m1im(hθ(x(i))y(i))xj(i)
梯度下降算法中,为了尽快收敛,会沿梯度的负方向更新参数,因此在(3.3)式前添加一个负号,并乘以一个系数 α \alpha α(即学习率),得到最终用于迭代计算参数 θ j \theta_j θj 的形式:
θ j : = θ j − α 1 m ∑ i m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_i^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θjαm1im(hθ(x(i))y(i))xj(i)
其中 α \alpha α是learning rate. 上式是没有添加L2正则化项的迭代公式,如果在原始代价函数之后添加L2正则化,则迭代公式会变成下面的样子:
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_i^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θj(1αmλ)αm1im(hθ(x(i))y(i))xj(i)

其中 λ \lambda λ就是正则化参数。从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代, θ j \theta_j θj 都要先乘以一个小于1的因子,从而使得 θ j \theta_j θj 不断减小,因此总得来看, θ \theta θ是不断减小的。

最开始也提到L1正则化一定程度上也可以防止过拟合。之前做了解释,当L1的正则化系数很小时,得到的最优解会很小,可以达到和L2正则化类似的效果。

理解2:

另一个我觉得通俗易懂的理解如下:

一样的,直接在原来的损失函数基础上加上权重参数的平方和:
L = E i n + λ ∑ j w j 2 L=E_{in}+\lambda \sum_j w_j^2 L=Ein+λjwj2

其中, E i n E_in Ein是未包含正则化项的训练样本误差,λ 是正则化参数,可调。

我们已经知道,正则化的目的是限制参数过多或者过大,避免模型更加复杂。例如,使用多项式模型,如果使用 10 阶多项式,模型可能过于复杂,容易发生过拟合。所以,为了防止过拟合,我们可以将其高阶部分的权重 w 限制为 0,这样,就相当于从高阶的形式转换为低阶。

为了达到这一目的,最直观的方法就是限制 w 的个数,但是这类条件属于 NP-hard 问题,求解非常困难。所以,一般的做法是寻找更宽松的限定条件:

∑ j w j 2 &lt; C \sum_j w_j^2&lt;_{C} jwj2<C

上式是对 w 的平方和做数值上界限定,即所有w 的平方和不超过参数 C。这时候,我们的目标就转换为:最小化训练样本误差 Ein,但是要遵循 w 平方和小于 C 的条件。

如何在限定条件下,对 Ein 进行最小化的优化,图解:

在这里插入图片描述
如上图所示,蓝色椭圆区域是最小化 E i n E_{in} Ein区域,红色圆圈是 w 的限定条件区域。在没有限定条件的情况下,一般使用梯度下降算法,在蓝色椭圆区域内会一直沿着 w 梯度的反方向前进,直到找到全局最优值 wlin。

例如空间中有一点 w(图中紫色点),此时 w 会沿着 − ∇ E i n -∇E_{in} Ein 的方向移动,如图中蓝色箭头所示。

但是,由于存在限定条件,w 不能离开红色圆形区域,最多只能位于红色圆上边缘位置,沿着切线方向。w 的方向如图中红色箭头所示。

那么问题来了,存在限定条件,w 最终会在什么位置取得最优解呢?也就是说在满足限定条件的基础上,尽量让 E i n E_{in} Ein 最小。

我们来看,w 是沿着圆的切线方向运动,如上图绿色箭头所示。运动方向与 w 的方向(红色箭头方向)垂直。

运动过程中,根据向量知识,只要 -∇Ein 与运行方向有夹角,不垂直,则表明 -∇Ein 仍会在 w 切线方向上产生分量,那么 w 就会继续运动,寻找下一步最优解。只有当 -∇Ein 与 w 的切线方向垂直时,-∇Ein在 w 的切线方向才没有分量,这时候 w 才会停止更新,到达最接近 wlin 的位置,且同时满足限定条件。

4.正则化参数的选择

4.1 L 1 L_1 L1正则化参数

通常越大的 λ \lambda λ 可以让代价函数在参数为0时取到最小值。下面是一个简单的例子,这个例子来自Quora上的问答。为了方便叙述,一些符号跟这篇帖子的符号保持一致。
假设有如下带L1正则化项的代价函数:
F ( x ) = f ( x ) + λ ∣ ∣ x ∣ ∣ 1 F(x)=f(x)+\lambda||x||_1 F(x)=f(x)+λx1
其中 x x x 是要估计的参数,相当于上文中提到的 w w w 以及 θ \theta θ. 注意到L1正则化在某些位置是不可导的,当 λ \lambda λ足够大时可以使得) F ( x ) F(x) F(x) x = 0 x=0 x=0时取到最小值。如下图:
在这里插入图片描述
分别取 λ = 0.5 \lambda = 0.5 λ=0.5 λ = 2 \lambda = 2 λ=2,可以看到越大的 λ \lambda λ越容易使 F ( x ) F(x) F(x) x = 0 x=0 x=0时取到最小值。

4.2 L 2 L_2 L2正则化参数

从公式5可以看到, λ \lambda λ越大, θ j \theta_j θj 衰减得越快。另一个理解可以参考图2, λ \lambda λ越大,L2圆的半径越小,最后求得代价函数最值时各参数也会变得很小。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值