卷积神经网络 - 辍学杀死性能

时间:2017-06-22 09:14:24

标签: tensorflow neural-network conv-neural-network tensorboard

我正在使用Tensorflow构建一个卷积神经网络(我是两者都是新的),以便识别字母。我有一个非常奇怪的行为与dropout层:如果我不把它(即keep_proba在1),它表现得相当好并且学习(参见Tensorboard下面的准确性和丢失截图,蓝色训练和测试在橙色)。 Tensorboard - loss and accuracy without dropout

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

这种奇怪行为的原因是什么?我已经读过辍学是一件好事,可以避免过度拟合。我用错了吗?

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

非常感谢任何帮助或想法。

1 个答案:

答案 0 :(得分:1)

Dropout是一种正则化技术,通过根据丢失率在训练时概率性地删除神经元,使网络更可靠地拟合数据。它可以成为缓解神经网络中数据过度拟合的强大工具。

对于使用“多少”辍学正则化确实没有严格的规定。有了正确的培训数据,您可能根本不需要任何辍学,而在其他情况下,缺少辍学会导致严重的过拟合病情。就您而言,看来辍学率可能高达50%或80%(通常,过度规范会导致拟合不足)。

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

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

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