正则化
机器学习中,过拟合是一个很常见的问题。过拟合指的是只能拟合训练数据,但不能很好地拟合不包含在训练数据中的其他数据的状态。
发生过拟合的原因,主要有以下两个。
• 模型拥有大量参数、表现力强。
• 训练数据少。
训练数据较少时,发生过拟合,很好理解,因为样本较少,而模型为了减少误差,过分拟合了训练数据。
当模型参数很多时,模型就对样本特征有更多的“记忆容量”。举个例子,给定一组猫的图片,训练一个模型用来分辨新的图片中的动物是否为猫,而训练数据的图片中可能存在一些噪声或者其它信息的干扰,而参数较多的模型可能也会刻画这些噪声数据的分布,从而在分辨任务时考虑这些不重要的信息。最终导致,泛化能力差。
换句话说,机器学习的最终目的是是为了有更好的泛化效果,而并非更好的拟合效果。在上面举的识别猫的例子中,机器学习的任务是能够从训练数据中学习到猫的最重要的特征和共性(就像人脑海里的猫的样子)。
在机器学习中,通常使用正则化来解决这种过拟合问题,降低模型的复杂度。
为什么正则化项可以解决过拟合?
奥卡姆剃刀原理:如果你有两个或多个原理,它们都能解释观测到的事实,那么你应该使用简单或可证伪的那个,直到发现更多的证据。对于现象最简单的解释往往比较复杂的解释更正确。 在机器学习中,同样也是如此,对于所面对的任务,学习的参数小,结构简单的模型效果也更好。而复杂的模型会表现出过拟合现象。
如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
那么如何让模型参数不要太大呢?
这里在代价函数上又加了一个惩罚项,也叫正则化项。如
R
e
m
p
(
f
)
=
1
2
W
T
W
+
∑
i
l
(
y
i
,
f
(
x
i
,
w
i
)
)
R_{emp}(f)=\frac{1}{2}W^TW+\sum_{i}l(y_i,f(x_i,w_i))
Remp(f)=21WTW+i∑l(yi,f(xi,wi))
即,目标函数=代价函数+正则化项
模型的最优解也就是使目标函数最小化的情况。
而模型要拟合训练样本,要求代价函数最小,但此时某些参数Wi也会变大(因为过于拟合),这会导致惩罚项变大,所以目标函数不是最小,不是最优解。
换句话说,加入一个正则化项的目的是为了约束参数W的范数,使其不要变的太大,从而约束我们的模型变得更简单。
L1范数和L2范数
—L1范数是指向量中各个元素绝对值之和。 ∣ ∣ x ∣ ∣ 1 = ∑ i = 1 N ∣ x i ∣ ||x||_1=\sum _{i=1}^{N}|x_i| ∣∣x∣∣1=i=1∑N∣xi∣
—L1范数的使用可以使参数稀疏化,使一些参数变为0。
—L1范数作为正则化项比L2范数更能使参数稀疏化。
—L2范数:向量元素绝对值的平方和再开平方 ∣ ∣ X ∣ ∣ 2 = ∑ i = 1 N x i 2 ||X||_2=\sqrt {{\sum _{i=1}^{N}}x_i^2} ∣∣X∣∣2=i=1∑Nxi2
“可以使参数稀疏化”和“L1比L2更能使参数稀疏化”如何理解呢?
对于我们需要优化的问题:
m
i
n
w
L
1
(
w
)
=
m
i
n
w
f
(
w
)
+
λ
n
∑
i
=
1
n
∣
w
i
∣
min_wL_1(w)=min_wf(w)+\frac{\lambda}{n}\sum_{i=1}^{n}|w_i|
minwL1(w)=minwf(w)+nλi=1∑n∣wi∣
m i n w L 2 ( w ) = m i n w f ( w ) + λ 2 n ∑ i = 1 n ∣ w 2 ∣ min_wL_2(w)=min_wf(w)+\frac{\lambda}{2n}\sum_{i=1}^{n}|w^2| minwL2(w)=minwf(w)+2nλi=1∑n∣w2∣
推导如下:
对于L1范数,参数更新公式如下:
∂
L
1
(
w
)
∂
w
i
=
∂
f
(
w
)
∂
w
i
+
λ
n
s
g
n
(
w
i
)
\frac{\partial L_1(w)}{\partial w_i}=\frac{\partial f(w)}{\partial w_i}+\frac{\lambda}{n}sgn(w_i)
∂wi∂L1(w)=∂wi∂f(w)+nλsgn(wi)
w i ‘ = w i − η ∂ L 1 ( w ) ∂ w i w_i^` = w_i-\eta\frac{\partial L_1(w)}{\partial w_i} wi‘=wi−η∂wi∂L1(w)
w i ‘ = w i − η ∂ L 1 ( w ) ∂ w i − η λ n s g n ( w i ) w_i^` = w_i-\eta\frac{\partial L_1(w)}{\partial w_i}-\eta\frac{\lambda}{n}sgn(w_i) wi‘=wi−η∂wi∂L1(w)−ηnλsgn(wi)
对于L2范数来说,参数更新公式如下:
∂ L 2 ( w ) ∂ w i = ∂ f ( w ) ∂ w i + λ n w i \frac{\partial L_2(w)}{\partial w_i}=\frac{\partial f(w)}{\partial w_i}+\frac{\lambda}{n}w_i ∂wi∂L2(w)=∂wi∂f(w)+nλwi
w i ‘ = w i − η ∂ L 2 ( w ) ∂ w i w_i^` = w_i-\eta\frac{\partial L_2(w)}{\partial w_i} wi‘=wi−η∂wi∂L2(w)
w i ‘ = w i − η ∂ L 2 ( w ) ∂ w i − η λ n w i w_i^` = w_i-\eta\frac{\partial L_2(w)}{\partial w_i}-\eta\frac{\lambda}{n}w_i wi‘=wi−η∂wi∂L2(w)−ηnλwi
1)从参数的更新公式来看,L1与L2的不一样的地方在于L1会减 s g n ( w i ) sgn(w_i) sgn(wi)倍的 η λ n \eta\frac{\lambda}{n} ηnλ,而L2会减掉 w i w_i wi倍的 η λ n \eta\frac{\lambda}{n} ηnλ
当 w i w_i wi大于1时,L2获得比L1更快的减小速率,当 w i w_i wi在0到1之间时,L1比L2获得更快的减小速率。
并且当w越小时,L1更容易减小接近于0,而L2更不容易变化。因此L1会获得更多的接近与0的w。
即,L1比L2更容易获得稀疏的 w。L1范数正则化又称之为 LASSO 。
2)另外,由上面的公式可知, L2范数正则化令权重 w i w_i wi先自乘一个小于1的数 ( 1 − η λ n ) (1-\eta\frac{\lambda}{n}) (1−ηnλ),再减去不含惩罚项的梯度。因此L2范数正则化,又名叫权重衰减,也叫“岭回归”.
由此,正则化项使模型参数变得稀疏,即让一部分参数变为0(特征提取,去掉不重要的信息,留下关键特征),变得更小,使模型更加简单,从而达到减轻过拟合的现象。
引用:
-
《深度学习:基于python的理论和实践》