辍学可以提高训练数据的性能吗?

时间:2019-11-26 05:32:34

标签: neural-network deep-learning training-data loss-function dropout

我正在训练带有辍学的神经网络。碰巧,当我将辍学率从0.9降低到0.7时,训练数据数据的损失(交叉验证误差)也降低了。我还注意到,随着降低辍学参数,准确性会提高。

对我来说似乎很奇怪。有道理吗?

2 个答案:

答案 0 :(得分:0)

Dropout的工作方式是概率性地删除或“丢弃”对某个层的输入,该输入可以是数据样本中的输入变量或来自上一层的激活。它具有模拟具有不同网络结构的大量网络的效果,从而使网络中的节点通常对输入更为健壮。

随着辍学(辍学率小于某个小值),准确性将逐渐提高,而损失则将首先逐渐减少(这就是您的情况)。 当您将辍学增加到某个阈值以上时,将导致模型无法正确拟合。直观地讲,较高的辍学率将导致某些图层的差异较大,这也会降低训练质量。

您应该始终记住,Dropout像所有其他形式的正则化一样,因为它会减少模型容量。如果过多减少容量,则肯定会导致不良结果。

希望这对您有所帮助。

答案 1 :(得分:0)

Dropout是一种正则化技术。您仅应使用它来减少差异(验证性能与训练性能)。它并非旨在减少偏差,也不应该以这种方式使用它。 这非常容易引起误解。

您可能会看到此行为的原因是您使用了很高的辍学值。 0.9意味着您中和了太多的神经元。有道理的是,一旦您将其设置为0.7,网络就可以在学习训练集时使用更高的神经元。因此,对于较低的值,性能将提高。

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

从0.2或0.3开始,并比较偏差与方差,以便获得良好的辍学价值。

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

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

    寻找更好的架构(或更改每个神经元的数量) 层)
  1. 尝试不同的优化程序
  2. 调整超参数
  3. 也许训练网络时间更长

希望这会有所帮助!