CNN 和 Batch Norm 层的迁移学习

数据挖掘 张量流 美国有线电视新闻网 批量标准化
2021-09-15 05:44:41

在某些迁移学习模型中,我们将参数设置为 False 以保持 Batch Normalizationtraining预训练值,但将属性设置为 False 以冻结权重。然后添加新的“顶层”,我们重新训练模型。之后进行微调,我们可以重新训练权重并将属性设置为 True。但是,参数对图层有什么作用?这里的stackoveflow答案对我来说没有意义。当参数训练为真时,对我来说,这意味着我们正在进行某种类型的学习:即更新 BN 均值和方差,应用 Dropout,权重来自反向传递。有什么区别trainabletrainabletraining=Truetraining=Truetraining=False? Keras FAQ 指出它只是意味着正在执行推理,但是什么时候被训练training=True

最后,这很挑剔,但在这个笔记本中,谷歌确实使用 MobileNet V2 模型进行了迁移学习。同样从上面他们使用 Xception 模型。两个模型都有 BN,但在第二个教程中,它们training=False在 base_model 中传递参数,暗示不更新 BN。而在第一次他们没有提到training=False为什么会这样?我看到第一个在 2019 年受版权保护,第二个在 2020 年受版权保护,这可能意味着存在差异。

1个回答

但是当 training=True 时正在训练什么?

让我们首先尝试理解 BatchNormalization(BN) 层,因为它有更多的元素。

TL;DR -
γ, β是学习的。它们像正常权重一样被初始化并在反向传播中学习。 可以在这些 parm Stat.SE
上阅读这个清晰而准确的答案

形式上,BN 根据以下表达式转换给定层 x 的激活:
BN(x)= γ⊙(x−μ)/σ + β
坐标缩放系数 γ 和偏移量 β。
[引用-http://d2l.ai/ ]

每个 BN 层每个输入添加四个参数:γ、β、μ 和 σ(例如,第一个 BN 层添加 3,136 个参数,即 4 × 784)。最后两个参数 μ 和 σ 是移动平均线;它们不受反向传播的影响,因此 Keras 称它们为“不可训练的”。但是,它们是在训练期间根据训练数据进行估计的,因此可以说它们是可训练的。在 Keras 中,“不可训练”实际上意味着“不受反向传播影响”。
[引用 - 使用 scikit-learn keras 和 tensorflow 进行机器学习,Aurélien Géron

training=True:该层将使用当前批次输入的均值和方差对其输入进行归一化。
training=False:该层将使用在训练期间学习的移动统计数据的均值和方差对其输入进行归一化。[引用 - BN 的 Keras 文档]

因此,如果您不将其设置为False,它将继续使用每批测试数据示例更新μ 和 σ ,并相应地标准化输出。我们希望它使用训练阶段的值。

默认情况下,它是 False 并且 fit 方法将其设置为 True。

辍学

辍学是两者中更简单的。我们在这里需要这个标志,以便我们可以补偿(在测试期间)由于关闭(在训练期间)神经元而导致的输出值损失(在平均基础上)。

假设 p = 50%,在这种情况下,在测试期间,一个神经元连接到的输入神经元数量将是训练期间(平均)的两倍。为了弥补这一事实,我们需要在训练后将每个神经元的输入连接权重乘以 0.5。如果我们不这样做,每个神经元将获得大约两倍于网络训练的总输入信号,并且不太可能表现良好。更一般地,我们需要将每个输入连接权重乘以训练后的保持概率 (1 - p)。或者,我们可以将每个神经元的输出除以训练期间的保持概率(这些替代方法并不完全等价,但它们的效果同样好)
[引用 - 使用 scikit-learn keras 和 tensorflow 进行机器学习,Aurélien Géron

以模型差异为例

不过,这些都是要尝试和检查的主题。
但我相信,当我们认为上层被平滑以与初始层匹配时,我们通常会开始微调,以避免前向和背景中的大流量。因此,在 2019 年示例中保持其 Flase 的逻辑可能不会每次都保持得太强。