过拟合即为模型对训练集样本学习的“过好”,没有尽可能学习出适用于所有潜在样本的“普遍规律”,从而导致在出现新样本时不能够做出正确的判断。
过拟合的具体表现即为:模型在训练集上的误差很小,在测试集上的误差很大,在训练集上的准确率接近100%,但在测试集上还是较低。同时训练集上的loss会呈现出逐渐下降至不变的趋势,但是验证集上的loss则是会不断地上升。
过拟合的模型是一种完全记忆性模型,不能被一般化,不具备应用价值。我们也可以将其看作为一个过度复杂的模型,这种模型往往会利用看似正确实则无用的关系,从而导致误判的发生。
具体的产生原因为:
训练集样本数目过少;
模型复杂度过高;
训练集与测试集特征分布不一致;
样本中的噪声数据干扰过大,大到模型记住了噪声特征,忽略了真实的输入以及输出数据。
迭代次数过多,即epoch数目过大,对训练集中的数据进行了过度的拟合。
具体的解决方法:
Data Augmentation:训练集样本越多,过拟合的概率越小。可以通过数据增强的方法得数据量更大的训练集;
Early Stopping:针对过拟合定义提出来的方法,在模型对数据集迭代收敛之前停止迭代防止过拟合;
正则化(Regularization):正则化使模型保持简单。最常用的是L1、L2正则化。在损失函数中再添加一项;
Dropout:在训练过程中,随机失活部分函数,增强网络结构多样性,在改善过拟合的同时增加训练速度;
Network Structure:改变网络结构,出现过拟合的原因是因为网络模型与数据量不匹配。也就是数据量过少,或网络结构过于复杂。可以通过减少网络的深度,减少节点数量等调整,进行改善;
集成学习:训练多个模型,以每个模型的平均输出作为结果。