如何防止过拟合

Posted on 2018-08-16 15:24  Charlie_ODD  阅读(555)  评论(0编辑  收藏  举报

通常过拟合由以下三种原因产生:

1. 假设过于复杂;2. 数据存在很多噪音;3. 数据规模太小。 

过拟合的解决方法通常有:

1. early stopping;2. 数据集扩增;3. 正则化;4. Dropout。

Early stopping:

对模型的训练过程就是对模型参数的进行学习更新的过程。参数学习的过程中往往会用到一些迭代算法,比如梯度下降法。Early stopping的目的就是在迭代次数还未到设定最大迭代次数时停止迭代防止过拟合的产生。 
Early stopping的具体方法是在每一轮的迭代过程进行交叉验证,如果验证集的精度相较上一次没有得到提升,那么就停止迭代。这种方法的思想非常直接,因为当精度都不再提高了,那么训练就没有意义了。但是也存在这样一种情况,当前代的交叉验证精度下降了,但是下一代又提升了,所以不能根据一两次的精度下降就判定不会再提高。一般的做法是,在迭代过程中,记录到目前为止最好的验证精度,如果连续十代没有提升精度,那么就认为精度不会再提高,此时便可以停止迭代。

数据集扩增

数据挖掘领域流传着这样一句话,更多的数据往往胜过一个更好的模型,因为我们的模型是通过大量的数据训练得来的,然后通过这个模型对将来的数据进行拟合。因此我们可以假设这些数据是独立同分布的,通常获取数据有以下方法:

  • 从数据源头采集更多数据
  • 复制原有的数据并加上随机噪声
  • 重采样
  • 根据当前估计数据分布参数,使用该分布产生更多数据

正则化方法

正则化是指在优化目标函数或代价函数是,在目标函数后面加上一个正则项。正则项通常有L1正则项和L2正则项。

1. L1正则 
L1正则是基于L1范数和项,即参数的绝对值和参数的积项

2. L2正则项 
L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项

 

Dropout

正则是通过在代价函数后面加上正则项来防止模型过拟合。在神经网络中,有一种方法是通过修改自身结构来实现的,叫做Dropout。这是对网络训练的一种技巧。 
如下图所示: 
三层神经网络 
对于上图的神经网络,在训练过程中随机删除一些隐藏层的神经元,同时保证输入层和输出层的神经元不变。这便得到了如下的结构: 
ANN 
这样一次迭代的过程中应用反向传播更新权重时,不用更新已经被删除的神经元的权重,在下一轮迭代过程中可以随机删除另外一些神经元。这样可以保证一直进行有瑕疵的训练,直至训练结束。