【问题标题】:Can dropout increases training data performance?辍学可以提高训练数据的性能吗?
【发布时间】:2020-03-21 11:36:38
【问题描述】:

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

我觉得这很奇怪。有意义吗?

【问题讨论】:

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


    【解决方案1】:

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

    您看到这种行为的原因可能是您使用了非常高的 dropout 值。 0.9 意味着您中和了太多的神经元。有意义的是,一旦将 0.7 放在那里,网络在训练集上学习时就有更高的神经元可供使用。因此,对于较低的值,性能会提高。

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

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

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

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

    1. 找到更好的架构(或更改每个 层)
    2. 尝试不同的优化器
    3. 超参数调优
    4. 也许训练网络的时间更长一些

    希望这会有所帮助!

    【讨论】:

    • 感谢您的解释。我犯了一个错误:我记得当我尝试学习 Tensorflow 时,dropout 参数高意味着中和参数太少。所以,如果这对于 tensorflow 是正确的还是不是,现在我可以理解正在发生的事情,因为您明确解释了 dropout high 意味着有太多的神经元被中和。现在它是有道理的。对不起我的错误。
    【解决方案2】:

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

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

    您应该始终记住的是,Dropout 与所有其他形式的正则化一样,它会降低模型容量。如果你将容量减少太多,肯定会得到不好的结果。

    希望对你有所帮助。

    【讨论】:

    • 您是在写关于 sn-p 上训练数据性能的验证/测试性能的文章:“退出(退出率小于某个小值)......能够正确拟合”?如果你写的是关于训练数据性能的文章,直观的原因是“直观地说,较高的 dropout 率会导致某些层的方差更大,这也会降低训练质量”;那么,“某些层的方差更高”是什么意思?
    • 感谢您的回答。我对 dropout 参数的理解很差。我以相反的顺序处理它。与我的想法不同,辍学参数高意味着中子过多。很抱歉这个错误。
    • @Waliston 没问题,伙计。它发生了。很高兴你很好地理解了这个概念。
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2022-11-28
    • 2021-07-18
    相关资源
    最近更新 更多