什么叫过拟合,具体现象是什么?
某个假设/模型的预测在训练集上有很好的表现,却在训练集外的样本上不符预期。
造成这个现象的原因,又有什么解决方法?
过拟合应该是某个任务中数据样本与模型两者之间相互作用的结果,不能简单单独地抛开一个谈另一个。
数据方面
目前阶段的深度学习主要还是以数据驱动的,是它的优势也是它的弊端。所以数据的质量和数量极其重要,在收集、标注、整理数据过程中,多么慎重都不为过。
- 样本本身有严重错误,比如标签错误。
检查数据,除了初始状态,也应重视中间处理过程。检查每一步的操作是否符合你本意预期。 - 数据本身质量过差,存在严重噪声,导致数据真实特征被“淹没”。
原数据上做降噪,或者重新准备数据。 - 数据采样方法存在明显错误,用于训练和测试的样本分布差异过大,比如在 A 类样本上训练,却应用于 B 类样本进行推断。
在数据充足分布情况也还不错的时候,犯这个错误应该不太容易。 - 数据绝对数量过少,无法代表所对应的标签情况。
针对任务采用合适地方法进行适当地扩增是一个解决办法;
也可以自行生成仿造一些数据,如 OCR 识别的训练数据一部分由人工标注,一部分(或者说可能大部分)代码生成;
GAN 在某些情况可以增加样本量。
模型方面
以下几种情况中的原因和解决办法其实是有重叠的。
- 参数过多,模型对于当前待处理的任务来讲过于复杂,表达能力过强。
适当调整卷积层,比如小卷积核代替大卷积核、1×3 和 3×1 代替 3*3 ;
增加正则化项;
增加 BN 层(BN 层的本意是为了加速训练以及对初始值不敏感设计的);
Dropout 层(比较适合全连接层,很少在卷积层上应用)。 - 反向传播算法更新参数过程中,收敛到了过于“复杂”的决策面上,模型学习的特征中噪声影响占比增大,没有学到任务中样本普遍存在的特征,反而“过度讨好”当前训练样本,拟合了其中特有的一些“特征”;
- 训练没有及时停止。
根据 loss 的下降情况,还有在测试集上的表现及时停止训练。