小常识1 深度学习或机器学习中如何防止模型过拟合和欠拟合?
图1 过拟合和欠拟合
概念解释:
过拟合:训练的模型在训练集上面的表现很好,但是在验证集上面的表现很差,即模型的泛华能力较差,如图1中的Overfitting;
欠拟合:训练的模型在训练集上面的表现很差,在验证集上面的表现也很差,如图1中的Underfitting;
原因分析
过拟合:
1. 最本质原因是“训练的模型太复杂,即模型记住了某些并不通用的特征,而不是学习到了通用的特征”;
2. 训练集和验证集不符合同分布的假设;
3. 训练数据中含有较多的噪声;
欠拟合:模型发生欠拟合的最本质原因是“训练的模型太简单,最通用的特征模型都没有学习到”;
解决方案:
过拟合
方案1:清洗数据。即去除掉可能有问题的数据(减少了训练样本);
方案2:添加正则项(正则项的作用主要是通过参数来控制模型的复杂度,常用的有L1和L2正则项);
方案3:采用“Early Stopping”方法。即所谓的提前停止方法。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。
方案4:添加Dropout层。即通过修改网络本身的结构来实现的。(在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,这样就当于生成了很多个不同的简单网络。)
图2 Dropout技术
方案5:增加训练集样本的个数。即给予模型提供更多的数据,这些数据中可能会包含更多的可能性,更容易让模型学习到通用的特征表示。
欠拟合
方案1:做特征工程,添加更多的特征项。即提供的特征不能表示出那个需要的函数;
方案2:减少正则化参数。即使得模型复杂一些;
方案3:使用更深或者更宽的模型。
方案4:使用集成方法。融合几个具有差异的弱模型,使其成为一个强模型;