我已经在多个地方看到你应该在验证和测试阶段禁用丢失,并且只在训练阶段保留它.这有什么理由应该发生吗?我无法找到一个很好的理由,只是想知道.
我问的一个原因是因为我训练了一个有辍学的模型,结果很好 - 大约80%的准确率.然后,我继续验证模型,但忘记将概率设置为1,模型的精度降低到约70%.这应该是那么激烈吗?它是否像在每个丢失层中将prob设置为1一样简单?
提前致谢!
Tho*_*s W 18
Dropout是一个随机过程,在一个层中有机会p禁用神经元.这将使某些神经元觉得它们在每次迭代中都是"错误的" - 基本上,你让神经元感觉它们的输出"错误",这样它们就更少依赖前一层节点的输出.这是一种正则化方法,可减少过度拟合.
但是,有两个主要原因您不应该使用dropout来测试数据:
但是,您可能希望阅读更多有关验证/测试的内容:
训练集:用于学习的一组示例:拟合分类器的参数在MLP情况下,我们将使用训练集来查找具有反向支柱规则的"最优"权重
验证集:用于调整分类器参数的一组示例在MLP情况下,我们将使用验证集来查找"最佳"隐藏单元数或确定反向传播算法的停止点
测试集:一组仅用于评估完全训练的分类器性能的示例在MLP情况下,我们将在选择最终模型(MLP大小和实际权重)后使用该测试来估计错误率.在测试装置上的最终模型,你不能再进一步调整模型!
为什么单独测试和验证集?验证数据的最终模型的错误率估计将是有偏差的(小于真实的错误率),因为验证集用于选择最终模型在评估测试集上的最终模型之后,您不得调整模型任何进一步!
来源:模式分析导论,Ricardo Gutierrez-OsunaTexas A&M大学,得克萨斯A&M大学(答案)
因此,即使是验证,如果节点具有被取消激活的随机概率,您将如何确定删除哪些节点?
Dropout 是一种使装袋实用的方法,适用于非常多的大型神经网络的集合。
同样,我们可能还记得使用以下错误解释:对于新数据,我们可以通过取所有学习器结果的平均值来预测它们的类别:
由于 N 是一个常数,我们可以忽略它并且结果保持不变,因此我们应该在验证和测试期间禁用 dropout。
真正的原因要复杂得多。这是因为权重缩放推理规则:
我们可以通过在一个模型中评估 p(y|x) 来近似 p_{ensemble}:该模型包含所有单元,但单元 i 之外的权重乘以包含单元 i 的概率。这种修改的动机是捕捉该单元输出的正确预期值。对于这种近似推理规则在深度非线性网络中的准确性,目前还没有任何理论论据,但从经验来看,它表现得非常好。
当我们使用 dropout(例如对于一层)训练模型时,我们将某些神经元的一些输出归零,并将其他神经元按 1/keep_prob 放大,以保持该层的期望与以前几乎相同。在预测过程中,我们可以使用dropout,但每次只能得到不同的预测,因为我们随机丢弃值,然后我们需要多次运行预测才能得到预期的输出。这样的过程非常耗时,因此我们可以删除 dropout 并且层的期望保持不变。
参考:
最简单的原因可能是,在预测期间(测试、验证或生产部署后),您希望使用每个学习神经元的功能,并且真的不喜欢随机跳过其中一些神经元。
这是我们在测试期间将概率设置为 1 的唯一原因。
有一种称为蒙特卡罗 dropout 的贝叶斯技术,其中在测试期间不会禁用 dropout。该模型将以相同的 dropout 率运行多次(或作为一批一次性运行),并且将计算结果的平均值(如下所示的第 6 行)和方差(如下所示的第 7 行)以确定不确定性。
这是Uber量化不确定性的应用程序:
| 归档时间: |
|
| 查看次数: |
5600 次 |
| 最近记录: |