正则化
L1正则
L1正则化是所有参数的绝对值之和,这就要求所有参数的绝对值之和最小,求导,导数可能为1或-1,而绝对值的取值是大于等于0的,那么就可能导致某些参数在更新的时候趋于0
L2正则
L2正则化是所有参数平方和,导数为
2
w
2w
2w,每个参数更新的量与参数
w
w
w本身相关,
w
w
w在更新时,会逐渐变慢,
w
w
w逐渐变小趋于0,而不会变为0。
区别
L0和L1的区别:
- L0范数是指向量中非0的元素的个数,如果我们用L0范数来规则化一个参数矩阵W的话,希望W的大部分元素都是0。
- L0范数很难优化求解(NP问题)。
- L1范数是L0范数的最优凸近似,而且它比L0范数更容易优化求解。L1范数和L0范数可以实现稀疏,L1因具有比L0范数更好的优化求解特性而广泛应用。
L1和L2的区别:
- L1会趋向于产生少量的特征,而其他的特征都为0,L2会选择更多的特征,这些特征都趋于0。
- 使用L1可以得到稀疏的权值,用L2可以得到平滑的权值。
为什么
更小的权值
w
w
w,表示网络的复杂度更低,对数据的拟合刚刚好(奥卡姆剃刀法则)。设想一个线性回归模型,如果参数很大,只要数据偏移一点点,就会对结果产生很大的影响;但如果参数足够小,数据偏移的多一点不会对结果造成什么影响,也就是抗扰动能力强。 过拟合的时候,拟合函数的系数往往非常大,因为拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈,这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量可大可小,所以只有系数足够大,导数值才能很大。
权值衰减
L2正则又被称为权值衰减 当loss不包含正则项是:
O
b
j
=
L
o
s
s
w
i
+
1
=
w
i
?
?
o
b
j
?
w
i
=
w
i
?
?
L
o
s
s
?
w
i
Obj=Loss\\ w_{i+1}=w_i-\frac{\partial_{obj}}{\partial_{w_i}}=w_i-\frac{\partial_{Loss}}{\partial_{w_i}}
Obj=Losswi+1?=wi???wi???obj??=wi???wi???Loss?? 当使用L2正则时:
O
b
j
=
L
o
s
s
+
λ
2
?
∑
i
N
w
i
2
w
i
+
1
=
w
i
?
?
o
b
j
?
w
i
=
w
i
?
(
?
L
o
s
s
?
w
i
+
λ
?
w
i
)
=
w
i
(
1
?
λ
)
?
?
L
o
s
s
?
w
i
Obj=Loss+\frac{\lambda}{2}*\sum_i^Nw_i^2\\ w_{i+1}=w_i-\frac{\partial_{obj}}{\partial_{w_i}}=w_i-(\frac{\partial_{Loss}}{\partial_{w_i}}+\lambda*w_i)=w_i(1-\lambda)-\frac{\partial_{Loss}}{\partial_{w_i}}
Obj=Loss+2λ??∑iN?wi2?wi+1?=wi???wi???obj??=wi??(?wi???Loss??+λ?wi?)=wi?(1?λ)??wi???Loss??
其中,
0
<
λ
<
1
0<\lambda<1
0<λ<1,所以具有权值衰减的作用。 在 PyTorch 中,L2 正则项是在优化器中实现的,在构造优化器时可以传入 weight decay 参数,对应的是公式中的
λ
\lambda
λ。
深度学习如何防止过拟合 weight decay 和 dropout
|