首页 文章

订购批量标准化和退出?

提问于
浏览
59

最初的问题是关于TensorFlow实现的具体问题 . 但是,答案仅适用于实施 . 这个一般答案也是TensorFlow的正确答案 .

在TensorFlow中使用批量标准化和dropout(特别是使用contrib.layers)时,我是否需要担心排序?

似乎有可能如果我使用dropout然后立即批量标准化可能会有麻烦 . 例如,如果批量标准化的偏移训练到训练输出的较大比例数,但是然后将相同的偏移应用于较小的(由于具有更多输出的补偿)标度数而在测试期间没有丢失,那么转移可能会关闭 . TensorFlow批量标准化层是否会自动对此进行补偿?或者这不是因为某些原因我不在乎?

此外,在将这两者结合使用时还有其他需要注意的问题吗?例如,假设我正在以正确的顺序使用它们(假设订单正确),在多个连续层上使用批量标准化和丢失是否会出现问题?我没有立即看到问题,但我可能会遗漏一些东西 .

非常感谢!

UPDATE:

实验测试似乎表明排序确实很重要 . 我运行了相同的网络两次,只有批量规范和退出反向 . 当辍学率在批量规范之前时,随着训练损失的减少,验证损失似乎在增加 . 他们只是一次测试 . 一个更明确和知情的答案仍然会受到赞赏 .

5 回答

  • 0

    Ioffe and Szegedy 2015中,作者声明"we would like to ensure that for any parameter values, the network always produces activations with the desired distribution" . 因此,批量标准化层实际上是在Conv层/完全连接层之后插入,但在进入ReLu(或任何其他类型)激活之前 . 有关详细信息,请在53分钟左右查看this video .

    就丢失问题而言,我认为在激活层之后会应用dropout . 在图3b中,隐藏层1的丢失因子/概率矩阵r(l)在y(1)上应用于其,其中y(1)是应用激活函数f之后的结果 .

    总而言之,使用批量规范化和丢失的顺序是:

    • CONV / FC - > BatchNorm - > ReLu(或其他激活) - > Dropout - > CONV / FC - >

  • 68

    正如评论中所指出的,读取图层顺序的惊人资源是here . 我已经完成了评论,这是我在互联网上找到的最佳主题资源

    我的2美分:

    辍学意味着完全阻止来自某些神经元的信息,以确保神经元不会共同适应 . 因此,批量规范化必须在丢失之后,否则您将通过规范化统计信息传递信息 .

    如果你考虑一下,在典型的ML问题中,这就是我们不计算整个数据的均值和标准偏差然后将其分成训练集,测试集和验证集的原因 . 我们拆分然后计算列车集上的统计数据,并使用它们对验证和测试数据集进行标准化和居中

    所以我建议方案1(这需要pseudomarvin's评论已接受的答案)

    • CONV / FC - > ReLu(或其他激活) - > Dropout - > BatchNorm - > CONV / FC

    而不是计划2

    • CONV / FC - > BatchNorm - > ReLu(或其他激活) - > Dropout - > CONV / FC - >在接受的答案中

    请注意,这意味着与方案1下的网络相比,方案2下的网络应显示过度拟合,但OP运行了一些测试,如上所述,他们支持方案2

  • 6

    通常,只需删除Dropout(当你有BN时):

    • “在某些情况下,BN消除了 Dropout 的需要,导致BN提供与Dropout直观相似的正规化优势”

    • “ResNet,DenseNet等架构未使用 Dropout

    有关详细信息,请参阅@Haramoz在评论中已经提到的本文[Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift] .

  • 21

    基于research paper以获得更好的性能,我们应该在应用Dropouts之前使用BN

  • 2

    正确的顺序是:Conv> Normalization> Activation> Dropout> Pooling

相关问题