实例规范化与批量规范化

时间:2017-08-02 14:34:46

标签: machine-learning neural-network computer-vision conv-neural-network batch-normalization

据我所知,批量标准化有助于加快训练速度,将激活转向单位高斯分布,从而解决消失的梯度问题。批量标准行为在培训中使用不同(使用每批的平均值/ var)和测试时间(使用最终的运行平均值/ var来自培训阶段)。

另一方面,实例规范化充当了本文https://arxiv.org/abs/1607.08022中提到的对比度规范化。作者提到输出风格化图像应该不依赖于输入内容图像的对比度,因此实例规范化有所帮助。

但是我们不应该使用实例规范化进行图像分类,其中类标签不应该依赖于输入图像的对比度。我还没有看到任何使用实例规范化的纸张来进行批量归一化以进行分类。这是什么原因?此外,可以并且应该一起使用批处理和实例规范化。我渴望在何时使用哪种规范化方面获得直观和理论上的理解。

4 个答案:

答案 0 :(得分:38)

定义

让我们从两者的严格定义开始:

批量标准化 batch-norm-formula

实例规范化 instance-norm-formula

正如您所注意到的,他们正在做同样的事情,除了联合标准化的输入张量的数量。批量版本规范化批次和空间位置的所有图像 (在通常情况下,在CNN it's different中);实例版本独立地规范化每个批次,即仅跨空间位置

换句话说,批处理规范计算一个均值和std dev(从而使整个层高斯分布),实例规范计算它们的T,使每个单独的图像分布看起来是高斯的,但不是联合的

一个简单的类比:在数据预处理步骤中,可以基于每个图像标准化数据或标准化整个数据集。

信用:公式来自here

哪种标准化更好?

答案取决于网络架构,特别是在规范化层之后完成的工作。图像分类网络通常将要素图堆叠在一起并将它们连接到FC层,在整个批次中共享权重(现代方式是使用CONV层而不是FC,但参数仍然适用)

这是分布细微差别开始重要的地方:同一个神经元将接收来自所有图像的输入。如果批次中的差异很大,那么小激活的梯度将被高激活完全抑制,这正是批量规范试图解决的问题。这就是为什么每个实例规范化很可能根本不会改善网络融合的原因。

另一方面,批量标准化会给训练增加额外的噪音,因为特定实例的结果取决于邻居实例。事实证明,这种噪音对网络来说可能既好又坏。这在Tim Salimans等人的"Weight Normalization"论文中得到了很好的解释,该论文将递归神经网络和强化学习DQN命名为噪声敏感应用。我不完全确定,但我认为同样的噪音敏感度是程式化任务中的主要问题,实例规范试图对抗。检查重量范数是否对这项特定任务表现更好会很有趣。

您可以组合批量和实例规范化吗?

虽然它是一个有效的神经网络,但它没有实际用途。批量标准化噪声要么有助于学习过程(在这种情况下它更可取),要么会伤害它(在这种情况下,最好省略它)。在这两种情况下,让网络保持一种规范化可能会提高性能。

答案 1 :(得分:19)

很好的问题,已经很好地回答了。补充一下:我发现来自Kaiming He的Group Norm论文的可视化很有帮助。

来源:link to article on Medium contrasting the Norms

答案 2 :(得分:6)

我想为这个问题添加更多信息,因为该领域有一些最新作品。您的直觉

  

使用实例规范化进行图像分类,其中类标签   不应取决于输入图像的对比度

部分正确。我要说的是,在夜晚或黎明拍摄图像时,在光天化日之下的猪仍然是猪。但是,这并不意味着在网络上使用实例规范化将为您带来更好的结果。原因如下:

  1. 颜色分布仍然起作用。如果它有很多红色,则它更可能是苹果而不是橙色。
  2. 在以后的层上,您无法再想象实例归一化充当对比归一化。类的特定细节将出现在更深的层次中,并且通过实例对其进行规范化将严重损害模型的性能。

IBN-Net在其模型中同时使用了批量标准化和实例标准化。他们只将实例规范化放在较早的层中,并且在准确性和泛化能力方面都取得了进步。他们有开放源代码here

enter image description here

答案 3 :(得分:0)

IN提供视觉和外观不变性,BN加快训练速度并保留区分特征。 在浅层(CNN的起始层)中首选IN,因此应消除外观变化,而在深层(最后CNN层)中应减少BN,以保持区分度。