为什么在微调时需要冻结 Batch Normalization 层的所有内部状态

Pok*_*eLu 2 python keras tensorflow batch-normalization tensorflow2.0

以下内容来自Keras教程

此行为已在 TensorFlow 2.0 中引入,目的是使 layer.trainable = False 能够在 convnet 微调用例中产生最常见的预期行为。

为什么在微调卷积神经网络时要冻结层?是因为tensorflow keras中的某些机制还是因为批量归一化的算法?我自己进行了一个实验,我发现如果 trainable 没有设置为 false,模型往往会灾难性地忘记之前学到的东西,并在最初的几个时期返回非常大的损失。这是什么原因?

Jef*_*Ede 6

在训练期间,不同的批次统计数据作为一种正则化机制,可以提高泛化能力。这有助于在训练大量迭代时最大限度地减少过度拟合。事实上,使用非常大的批量会损害泛化,因为批量统计的变化较小,降低了正则化。

在对新数据集进行微调时,如果微调示例与原始训练数据集中的示例具有不同的特征,则批次统计数据可能会非常不同。因此,如果批标准化没有冻结,网络将学习新的批标准化参数(批标准化论文中的 gamma 和 beta ),这些参数与原始训练期间其他网络参数优化的参数不同。由于所需的训练时间或微调数据集的规模较小,在微调期间重新学习所有其他网络参数通常是不可取的。冻结批量标准化避免了这个问题。