批量归一化代替输入归一化

42

我能否在输入层后立即使用批量归一化层而不对我的数据进行归一化? 我是否可以期望获得类似的效果/性能?

在Keras functional中,它可能是这样的:

x = Input (...)
x = Batchnorm(...)(x)
...
2个回答

42

你可以这样做。但是,除了激活分布稳定之外,批量归一化的好处在于,随着网络学习,均值和标准差很可能会迁移。

实际上,在输入层后面设置批量归一化是一种花哨的数据预处理步骤。有时很有帮助(例如在线性回归中),但计算整个训练样本的均值和方差比逐批次学习更容易、更有效率。请注意,批量归一化在性能方面并非免费的,不应滥用。



2
提前对整个数据进行标准化(例如,通过StandardScaler),然后再使用批量归一化,怎么样? - Ben
1
BN层是否必须在输入层之后添加,如果想要标准化输入?如果我在输入层之前添加BN层会发生什么? - AleB
@AleB 请查看 https://www.kaggle.com/ryanholbrook/dropout-and-batch-normalization#Batch-Normalization,您可以将BN添加为输入,它的作用类似于sklearn.StandardScaler()。 - Anirban Saha
你应该记住,训练集和验证集的均值和标准差应该分别计算。 - debrises
@КонстантинПисаный 你确定吗?我认为人们会想要在val中使用train的平均值/标准差,或者可能是一个更新后包括train和val样本的平均值/标准差。只是考虑到单个样本批次具有零标准偏差的情况 - 这就解释了为什么您不能在训练中使用它们,但对我来说,需要多个样本来验证似乎很奇怪。 - Chris Coffee

1
是的,这是可能的,并且我已经非常成功地在视觉模型中使用过它。尽管如此,这种方法也有一些优缺点,主要优势包括:
  1. 在将模型集成到生产环境中时,您不会忘记规范化步骤,因为它是模型本身的一部分(这种情况比您想象的更常见)。
  2. 这种规范化方式是数据增强感知的。
主要缺点包括:
  1. 如果您已经有了归一化的输入,在此情况下会增加运行时成本。
我还详细介绍了这个主题,您可以在这里阅读:通过批归一化(Batch Normalization)替代手动归一化(Manual Normalization)来改进视觉AI模型。https://towardsdatascience.com/replace-manual-normalization-with-batch-normalization-in-vision-ai-models-e7782e82193c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接