学习李航老师的《统计学习方法》第二版 关于正则化那一节,说的十分模糊,而且个人水平不行,看完之后疑惑重重,本着打破砂锅问到底的精神,多方探求,总结如下。
问题&疑惑
看到这个公式的时候一脸懵:
L
(
w
)
=
1
N
∑
i
=
1
n
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
2
∣
∣
w
∣
∣
1
L(w)=\frac{1}{N}\displaystyle\sum_{i=1}^{n}(f(x_i;w)-y_i)^2+\frac{\lambda}{2}||w||_1
L(w)=N1i=1∑n(f(xi;w)−yi)2+2λ∣∣w∣∣1
L
1
正则化
L1正则化
L1正则化
L
(
w
)
=
1
N
∑
i
=
1
n
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
2
∣
∣
w
∣
∣
2
L(w)=\frac{1}{N}\displaystyle\sum_{i=1}^{n}(f(x_i;w)-y_i)^2+\frac{\lambda}{2}||w||^2
L(w)=N1i=1∑n(f(xi;w)−yi)2+2λ∣∣w∣∣2
L
2
正则化
L2正则化
L2正则化
注:为了让读者更容易理解,所以书中用了平方损失函数。
- 是什么:
所谓的参数向量的 L 1 L1 L1和 L 2 L2 L2范数是什么? - 为什么:
参数向量的 L 1 L1 L1和 L 2 L2 L2范数为什么能够防止过拟合? - 有什么区别:
既然都能缓解过拟合问题,那 L 1 L1 L1和 L 2 L2 L2范数发挥的作用有什么不同呢?
本篇文章将试图解释上面3个问题。
L 1 L1 L1范数和 L 2 L2 L2范数
举例说吧,假设有个3维向量 w w w= ( 2 , − 1 , 3 ) (2,-1,3) (2,−1,3) T ^T T
L 1 L1 L1范数
那么 w w w的L1范数 ∣ ∣ w ∣ ∣ 1 = ∣ 2 ∣ + ∣ − 1 ∣ + ∣ 3 ∣ = 6 ||w||_1=|2|+|-1|+|3|=6 ∣∣w∣∣1=∣2∣+∣−1∣+∣3∣=6,也就是L1范数就是向量各元素的绝对值求和。带入到机器学习问题中,就是各特征的权重(wieght,简称 w w w)绝对值求和。L1范数有点像曼哈顿距离的意思。
L 2 L2 L2范数
那么 w w w的L2范数 ∣ ∣ w ∣ ∣ 2 = 2 2 + ( − 1 ) 2 + 3 2 2 ||w||_2=\sqrt[2]{2^2+(-1)^2+3^2} ∣∣w∣∣2=222+(−1)2+32,也就是L2范数就是向量各元素的平方和再开方。L2范数像是欧氏距离,所以也称为欧几里得范数。
L p L_p Lp范数
既然有L1和L2范数,引申一下就有L3,L4……
L
p
L_p
Lp范数,
p
p
p可以是无穷大。这个问题不是本文的讨论重点,这里不再赘述。
讲清楚了
L
1
L1
L1和
L
2
L2
L2是什么的问题,接下来要讲这俩兄弟为什么能够缓解过拟合。为了尽可能清晰揭示这个问题的本质,可以从3个角度来理解。
从拉格朗日乘数法角度理解
理解模型复杂度
正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。——《统计学习方法 第二版》.
这句话越想越难受。比如按照这句话去论证的话,复杂模型的正则化值更大,以常见的模型为例:
模型1:
y
=
2
x
+
1
y=2x+1
y=2x+1其权重
w
1
=
2
w_1=2
w1=2
模型2:
y
=
x
2
+
1
y=x^2+1
y=x2+1其权重
w
2
=
1
w_2=1
w2=1
二次函数肯定是比一次函数复杂,也就是模型2比模型1复杂,但是这两个模型的正则项无论是L1范数还是L2范数,显然都是模型1的更大。也就是说这么理解肯定是错的。那高维模型为什么比低维模型复杂呢?
因为高维模型的权重有更大的假设空间。
y
=
w
1
x
2
+
w
2
x
+
b
y=w_1x^2+w_2x+b
y=w1x2+w2x+b它的权重
(
w
1
,
w
2
)
(w_1,w_2)
(w1,w2)比
y
=
w
1
x
+
b
y=w_1x+b
y=w1x+b的权重
(
w
1
)
(w_1)
(w1),有更大的取值空间。可以理解为前者在一个面上变化,后者在一条线上变化。
维度越高,模型越复杂,对训练样本的拟合度越高。从泰勒展开的角度理解,函数越复杂,对泰勒展开式要求的项数越多;泰勒展开式的项数越多(函数维度越高),对某函数的拟合就越接近。这里也是在看了篇回答才明白的,点这里看原文。
对损失函数加上约束项
理解了模型复杂度,我们继续来看损失函数。先把正则项什么的扔掉,看原本的经验风险(不加正则项的损失函数):
L
1
(
w
)
=
1
N
∑
i
=
1
n
(
f
(
x
i
;
w
)
−
y
i
)
2
L^1(w)=\frac{1}{N}\displaystyle\sum_{i=1}^{n}(f(x_i;w)-y_i)^2
L1(w)=N1i=1∑n(f(xi;w)−yi)2
不加正则化时,我们的目标是求
L
1
(
w
)
L^1(w)
L1(w)最小时的
w
w
w。
可是刚才我们已经知道,如果没有约束条件,
w
w
w会“肆无忌惮”地去取值,尽一切可能使
L
1
(
w
)
L^1(w)
L1(w)最小。走到极端,就会产生过拟合。为了避免这件事发生,我们应该怎么做呢?
很简单,我们需要为权重向量
w
w
w人为划上一个范围,让其不能太过分。我们不要求损失函数最小,我们可以牺牲一定的精度,从而在更大范围的样本空间使模型更具预测性。这个“人为划的范围”就是约束条件:
w
≤
c
w≤c
w≤c 其中
c
c
c是权重向量
w
w
w的取值空间。于是现在的问题变成了在
w
−
c
≤
0
w-c≤0
w−c≤0的约束条件下求损失函数的最值问题,而这正是拉格朗日乘数法的解决范畴。
当使用
L
1
L1
L1范数的时候,约束条件:
∣
∣
w
∣
∣
1
−
c
≤
0
||w||_1-c≤0
∣∣w∣∣1−c≤0
当使用
L
2
L2
L2范数的时候,约束条件:
∣
∣
w
∣
∣
2
−
c
≤
0
||w||_2-c≤0
∣∣w∣∣2−c≤0
分别使用
L
1
L1
L1和
L
2
L2
L2范数构建拉格朗日函数:
L
(
w
,
λ
)
1
=
1
N
∑
i
=
1
n
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
(
∣
∣
w
∣
∣
1
−
c
)
L(w,\lambda)_1=\frac{1}{N}\displaystyle\sum_{i=1}^{n}(f(x_i;w)-y_i)^2+\lambda(||w||_1-c)
L(w,λ)1=N1i=1∑n(f(xi;w)−yi)2+λ(∣∣w∣∣1−c)
L
(
w
,
λ
)
2
=
1
N
∑
i
=
1
n
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
(
∣
∣
w
∣
∣
2
−
c
)
L(w,\lambda)_2=\frac{1}{N}\displaystyle\sum_{i=1}^{n}(f(x_i;w)-y_i)^2+\lambda(||w||_2-c)
L(w,λ)2=N1i=1∑n(f(xi;w)−yi)2+λ(∣∣w∣∣2−c)
我们在更广泛意义上简化一下上述函数,损失函数1:
L
(
w
,
λ
)
1
=
L
(
y
;
x
,
w
)
+
λ
(
∣
∣
w
∣
∣
1
−
c
)
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
1
−
λ
c
L(w,\lambda)_1=L(y;x,w)+\lambda(||w||_1-c)=L(y;x,w)+\lambda||w||_1-\lambda c
L(w,λ)1=L(y;x,w)+λ(∣∣w∣∣1−c)=L(y;x,w)+λ∣∣w∣∣1−λc
L
(
w
,
λ
)
2
=
L
(
y
;
x
,
w
)
+
λ
(
∣
∣
w
∣
∣
2
−
c
)
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
2
−
λ
c
L(w,\lambda)_2=L(y;x,w)+\lambda(||w||_2-c)=L(y;x,w)+\lambda||w||_2-\lambda c
L(w,λ)2=L(y;x,w)+λ(∣∣w∣∣2−c)=L(y;x,w)+λ∣∣w∣∣2−λc
由于
w
w
w是未知变量,其他变量都可以看成常数,所以在用梯度下降法逼近极值的过程中,
w
w
w的变化过程就等价于,损失函数2:
L
(
w
,
λ
)
1
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
1
L(w,\lambda)_1=L(y;x,w)+\lambda||w||_1
L(w,λ)1=L(y;x,w)+λ∣∣w∣∣1
L
(
w
,
λ
)
2
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
2
L(w,\lambda)_2=L(y;x,w)+\lambda||w||_2
L(w,λ)2=L(y;x,w)+λ∣∣w∣∣2
虽然损失函数1和2的极值点不同,但是到达极值点时的
w
w
w是相等的。损失函数2看起来更简化,但是损失函数1更容易理解。
到这里确实有一点豁然开朗的感觉:原来正则化的意义就是对模型复杂度进行了约束,然后在约束条件下求损失函数的最小值!所以,
L
1
L1
L1和
L
2
L2
L2范数能够缓解过拟合。
L 1 L1 L1范数和 L 2 L2 L2范数的区别
学到这里的时候确实很郁闷,既然 L 1 L1 L1和 L 2 L2 L2都有减轻过拟合的作用,那么我到底使用 L 1 L1 L1还是 L 2 L2 L2呢,难道看心情吗? L 1 L1 L1和 L 2 L2 L2到底有什么区别?然后在网上各种搜大神的解答,答案倒是很明确:
L 1 L1 L1正则化能够得到稀疏解,从而可以起到特征筛选的作用。 L 2 L2 L2正则化则没有这个作用。
好了,现在问题更多了:
- 什么是稀疏解?
- 稀疏解和特征筛选有什么关系?
- 凭什么说 L 1 L1 L1可以得到稀疏解,而 L 2 L2 L2得不到?
什么是稀疏解?
也就是说权重向量
W
=
(
w
1
,
w
2
…
…
w
n
)
T
W=(w_1,w_2……w_n)^T
W=(w1,w2……wn)T是稀疏的,稀疏就是这个向量里面很多元素是0。比如我们说
(
1
,
0
,
0
,
0
,
0
)
T
(1,0,0,0,0)^T
(1,0,0,0,0)T是稀疏的,而
(
2
,
3
,
4
,
5
,
6
)
T
(2,3,4,5,6)^T
(2,3,4,5,6)T不是稀疏的;同时,
(
1
,
0
,
0
,
0
,
0
)
T
(1,0,0,0,0)^T
(1,0,0,0,0)T要比
(
1
,
1
,
1
,
0
,
0
)
T
(1,1,1,0,0)^T
(1,1,1,0,0)T更加稀疏。
这样就很容易看出来,在得到稀疏解的时候,就意味着权重向量
W
W
W中很多元素为0,也就是最后学习到的模型,很多特征的权重或者说系数是0。这就是所谓的被筛选掉了,在预测过程中没有发挥作用。
为什么加入L1正则可以得到稀疏解?
上面已经知道,得到稀疏解就是能够得到
w
i
=
0
w_i=0
wi=0的解,也就是当
w
i
=
0
w_i=0
wi=0时,损失函数(或者说结构风险函数)达到极小值。为什么会这样?
还是回到正则化后的损失函数:
L
(
w
,
λ
)
1
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
1
L(w,\lambda)_1=L(y;x,w)+\lambda||w||_1
L(w,λ)1=L(y;x,w)+λ∣∣w∣∣1
L
(
w
,
λ
)
2
=
L
(
y
;
x
,
w
)
+
λ
∣
∣
w
∣
∣
2
L(w,\lambda)_2=L(y;x,w)+\lambda||w||_2
L(w,λ)2=L(y;x,w)+λ∣∣w∣∣2
为了简化问题,我们假设如下情况:
现在已知有3个训练样本点: ( 1 , 2 ) (1,2) (1,2), ( 2 , 3 ) (2,3) (2,3), ( 4 , 5 ) (4,5) (4,5),我们打算用 y = w x + b y=wx+b y=wx+b来拟合这3个样本点,使用最小二乘法,使用 L 1 L1 L1和 L 2 L2 L2正则化,则损失函数分别为:
L ( w , b ) = 1 2 [ ( w + b − 2 ) 2 + ( 2 w + b − 3 ) 2 + ( 4 w + b − 5 ) 2 ] + λ ∣ w ∣ L(w,b)=\frac{1}{2}[(w+b-2)^2+(2w+b-3)^2+(4w+b-5)^2]+\lambda|w| L(w,b)=21[(w+b−2)2+(2w+b−3)2+(4w+b−5)2]+λ∣w∣
L ( w , b ) = 1 2 [ ( w + b − 2 ) 2 + ( 2 w + b − 3 ) 2 + ( 4 w + b − 5 ) 2 ] + 1 2 λ w 2 L(w,b)=\frac{1}{2}[(w+b-2)^2+(2w+b-3)^2+(4w+b-5)^2]+\frac{1}{2}\lambda w^2 L(w,b)=21[(w+b−2)2+(2w+b−3)2+(4w+b−5)2]+21λw2
使用
L
1
L1
L1正则损失函数:
对
w
w
w求偏导:
∂
L
∂
w
=
7
w
+
3
b
−
10
+
λ
s
i
g
n
(
w
)
\frac{\partial L}{\partial w}=7w+3b-10+\lambda sign(w)
∂w∂L=7w+3b−10+λsign(w)
由于
λ
∣
w
∣
\lambda |w|
λ∣w∣在
w
=
0
w=0
w=0处不可导,所以上式可以变成如下分段函数:
∂
L
∂
w
=
7
w
+
3
b
−
10
+
λ
(
w
>
0
)
\frac{\partial L}{\partial w}=7w+3b-10+\lambda(w>0)
∂w∂L=7w+3b−10+λ(w>0)
∂
L
∂
w
=
7
w
+
3
b
−
10
−
λ
(
w
<
0
)
\frac{\partial L}{\partial w}=7w+3b-10-\lambda(w<0)
∂w∂L=7w+3b−10−λ(w<0)
当
w
w
w趋于0:
lim
w
→
0
+
7
w
+
3
b
−
10
+
λ
=
3
b
−
10
+
λ
\lim_{w \to \ 0^+} 7w+3b-10+\lambda \quad=3b-10+\lambda
w→ 0+lim7w+3b−10+λ=3b−10+λ
lim
w
→
0
−
7
w
+
3
b
−
10
+
λ
=
3
b
−
10
−
λ
\lim_{w \to \ 0^-} 7w+3b-10+\lambda \quad=3b-10-\lambda
w→ 0−lim7w+3b−10+λ=3b−10−λ
所以只要:
λ
>
3
b
−
10
\lambda >3b-10
λ>3b−10,那么在偏导在
w
=
0
w=0
w=0两侧异号,由此推出
w
=
0
w=0
w=0为
L
1
L1
L1损失函数的极小值点。也就是,模型得到了稀疏解。
反观
L
2
L2
L2正则化,对
w
w
w求偏导:
∂
L
∂
w
=
7
w
+
3
b
−
10
+
λ
w
\frac{\partial L}{\partial w}=7w+3b-10+\lambda w
∂w∂L=7w+3b−10+λw,也就是说除非正则化前的损失函数在
w
=
0
w=0
w=0取得极小值,否则正则化后的损失函数无法在
w
=
0
w=0
w=0处取得极小值。
那么L2正则化有什么作用呢?
我们来看,在使用L2正则化之前,当损失函数取得极小值时,
w
1
=
10
−
3
b
7
w_1=\frac{10-3b}{7}
w1=710−3b。
在使用
L
2
L2
L2正则化后,当损失函数取得极小值时,
w
2
=
10
−
3
b
7
+
λ
w_2=\frac{10-3b}{7+\lambda}
w2=7+λ10−3b。
由于
λ
>
0
\lambda >0
λ>0,所以
w
1
>
w
2
w_1>w_2
w1>w2,更确切地说
∣
w
1
∣
>
∣
w
2
∣
|w_1|>|w_2|
∣w1∣>∣w2∣。
怎么理解呢,也就是说在使用L2正则化后,模型各特征权重被缩小了,每个特征发挥的作用(对结果的预测作用)都减小了。
我的理解是,这样的模型意味着对一些离群点或噪声点的训练和学习不会太过度,最后得到的模型会更加反应大多数数据的变化规律。
其他理解角度
我在查阅资料的过程中发现,还可以从贝叶斯的角度和权重衰减的角度去理解L1和L2正则化,但是这两块我还没有彻底吃透,等吃透了再总结成文章。