在进行深度学习训练时,过拟合问题是一个比较常见的问题。在面对过拟合问题是基本上有一些解决办法.如果出现过拟合可以从以下几个方面来尝试解决
- 增加数据量
- 使用正则化
- 使用dropout
- 缩小网络规模
1 增加数据量
一般出现过拟合的问题总的来说,可以说是数据量不够导致。由于数据量过少,而网络的参数也过多从而容易导致过拟合的出现。因此在出现过拟合之后,要想想是否是整个数据的数据量不够。如果真的出现这种情况。可以尝试增加数据量,如果在原始的数据只有这么多无法改变的情况下,可以尝试使用数据增强的方法来解决。在keras 中可以使用ImageDataGenerator 来增加数据。具体的操作这里就不细说了。
2 使用正则化来解决
在探究不同的范数的正则化之前,需要说明一下,在神经网络中,参数包括每一层仿射变换的权重和偏置,我们通常只对权重做惩罚操作而不对偏置做正则化惩罚。精确拟合偏置所需的数据通常比拟合权重少的很多。每一个权重会指定两个变量如何相互作用,我们需要在各种条件下观察两个变量才能良好的拟合权重。而每个偏置仅控制一个单变量。这意味着,我们不对其进行正则化也不会导致太大的方差。另外,正则化偏置参数可能会导致明显的欠拟合。因此我们使用向量w 表示所有应受惩罚影响的权重。
L
2
参
数
正
则
化
L^{2}参数正则化
L2参数正则化
L
2
L^{2}
L2参数正则化通常称为权重衰减的
L
2
L^{2}
L2参数范数惩罚。这个正则化策略通过向目标函数添加一个正则项
Ω
(
θ
)
=
1
2
∣
∣
ω
∣
∣
2
2
\Omega (\theta)=\frac {1} {2}||\omega||^{2}_{2}
Ω(θ)=21∣∣ω∣∣22 使得权重更加接近原点。在keras 中可以使用卷积中的activity_regularizer 进行操作。
L
1
参
数
正
则
化
L^{1} 参数正则化
L1参数正则化
同样的
L
1
L^{1}
L1正则化的定义为
Ω
(
θ
)
=
∣
∣
ω
∣
∣
1
\Omega (\theta)=||\omega||_{1}
Ω(θ)=∣∣ω∣∣1
上图左边是 L2 正则化,右边是 L1 正则化。从另一个方面来看,满足正则化条件,实际上是求解蓝色区域与黄色区域的交点,即同时满足限定条件和 Ein 最小化。对于 L2 来说,限定区域是圆,这样,得到的解 w1 或 w2 为 0 的概率很小,很大概率是非零的。
3 dropout 的使用
对于过拟合同样也可以使用dropout 进行解决。在这里有一个不同的点是dropout 的位置。到底添加在什么地方。对于不同的卷积网络结构有不同的位置。通常放在最后效果会稍微好一点。具体什么位置大家可以根据自己的网络结构自行参考。
4 缩小网络规模
在上面的方法你都尝试了但是整个网络还存在过拟合。那么最后就要开始思考是不是你设计的网络结构有问题的。你可以尝试缩小整个网络的规模。比如一开使用了128个特征图的可以缩小成64 。原来的10层网络结构可以缩小成8层试试。总之整个深度学习都是一个尝试的过程。