1. 引入正则化
曲线1,不能很好地拟合数据,这是高偏差(high bias)的情况,我们称为“欠拟合”(underfitting);
而随着训练次数增多,我们设计的算法慢慢找出了数据的模式,能在尽可能多地拟合数据点的同时反映数据趋势,这时它是一个性能较好的模型。在这基础上,如果我们继续训练,那模型就会进一步挖掘训练数据中的细节和噪声,为了拟合所有数据点“不择手段”,这时它就过拟合了。
所以,曲线3,似乎完美地拟合了我们地数据,但方差较高(high variance),数据过度拟合(overfitting);
在两者之间,可能还有一些像曲线2这样的,复杂程度适中,数据拟合适度的分类器,这个数据拟合看起来更加合理,我们称之为“适度拟合”(just right)。
从左往右看,模型的复杂度逐渐提高,在训练集上的预测错误逐渐减少,但它在测试集上的错误率却呈现一条下凸曲线。
引入正则化,就是为了防止过拟合。
它将系数估计(coefficient estimate)朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。
为什么通过L1正则、L2正则能够防止过拟合?
解释:
过拟合产生的原因通常是因为参数比较大导致的,通过添加正则项,假设某个参数比较大,目标函数加上正则项后,也就会变大,因此该参数就不是最优解了。
问:为什么过拟合产生的原因是参数比较大导致的?
答:过拟合,就是拟合函数需要顾及每一个点,当存在噪声的时候,原本平滑的拟合曲线会变得波动很大。在某些很小的区间里,函数值的变化很剧烈,这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
其做法是,在损失函数后面添加一个额外项,常用的额外项一般有两种,一般英文称作 ℓ 1 − n o r m ℓ_1-norm ℓ1−norm和 ℓ 2 − n o r m ℓ_2-norm ℓ2−norm,中文称作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 ∣∣w∣∣1=i∑wi
- L2正则化是指权值向量 w w w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为 1 2 ∣ ∣ w ∣ ∣ 2 2 \frac{1}{2}∣∣w∣∣_2^2 21∣∣w∣∣22
一般都会在正则化项之前添加一个系数,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+αw∑∣w∣
其中
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=α∑w∣w∣,则 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+αw∑w2
同样可以画出他们在二维平面上的图形,如下:
二维平面下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(θ)=2m1i∑m(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)
∂θj∂J(θ)=m1i∑m(hθ(x)−y)∂θj∂hθ(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
∂θj∂J(θ)=m1i∑m(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)}
∂θj∂J(θ)=m1i∑m(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−αm1i∑m(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λ)−αm1i∑m(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+λj∑wj2
其中, E i n E_in Ein是未包含正则化项的训练样本误差,λ 是正则化参数,可调。
我们已经知道,正则化的目的是限制参数过多或者过大,避免模型更加复杂。例如,使用多项式模型,如果使用 10 阶多项式,模型可能过于复杂,容易发生过拟合。所以,为了防止过拟合,我们可以将其高阶部分的权重 w 限制为 0,这样,就相当于从高阶的形式转换为低阶。
为了达到这一目的,最直观的方法就是限制 w 的个数,但是这类条件属于 NP-hard 问题,求解非常困难。所以,一般的做法是寻找更宽松的限定条件:
∑ j w j 2 < C \sum_j w_j^2<_{C} j∑wj2<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)+λ∣∣x∣∣1
其中
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圆的半径越小,最后求得代价函数最值时各参数也会变得很小。
参考
- 作者:阿拉丁吃米粉 来源:CSDN
原文:https://blog.csdn.net/jinping_shi/article/details/52433975 - https://www.jqr.com/article/000173 一文概述深度学习中的正则化
- https://www.cnblogs.com/pinking/p/9310728.html 对于正则化的理解
- https://blog.csdn.net/red_stone1/article/details/80755144 【通俗易懂】机器学习中 L1 和 L2 正则化的直观解释