定义
让我们从两者的严格定义开始:
批量标准化
实例规范化
正如你所注意到的,除了联合归一化的输入张量的数量之外,它们正在做同样的事情。批处理版本对批处理和空间位置上的所有图像进行归一化(在 CNN 情况下,在普通情况下是不同的);实例版本独立地规范化批次的每个元素,即仅跨空间位置。
换句话说,在批量范数计算一个均值和标准偏差(从而使整个层的分布为高斯分布)的情况下,实例范数计算T
它们,使每个单独的图像分布看起来是高斯分布,但不是联合分布。
一个简单的类比:在数据预处理步骤中,可以对每个图像的数据进行归一化,也可以对整个数据集进行归一化。
信用:公式来自这里。
哪个标准化更好?
答案取决于网络架构,特别是归一化层之后做了什么。图像分类网络通常将特征图堆叠在一起并将它们连接到 FC 层,FC 层在批次之间共享权重(现代方法是使用 CONV 层而不是 FC,但这个论点仍然适用)。
这就是分布细微差别开始重要的地方:同一个神经元将接收来自所有图像的输入。如果整个批次的方差很大,来自小激活的梯度将被高激活完全抑制,这正是批次规范试图解决的问题。这就是为什么每个实例的标准化很可能根本不会改善网络收敛性的原因。
另一方面,批量归一化为训练增加了额外的噪音,因为特定实例的结果取决于相邻实例。事实证明,这种噪声对网络可能是好是坏。这在Tim Salimans 等人的“Weight Normalization”论文中得到了很好的解释,该论文将递归神经网络和强化学习 DQN 命名为对噪声敏感的应用程序。我不完全确定,但我认为相同的噪声敏感性是程式化任务中的主要问题,实例规范试图与之抗争。检查权重规范对于这个特定任务是否表现更好会很有趣。
你能结合批处理和实例规范化吗?
虽然它是一个有效的神经网络,但它没有实际用途。批量归一化噪声要么有助于学习过程(在这种情况下更可取),要么会损害学习过程(在这种情况下最好忽略它)。在这两种情况下,让网络保留一种归一化可能会提高性能。