如果 CNN 在添加 dropout 时不能过拟合训练集怎么办?

人工智能 卷积神经网络 线性回归 辍学
2021-11-15 18:37:09

我一直在尝试使用 CNN 来解决回归问题。在尝试泛化之前,我遵循了禁用 dropout 和过度拟合小型训练集的标准建议。使用 10 层深度架构,我可以过拟合大约 3000 个示例的训练集。但是,在输出层之前的全连接层之后添加 50% 的 dropout 时,我发现我的模型不再能过拟合训练集。在几个 epoch 之后,验证损失也停止下降。这是一个非常小的训练集,所以过拟合应该不是问题,即使有 dropout。那么,这是否表明我的网络不够复杂,无法在存在 dropout 的情况下进行泛化?添加额外的卷积层也无济于事。在这种情况下要尝试什么?如果有人能给我线索或建议,我将不胜感激。

PS:作为参考,我使用了 Alexnet 前 16 层的学习权重,并添加了 3 个具有 ReLU 非线性的卷积层,然后是一个最大池化层和 2 个全连接层。我在训练期间使用带有动量的 SGD 更新所有层的权重。

3个回答

抱歉,如果这是对添加评论的错误使用答案,但由于我的声誉不够高,这是对 OP 的问题发表评论的唯一方法。

我认为一些答案误解了 OP 的意图。

过拟合被用作测试模型复杂性的一种手段——如果一个模型不能过拟合一个小数据集,那么它很可能不能很好地泛化。

不是OP误解了过拟合的意思。

例如,我认为这个讨论是相关的:https ://stats.stackexchange.com/questions/492165/what-to-do-when-a-neural-network-cannot-overfit-one-training-sample

让我们从了解过度拟合的含义开始。如果在训练期间您的训练损失继续减少但(在后期)您的验证损失开始增加,则您的模型过度拟合。这意味着该模型不能很好地泛化到它以前没有遇到过的图像。

自然,您不希望出现这种情况。您想要的是高训练准确度和非常低的验证损失,这意味着高验证准确度。

第一项任务是确保您的模型获得较高的训练精度。一旦完成,您就可以努力获得较低的验证损失。

如果您的模型过度拟合,有几种方法可以缓解该问题。首先,从一个简单的模型开始。如果您有很多密集层和大量神经元,请将隐藏的密集层减少到最低限度。通常只留下用于最终分类的顶部密集层。然后看看模型是如何训练的。如果它训练得很好,请查看验证损失,看看它是否在以后的时期减少。如果模型训练不好,请添加一个密集层,然后添加一个 dropout 层。使用 dropout 的水平来调整过拟合。如果它仍然训练不佳,请增加神经元的数量,然后再次训练。如果失败,则添加另一个密集隐藏层,其神经元数量少于前一层,然后再添加一个 dropout 层。

另一种对抗过拟合的方法是向密集层添加正则化器。文档在这里

我认为您对过度拟合一词的滥用使问题变得模糊。通俗地说,过拟合意味着模型无法泛化到现实世界的场景,但在训练集上是准确的。

使用 dropout 层意味着网络减少了用于训练的神经元,在本例中为 50%。

提高训练准确性的建议是:

  • 迁移学习
  • 向网络添加更多层(改变神经元数量也有帮助)
  • 添加时代
  • 更改优化器(Adam 和 RMSProp 是我的一些建议)
  • 添加激活层