L1和L2正则化方法对于机器学习模型来说都具有防止模型过拟合的作用,通常我们需要理解他们是如何发挥作用的。L1、L2原理的解释可以从两个角度:
- 带约束条件的优化求解(拉格朗日乘子法)
- 贝叶斯学派:最大后验概率
- L1正则化相当于为参数w加入了拉普拉斯分布的先验。
- L2正则化相当于为参数w加入了高斯分布的先验。
L2正则化
约束优化角度
正则化是一种回归的形式,它将系数估计朝零的方向进行约束、调整或缩小。也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险。在机器学习任务中,对于一个参数模型,优化参数时一定伴随着损失函数的建立与优化。
我们首先来看下不加入L2正则化的模型损失函数:
JL2(w)=L(w)
加入L2正则化后的模型损失函数为:
JL2(w)=L(w)+2nλw2
所以L2正则化的方式就是在原来损失函数的基础上,再加上模型参数的值的平方即可。其中等号右边的前半部分称为经验风险
,后半部分称为结构风险
。
对于原始损失函数求一阶导为:
δwδL(w)=d0
对于加入L2正则的损失函数求一阶导为:
δwδJL2(w)=d0+nλw
好,到这里我们知道加入L2正则化的损失函数求导后多个一个关于w的项。
在优化模型过程中,一般会选择相应的优化算法,例如选择SGD优化算法时,参数w
更新公式为:
其中,lr
表示学习率 learning rate.
w=w−lr∗δwδL(w)
如果使用L2正则后的模型更新参数w
公式为:
w=w−lr∗δwδL(w)−nlr∗λw
=(1−nlr∗λ)∗w−lr∗δwδL(w)
可以看出来使用原始损失函数的一阶导数时,w
的权重是1,加入L2正则后,w
的权重一定小于1,也就是对模型进行了衰减。
L2的权值更新公式为wi = wi – η * wi
,虽然权值不断减小,但每次减小的幅度不断降低,所以很快会收敛到较小的值但不为0。
在过拟合问题中,模型的参数越大,模型过拟合的风险越大,而模型参数越小,模型越不容易过拟合。因此通过加入L2正则化,对模型参数进行衰减,从而减小了过拟合的风险。
贝叶斯角度
上面是从优化函数角度解释L2正则化方式防止过拟合的原因,那么如果从贝叶斯角度如何理解呢?
为L(w)加入正则项,相当于为模型的参数 w 加入先验,那要求w满足某一分布。
下面先介绍下高斯分布。高斯分布又称正态分布,是常见的连续概率分布。高斯分布的概率密度函数为:
f(x)=σ2π1e−2σ2(x−μ)2
其曲线图如下所示:
那么高斯分布和L2正则化是怎联系上的呢?
我们知道在最大似然估计中,是假设权重w是未知的参数,从而求得对数似然函数(取了log):
l(w)=log[P(y∣X;w)]=log[ϵ∏P(yi∣xi;w)](∗)
从上面可以看出,对于y^i
不同的概率分布,就可以得到不同的模型。
若我们假设满足
yi∽N(wTxi,σ2)
的高斯分布,我们则可以在公式(*)中带入高斯分布的概率密度函数:
l(w)=log[i∏2πσ1e−2σ2(yi−wTxi)2]
=−2σ21i∑(yi−wTxi)2+C
上面的C为常数项。常数项和系数不影响我们求解max(l(w))
的解,所我们可以令
J(w;X,y)=−l(w)
这样其实是得到了Linear Regression
的代价函数。
而在最大化后验概率估计中,我们将权重w看作随机变量,也具有某种分布,从而有:
P(w∣X,y)=P(X,y)P(w,X,y)=P(X,y)P(X,y∣w)P(w)∝P(y∣X,w)P(w)
取对数后得到:
MAP=logP(y∣X,w)P(w)=logP(y∣X,w)+logP(w)
可见,后验概率函数是在似然函数基础上再加上logP(w),P(w)的意义是对权重系数w的概率分布的先验假设,在收集到训练样本{X, y}之后,则可根据{X, y}的后验概率对w进行修正,从而对w做出更好的估计。
若假设w的先验分布为0均值的高斯分布,即:
wj∽N(0,σ2)
则有:
log(P(w))=logj∏P(wj)=logj∏[2πσ1e−2σ2wj2]
=−2σ21∑wj2+C
可以看到,在高斯分布下,logP(w)的效果等价于在损失函数中增加L2正则化。
所以,L2正则化可通过假设权重w的先验分布为高斯分布,由最大后验概率估计导出。
L1正则化
约束优化角度
L1正则化具有防止模型过拟合的能力,但是相比于L2正则化,两者防止过拟合的方式不太一样。
不加入L1正则化的损失函数为
JL1(w)=L(w)
加入L1正则化的损失函数为
JL1(w)=L(w)+λ∣w∣
为什么新的损失函数可以防止模型的过拟合呢?
我们经常在一些文章或者博客中看到L1防止过拟合的方式是因为L1正则化有特征选择的作用,容易产生稀疏解,即可以使得重要特征的参数不为0,而使得一些不重要特征的参数变为0将其抛弃掉。
那么究竟为什么L1具有特征选择的作用,是如何将不重要特征的参数学习的结果为0的呢?
我们在优化更新参数w
的时候,一般需要对损失函数求解一阶导数,对原始损失函数求解在w=0
处的一阶导数为:
δwδL=d0
则引入L1正则项后,求解w=0
的一阶导数为:
δwδJL1(w)∣w=0−=d0−λ
δwδJL1(w)∣w=0+=d0+λ
可见引入L1正则后,在0处的导数有一个突变,从d0−λ
变到d0+λ
。
若d0−λ
和d0+λ
异号,则在0处会是一个极小值点,因此,参数优化时很有可能优化到该极小值点上,即w=0
处,当有多个参数时也是类似的情况,因此用L1正则化容易产生稀疏解。
其实L1正则化的权值更新公式为wi = wi – η * 1
, 权值每次更新都固定减少一个特定的值η
,那么经过若干次迭代之后,权值就有可能减少到0。
上面我们知道L1正则化可以通过让模型学习更多稀疏解,而使得更多的参数变为0,当一个模型中有很多0值参数时,其模型复杂度会变得更小,从而给予模型防止过拟合的能力。
贝叶斯角度
先来介绍下拉普拉斯分布:
上面是拉普拉斯分布曲线,其对应公式为:
p(x)=2λ1e−λ∣x−μ∣
一般𝜇的取值为0,所以形式如下:
p(x)=2λ1e−λ∣x∣
由于其是由两个指数函数组成,因此又叫双指数函数分布。
若假设w_j
服从均值为0、参数为a的拉普拉斯分布,即:
P(wj)=2a1ea−∣wj∣
则有:
log(P(w))=logj∏2a1ea−∣wj∣
=−a1j∑∣wj∣+C
上面的C为常数项。可以看到,在拉普拉斯分布下logP(w)的效果等价在代价函数中增加L1项。
所以,L1正则化可通过假设权重w的先验分布为拉普拉斯分布,由最大后验概率估计导出。