提问者:小点点

dropout能提高训练数据性能吗?


我正在用dropout训练一个神经网络。碰巧当我将dropout从0.9减少到0.7时,训练数据的损失(交叉验证误差)也会减少。我还注意到,随着我减少dropout参数,准确性也会提高。


共2个答案

匿名用户

Dropout是一种正则化技术。你应该只使用它来减少方差(验证性能vs训练性能)。它不是为了减少偏差,你不应该以这种方式使用它。它非常具有误导性。

你看到这种行为的原因可能是你使用了一个非常高的dropout值。0.9意味着你中和了太多的神经元。一旦你把0.7放在那里,网络在训练集上学习时有更高的神经元可以使用,这是有道理的。所以对于较低的值,性能会增加。

您通常应该会看到训练性能有所下降,同时提高了验证集的性能(如果您没有,至少在测试集上)。这是您在使用dropout时正在寻找的期望行为。您获得的当前行为是因为如果dropout的值非常高。

从0.2或0.3开始,比较偏差与方差,以获得良好的dropout值。

我明确的建议是:不要用它来改善偏差,而是减少方差(验证集上的错误)。

为了更好地适应训练集,我建议:

  1. 找到更好的架构(或改变每层神经元的数量)
  2. 尝试不同的优化器
  3. 超参数调优
  4. 也许训练网络更久一点

希望这有帮助!

匿名用户

Dropout的工作原理是概率性地删除或“删除”层的输入,这些输入可能是数据样本中的输入变量或前一层的激活。它具有模拟具有非常不同网络结构的大量网络的效果,反过来,使网络中的节点通常对输入更健壮。

使用dropout(dropout rate小于某个小值),准确率会逐渐增加,损失会先逐渐减少(这就是你的情况)。当你增加dropout超过某个阈值时,会导致模型无法正确拟合。直观地说,更高的dropout rate会导致某些层的方差更高,这也会降低训练。

你应该永远记住的是,Dropout和所有其他形式的正则化一样,它降低了模型容量。如果你把容量降低太多,肯定会得到不好的结果。

希望这对你有帮助。