辍学和批量标准化 - 层的顺序重要吗?

Posted

技术标签:

【中文标题】辍学和批量标准化 - 层的顺序重要吗?【英文标题】:Dropout & batch normalization - does the ordering of layers matter? 【发布时间】:2020-02-03 23:38:39 【问题描述】:

我正在构建一个神经网络模型,我的问题是,dropout 和批量归一化层的顺序是否真的会影响模型? 如果我使用 ROC-AUC 分数作为我的衡量指标,那么将 dropout 层放在批标准化层之前(反之亦然)实际上会对模型的输出产生任何影响。

我希望输出具有较大的 (ROC-AUC) 分数,并且想知道它是否会受到层排序的任何影响。

【问题讨论】:

这能回答你的问题吗? Ordering of batch normalization and dropout? 【参考方案1】:

层的顺序会影响模型的收敛性,从而影响结果。基于 Batch Normalizationpaper,作者建议 Batch Normalization 应该在激活函数之前实现。因为 Dropout 是在计算激活后应用的。那么正确的层顺序是:

密集或转换 批量标准化 激活 辍学。

在使用 keras 的代码中,这是按顺序编写的:

model = Sequential()
model.add(Dense(n_neurons, input_shape=your_input_shape, use_bias=False))  # it is important to disable bias when using Batch Normalization
model.add(BatchNormalization())
model.add(Activation('relu'))  # for example
model.add(Dropout(rate=0.25))

批量标准化有助于在训练模型时避免梯度消失/爆炸。因此,如果您有很多层,这一点特别重要。您可以阅读提供的论文以了解更多详细信息。

【讨论】:

以上是关于辍学和批量标准化 - 层的顺序重要吗?的主要内容,如果未能解决你的问题,请参考以下文章

BN层的设置技巧

如何将大批量数据进行标准差标准化

深度学习之BN(批量标准化)

动手学pytorch-Batch Norm

测试期间的批量标准化

数据标准化和数据归一化有啥区别吗?