批量标准化是否可以在小批量的情况下使用?

时间:2019-07-02 20:38:25

标签: machine-learning computer-vision pytorch

我正在使用批量大小为10的批处理规范化进行面部检测,我想知道删除批处理规范层还是保留它们是更好的选择。 如果最好删除它们,我该怎么用呢?

2 个答案:

答案 0 :(得分:2)

这个问题取决于几件事,首先是神经网络的深度。当存在很多隐藏层时,批处理规范化对于增加数据的培训很有用。它可以减少训练模型和调整数据所需的时间。通过标准化网络的输入,可以降低追逐“移动目标”的风险,这意味着学习算法的性能无法达到最佳状态。

我的建议是,如果您具有深层的神经网络,则在代码中包括批处理规范化层。提醒一下,您可能还应该在图层中包括一些Dropout。

让我知道这是否有帮助!

答案 1 :(得分:0)

是的,它适用于较小的尺寸,即使您设置的尺寸尽可能小也可以使用。

诀窍是,bach大小不仅增加了批处理规范,还增加了正则化效果。 我会给你看几张照片:

bs=10

我们在相同规模上跟踪巴赫损失。左侧是没有批处理规范层(黑色)的模块,右侧是带有批处理规范层的模块。 请注意,即使对于bs=10,正则化效果也很明显。

bs=64

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

我的检查纯粹是在nn.BatchNorm1d(10, affine=False)上,没有可学习的参数gammabeta,即wb

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