我正在用dropout训练一个神经网络。碰巧当我将dropout从0.9减少到0.7时,训练数据的损失(交叉验证误差)也会减少。我还注意到,随着我减少dropout参数,准确性也会提高。
Dropout是一种正则化技术。你应该只使用它来减少方差(验证性能vs训练性能)。它不是为了减少偏差,你不应该以这种方式使用它。它非常具有误导性。
你看到这种行为的原因可能是你使用了一个非常高的dropout值。0.9意味着你中和了太多的神经元。一旦你把0.7放在那里,网络在训练集上学习时有更高的神经元可以使用,这是有道理的。所以对于较低的值,性能会增加。
您通常应该会看到训练性能有所下降,同时提高了验证集的性能(如果您没有,至少在测试集上)。这是您在使用dropout时正在寻找的期望行为。您获得的当前行为是因为如果dropout的值非常高。
从0.2或0.3开始,比较偏差与方差,以获得良好的dropout值。
我明确的建议是:不要用它来改善偏差,而是减少方差(验证集上的错误)。
为了更好地适应训练集,我建议:
希望这有帮助!
Dropout的工作原理是概率性地删除或“删除”层的输入,这些输入可能是数据样本中的输入变量或前一层的激活。它具有模拟具有非常不同网络结构的大量网络的效果,反过来,使网络中的节点通常对输入更健壮。
使用dropout(dropout rate小于某个小值),准确率会逐渐增加,损失会先逐渐减少(这就是你的情况)。当你增加dropout超过某个阈值时,会导致模型无法正确拟合。直观地说,更高的dropout rate会导致某些层的方差更高,这也会降低训练。
你应该永远记住的是,Dropout和所有其他形式的正则化一样,它降低了模型容量。如果你把容量降低太多,肯定会得到不好的结果。
希望这对你有帮助。