当前位置: 首页 > 科技观察

BatchNormalization的魔咒

时间:2023-03-13 16:19:16 科技观察

BatchNormalization确实是深度学习领域的重大突破之一,也是近年来研究者讨论的热点之一。BatchNormalization是一种广泛采用的技术,可以使训练更快、更稳定,并已成为最有影响力的方法之一。然而,尽管它具有多功能性,但仍有一些因素阻碍了该方法,正如我们将在本文中讨论的那样,这表明规范化的完成方式仍有改进的空间。1.为什么我们要使用批归一化?在讨论任何事情之前,首先,我们应该了解批归一化是什么,它是如何工作的,并讨论它的用例。1.什么是BatchNormalization在训练过程中,当我们更新之前的权重时,每个中间激活层的输出分布会在每次迭代时发生变化。这种现象称为内部协变量偏移(ICS)。所以,如果我想防止这种情况发生,很自然的事情就是修复所有的发行版。简而言之,如果我的分布发生变化,我会钳制分布以使其不移动,以帮助进行梯度优化并防止梯度消失,这将有助于我的神经网络更快地训练。因此,减少这种内部协变量偏移是促进批量归一化发展的关键原则。2.工作原理BatchNormalization通过减去batch的经验均值除以经验标准差来对前一个输出层的输出进行归一化。这将使数据看起来像高斯分布。其中μ和*σ^2^*分别是批次均值和批次方差。此外,我们学习了新的均值和协方差γ和β。因此,简而言之,您可以将批量归一化视为帮助您控制批量分布的一阶和二阶动量。vgg16网络中间卷积层的特征分布输出。(左)没有任何归一化,(右)应用了批量归一化3。优点我将列出使用批归一化的一些好处,但我不会详细介绍,因为已经有很多文章讨论这个问题。更快的收敛。降低初始权重的重要性。强大的超参数。需要较少的数据进行泛化。1.收敛更快,2.对超参数更稳健2.BatchNormalization的诅咒好吧,让我们回到本文的起点,在很多情况下,batchnormalization开始损害性能或者根本不起作用。1.使用小batchsize时不稳定如上所述,batchnormalization必须计算均值和方差才能对batch中之前的输出进行归一化。如果batchsize比较大,这个统计估计就比较准确,估计的准确度会随着batchsize的减小而不断降低。BatchNorm使用32、16、8、4、2张图像/GPU图像时ResNet-50的验证误差上面是ResNet-50的验证误差图。可以推断,如果batchsize一直保持在32,那么它最终的验证误差在23左右,并且误差随着batchsize的减小而不断减小(batchsize不能为1,因为它本身就是平均值)。损失差异很大(大约10%)。如果批量大小是个问题,为什么我们不使用更大的批量呢?我们不能在每种情况下都使用更大的批次。在finetune中,我们不能使用largebatches,以免梯度过大导致模型损坏。在分布式训练期间,大批量最终将作为一组小批量分布在实例中。2、英伟达和卡内基梅隆大学的实验结果表明,“虽然BatchNormalization的计算量并不大,但收敛所需的总迭代次数也减少了”。然而,每次迭代的时间显着增加,并随着批量大小的增加而进一步增加。ResNet-50在ImageNet上使用TitanXPascal可以看到batchnormalization消耗了总训练时间的1/4。原因是批量归一化需要对输入数据进行两次迭代,一次计算批量统计信息,另一次对输出进行归一化。3.训练和推理时的不同结果例如,在现实世界中做“物体检测”。在训练目标检测器时,我们通常使用大批量(YOLOv4和Faster-RCNN均使用默认批量大小=64进行训练)。但是在投入生产后,这些模型的效果不如训练时那么好。这是因为它们是大批量训练的,而在实时情况下,它们的批量大小等于1,因为它必须逐帧处理。鉴于此限制,一些实现更喜欢使用基于训练集的预先计算的均值和方差。另一种可能是根据你的测试集分布计算均值和方差值。4.不利于在线学习与批量学习相比,在线学习是一种学习技术,通过为系统提供顺序的数据实例,或者单独地或者通过加权对mini-batch组进行训练。每个学习步骤都快速且便宜,因此系统可以在新数据到达时实时学习。一个典型的在线学习管道,由于依赖外部数据源,数据可能会单独或批量到达。由于每次迭代batchsize的变化,对输入数据的scale和offset的泛化能力不好,最终影响性能。5.对递归神经网络不利虽然批量归一化可以显着提高卷积神经网络的训练和泛化速度,但它们很难应用于递归结构。可以在RNN堆栈之间应用批归一化,其中归一化“垂直”应用,即每个RNN的输出。但它不能“水平”应用,例如在时间步之间,因为它会由于反复重新缩放而产生爆炸性梯度,从而损害训练。[^Note]:一些研究实验表明,批量归一化使神经网络容易出现对抗性漏洞,但由于缺乏研究和证据,我们没有将其包括在内。备选方案这些是使用批量归一化的一些缺点。在批量归一化效果不佳的情况下,有多种选择。LayerNormalizationInstanceNormalizationGroupNormalization(+weightstandardization)SynchronousBatchNormalizationSummary所以,训练一个深度神经网络看起来很简单,但我觉得并不容易。从这个意义上说,我几乎没有可供选择的架构,每个模型都有固定的学习率、固定的优化器和固定的技巧。这些技巧是通过自然选择来选择的,就像有人想出了一些技巧,如果有用,人们就会保留它,如果不起作用,人们最终会忘记它,再也没有人使用它。此外,batchnormalization是深度学习发展中的里程碑技术。然而,如前所述,沿批次维度进行归一化会引入一些问题,这表明归一化技术仍有改进的空间。