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

Why it's necessary to frozen all inner state of a Batch Normalization layer when fine-tuning

以下内容来自Keras教程

This behavior has been introduced in TensorFlow 2.0, in order to enable layer.trainable = False to produce the most commonly expected behavior in the convnet fine-tuning use case.

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

在训练过程中,不同的批次统计信息作为一种正则化机制可以提高泛化能力。这有助于在训练大量迭代时最大限度地减少过度拟合。事实上,使用非常大的批量 can harm generalization 因为批量统计的变化较小,减少了正则化。

在对新数据集进行微调时,如果微调示例与原始训练数据集中的示例具有不同的特征,则批量统计可能会有很大差异。因此,如果未冻结批量归一化,网络将学习新的批量归一化参数(batch normalization paper 中的 gamma 和 beta),这些参数与原始训练期间优化的其他网络参数不同。由于所需的训练时间或微调数据集的大小,在微调期间重新学习所有其他网络参数通常是不可取的。冻结批量归一化避免了这个问题。