【发布时间】:2020-03-21 11:36:38
【问题描述】:
我正在训练一个带有 dropout 的神经网络。碰巧当我将 dropout 从 0.9 减少到 0.7 时,训练数据数据的损失(交叉验证误差)也减少了。我还注意到,随着我减少 dropout 参数,准确性会提高。
我觉得这很奇怪。有意义吗?
【问题讨论】:
标签: neural-network deep-learning training-data loss-function dropout
我正在训练一个带有 dropout 的神经网络。碰巧当我将 dropout 从 0.9 减少到 0.7 时,训练数据数据的损失(交叉验证误差)也减少了。我还注意到,随着我减少 dropout 参数,准确性会提高。
我觉得这很奇怪。有意义吗?
【问题讨论】:
标签: neural-network deep-learning training-data loss-function dropout
Dropout 是一种正则化技术。你应该只使用它来减少方差(验证性能与训练性能)。它不是为了减少偏差,你不应该以这种方式使用它。 这非常具有误导性。
您看到这种行为的原因可能是您使用了非常高的 dropout 值。 0.9 意味着您中和了太多的神经元。有意义的是,一旦将 0.7 放在那里,网络在训练集上学习时就有更高的神经元可供使用。因此,对于较低的值,性能会提高。
您通常应该看到训练性能有所下降,同时提高了验证集的性能(如果您没有,至少在测试集上)。这是您在使用 dropout 时正在寻找的所需行为。您获得的当前行为是因为如果 dropout 的值非常高。
从 0.2 或 0.3 开始,比较偏差与方差,以获得良好的 dropout 值。
我的明确建议:不要用它来改善偏差,而是减少方差(验证集上的错误)。
为了更好地适应训练集,我建议:
希望这会有所帮助!
【讨论】:
Dropout 通过概率性地移除或“丢弃”层的输入来工作,这些输入可能是数据样本中的输入变量或来自前一层的激活。它具有模拟大量网络结构非常不同的网络的效果,进而使网络中的节点通常对输入更加稳健。
使用 dropout(dropout 率小于某个小值),准确率会逐渐增加,而 loss 会先逐渐减少(这就是您的情况)。 当您将 dropout 增加到超过某个阈值时,会导致模型无法正确拟合。直观地说,较高的 dropout 率会导致某些层的方差更大,这也会降低训练质量。
您应该始终记住的是,Dropout 与所有其他形式的正则化一样,它会降低模型容量。如果你将容量减少太多,肯定会得到不好的结果。
希望对你有所帮助。
【讨论】: