我们在训练机器学习模型或者深度学习神经网络中经常会遇到过拟合与欠拟合的问题,接下来就对这两个问题进行简单介绍,并举出几种相应的解决办法。
1、过拟合与欠拟合
过拟合是指训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。出现这种现象的主要原因是训练数据中存在噪音或者训练数据太少。
欠拟合就是指我们训练的模型要求过于宽泛无法达到我们预期的效果正确率低表达能力差。
用一个回归问题来说明如下图所示
2、过拟合解决办法
数据清洗
产生过拟合的原因可能是由数据噪声干扰过多导致,所以可选择重新进行数据清洗
增加训练集
模型表达能力过强很可能是由于训练集占比过少导致的,所以增加训练集在一定程度上提高模型的泛化能力
dropout方法
dropout方法在神经网络里面经常使用,随着神经网络参数的增加使得过拟合的可能性变大所以使用dropout会选择性失活n个神经元,削弱神经元之间的联合适应性从而提高泛化能力
正则化
首先举一个过拟合的例子
根据上面的图片我们知道所谓的过拟合就是对于当前可见的数据盲目的自信,如上图所示正常来说我们是希望曲线拟合为蓝色所示的直线能够很好的表达数据的分布泛化能力很好使我们所希望的,但是过拟合了之后就会因为
x2与x3
x
2
与
x
3
完全拟合数据点变得弯来弯去。这个时候我们发现了问题所在要想解决过拟合,就要从这些非线性强的参数入手。
假设我们拟合的曲线是
y=θ0+θ1x+θ2x2+θ3x3+θ4x4
y
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
θ
3
x
3
+
θ
4
x
4
所以假设误差为
J(θ)=[yθ(x)−y]2
J
(
θ
)
=
[
y
θ
(
x
)
−
y
]
2
因为在通过损失函数减少误差的过程中我们实际改变的是权重
θ
θ
,而且非线性影响越大的参数权重改变的越多,所以这个时候我们就可以在损失函数上加上惩罚项去限制那些非线性参数的改变,然而根据惩罚项的程度我们可以分为L1正则化与L2正则化
L1:
J(θ)=[yθ(x)−y]2+[|θ1|+|θ2|+|θ3|+|θ4|]
J
(
θ
)
=
[
y
θ
(
x
)
−
y
]
2
+
[
|
θ
1
|
+
|
θ
2
|
+
|
θ
3
|
+
|
θ
4
|
]
L2:
J(θ)=[yθ(x)−y]2+[θ21+θ22+θ23+θ24]
J
(
θ
)
=
[
y
θ
(
x
)
−
y
]
2
+
[
θ
1
2
+
θ
2
2
+
θ
3
2
+
θ
4
2
]
此处科普一下L1和L2范数
L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”。L2范数是指向量中个元素的平方求和开平方,这样可以让每个权重都接近于0但不等于0。所以就能起到限制非线性参数改变模型的作用。
可以将L1与L2用图像表示,因为L1是绝对值所以图像就是对称的,L2是平方和所以为圆
蓝色的椭圆为
J(θ)
J
(
θ
)
黄色的线为正则项,二者交点就是误差和最小的地方。因为我们可以看出L1正则化中只保留了
θ1
θ
1
的特征所以不是很稳定。
最后为了控制正则化的强度会加上一个参数
λ
λ
并且通过交叉验证 cross validation 来选择合适的
λ
λ
J(θ)=[yθ(x)−y]2+λ∑θpi
J
(
θ
)
=
[
y
θ
(
x
)
−
y
]
2
+
λ
∑
θ
i
p
其中p表示正则化程度