概念
输入的微小改变产生了输出的较大差异。比如一个识别动物的模型,一开始输入马的特征数据,模型能判断出该输入为马;稍微改动一点之后,比如眼睛稍微大一点,模型马上把输入的动物判别成牛了。
模型过拟合在模型参数角度来看,是由两个原因造成的:
- 参数量很多
- 参数很大
如果能解决上述两个问题或者其中的一个,过拟合问题预期都能有效缓解。
规避方法
1. dropout
前向传播每一个batch_size时每个神经元都以一定的概率p被保留,反向传播时更新那些保留下的神经元梯度和与这些神经元相关的权重矩阵参数。这样使得每个batch_size对应的模型都不相同,因而多个batch_size训练后会得到很多模型的平均,相当于模型融合,这样模型的鲁棒性增强,从而最大程度抑制过拟合。
2. 正则化
假设要拟合的函数为
f
(
x
)
=
w
x
+
b
f(x)=wx+b
f(x)=wx+b,正则化的目的是将模型参数(
w
w
w)学习过程规范化,而非"肆意妄为"地去学,分为L1和L2正则化,两个正则化的公式如下所示:
J
L
1
(
w
)
=
L
(
w
)
+
λ
∣
w
∣
J
L
2
(
w
)
=
L
(
w
)
+
λ
w
2
\begin{aligned} J_{L1}(w)=L(w)+ \lambda \left | w \right | \\ J_{L2}(w)=L(w)+ \lambda w^2 \end{aligned}
JL1(w)=L(w)+λ∣w∣JL2(w)=L(w)+λw2
L1正则化比较容易得到稀疏解,这里会从两种不同的角度来解释。且L1正则化背后的数学假设为参数 w w w服从的是拉普拉斯分布,L2正则化背后的数学假设为参数 w w w服从的是高斯分布,详情可见这里。
求导角度
假设
L
′
(
w
)
∣
w
=
0
=
d
0
L'(w)|_{w=0}=d_0
L′(w)∣w=0=d0,对于L2正则化,导数如下所示
∂ J L 2 ( w ) ∂ w ∣ w = 0 = d 0 + 2 λ w = d 0 \frac{\partial J_{L2}(w) }{\partial w} |_{w=0}=d_0+2\lambda w=d_0 ∂w∂JL2(w)∣w=0=d0+2λw=d0
对于L1正则化,导数如下所示,
∂
J
L
1
(
w
)
∂
w
∣
w
=
0
−
=
d
0
−
λ
∂
J
L
1
(
w
)
∂
w
∣
w
=
0
+
=
d
0
+
λ
\begin{aligned} \frac{\partial J_{L1}(w) }{\partial w} |_{w=0^-}=d_0-\lambda \\ \frac{\partial J_{L1}(w) }{\partial w} |_{w=0^+}=d_0+\lambda \end{aligned}
∂w∂JL1(w)∣w=0−=d0−λ∂w∂JL1(w)∣w=0+=d0+λ
可以看出来,当w等于0的时候,L2正则化的导数取值仍然是 d 0 d_0 d0,而L1正则化的导数在w等于0的左右两次符号有可能会发生变化,因而0处有可能成为极小值点。
图示角度
不对偏置项进行正则化的原因
精确拟合偏置所需的数据通常比拟合权重少很多,且拟合偏置较为容易,如果贸然正则化偏置参数,可能会导致明显的欠拟合。
L0 VS L1
L0正则化代表的是非0参数的个数,L1正则化代表的是参数绝对值的和。L0只限制了参数的个数越小越好,但是没有限制参数的大小,但L1正则化既限制了参数的数量也限制了参数的大小,因而L1的效果通常要比L0好一些。
3. 数据集扩充
将训练集扩充的更加全面,让模型看到更多更全面的数据,这样模型才不会学偏。
4. early stopping
early的意思是过早地停掉训练集的拟合,注意停掉的时候训练集还没拟合完全。停掉的条件指的是validation的loss已经在上升了。