批量标准化是否适用于小批量?

hho*_*omn 5 machine-learning computer-vision pytorch

我正在使用批量大小为 10 的批量标准化进行人脸检测,我想知道是删除批量规范层还是保留它们更好。如果最好删除它们,我可以用什么代替?

And*_*rew 5

这个问题取决于几件事,首先是你的神经网络的深度。当有很多隐藏层时,批量归一化对于增加数据的训练很有用。它可以减少训练模型和调节数据所需的 epoch 数。通过对网络输入进行标准化,您可以降低追逐“移动目标”的风险,这意味着您的学习算法没有达到最佳效果。

如果您有深度神经网络,我的建议是在您的代码中包含批量归一化层。提醒一下,您可能还应该在图层中包含一些 Dropout。

让我知道这是否有帮助!


pro*_*sti 4

是的,它适用于较小的尺寸,甚至可以使用您设置的最小尺寸。

诀窍是巴赫大小还增加了正则化效果,而不仅仅是批量规范。我给你看几张照片:

BS=10

我们以同样的规模追踪巴赫损失。左侧是没有批量标准化层的模块(黑色),右侧是带有批量标准化层的模块。请注意,即使对于 ,正则化效果也是如此明显bs=10

BS=64

当我们设置bs=64批量损失正则化时,它是非常明显的。请注意,y比例尺始终为[0, 4]

我的考试纯粹是在nn.BatchNorm1d(10, affine=False)没有可学习参数的情况下进行的,gammabeta和。wb

这就是为什么当批量大小较小时,使用 BatchNorm 层是有意义的。

  • 我不确定这是一个已解决的问题。我知道在像 RetinaNet 这样的对象检测模型中,它们经常冻结批量归一化层,因为它们一次只能对 1 或 2 个图像进行操作。这是一个例子,但我还记得在 Facebook 的 Detectron 存储库中看到过这个:https://github.com/yhenon/pytorch-retinanet/issues/24 (4认同)