卷积神经网络 - Dropout 会降低性能

Convolutional Neural Network - Dropout kills performance

我正在使用 Tensorflow 构建一个卷积神经网络(我对这两个都是新手),以便识别字母。我对 dropout 层有一个非常奇怪的行为:如果我不放它(即 keep_proba 在 1),它会表现得很好并且可以学习(请参见下面关于准确性和损失的 Tensorboard 屏幕截图,经过训练蓝色和橙色测试)。

然而,当我在训练阶段放置 dropout 层时(我在 0.8 和 0.5 尝试过),网络什么也没学到:损失迅速下降到 3 或 4 左右并且不再移动(我还注意到我的网络总是预测相同的值,无论输入图像如何)。相同的图表:

造成这种奇怪行为的原因可能是什么?我读过 dropout 是避免过度拟合的好方法。我用错了吗?

如果有用的话,这是我的网络架构: CONVOLUTION -> MAX_POOL -> RELU -> CONVOLUTION -> MAX_POOL -> RELU -> FC 1024 neurons -> DROPOUT -> OUTPUT LAYER.

非常感谢您的帮助或想法。

Dropout 是一种正则化技术,它通过根据 dropout 率在训练时间概率性地移除神经元来使网络更稳健地拟合数据。它可以成为减轻神经网络中数据过度拟合的强大工具。

对于 "how much" dropout 正则化的使用确实没有硬性规定。使用正确的训练数据,您可能根本不需要任何 dropout,而在其他情况下,它的缺失将导致严重的过度拟合病症。在您的情况下,50% 或 80% 的辍学率似乎过高(通常过度正则化会导致拟合不足)。

过拟合病态的典型指标是训练集和测试集之间的差异(通常,两者都会改善一段时间,但随后训练误差会继续下降,而测试误差开始相反方向)。虽然您的训练误差明显小于测试误差,但测试误差在训练期间不会恶化(这将是过度拟合的明确指标)。 可能仍然有一些机会来权衡一些训练错误以获得更好的样本外预测错误(这通常是最终目标)和适度的辍学率。知道这一点的唯一方法是用更适度的辍学率进行测试(我会从 20% 开始并围绕该值进行测试)以查看训练误差是否有所改善(如果没有,您可以进一步降低辍学率).在最好的情况下,您的样本外测试错误将以训练错误的增加(或训练错误的收敛速度变慢)为代价变得更好。但是,如果你过度规范化,你会看到两者的退化(这在第二组图中非常明显)。

正如其他人指出的那样,您可能会发现 dropout 正则化在卷积层中更有效(或者不是,不尝试就很难说)。 space 模型结构和所有超参数设置太大,无法有效搜索,并且没有太多的理论来指导我们的选择。一般来说,最好从已被证明可以有效解决类似问题(基于已发布的结果)的方法开始,然后从那里进行测试和试验。

能够有效地使用神经网络与学习从训练测试指标中识别这些动态有很大关系,这将使您识别基于模型结构或超参数(包括丢失率)变化的改进。