卷积神经网络中的批量归一化


73

我是卷积神经网络的新手,只是对特征图以及如何在图像上进行卷积以提取特征有所了解。我很高兴知道在CNN中应用批处理规范化的一些细节。

我阅读了https://arxiv.org/pdf/1502.03167v3.pdf这篇论文,可以理解对数据应用的BN算法,但最后他们提到在对CNN进行应用时需要稍作修改:

对于卷积层,我们还希望归一化服从卷积属性-以便以相同的方式对同一要素图的不同元素在不同位置进行归一化。为了实现这一目标,我们在所有位置上以小批量的方式联合标准化了所有激活。在Alg。在图1中,我们将B作为特征图上所有小批量和空间位置的所有值的集合–因此,对于大小为m的小批量和大小为p×q的特征图,我们使用effec -大小为m'= | B |的小批量生产 = m·pq。我们每个特征图而不是每个激活都学习一对参数γ(k)和β(k)。海藻 对图2进行类似的修改,以便在推理期间BN变换将相同的线性变换应用于给定特征图中的每个激活。

当他们说“要以相同的方式对同一要素图的不同元素在不同位置进行标准化时,我完全感到困惑

我知道要素地图的含义,每个要素地图中的权重都是不同的元素。但是我不明白什么是位置或空间位置。

我根本无法理解下面的句子 “在Alg。1中,我们让B为跨越小批量和空间位置的要素的要素图中所有值的集合”

如果有人能用更简单的方式详细阐述并向我解释,我将感到非常高兴

Answers:


92

让我们从条款开始。请记住,卷积层的输出为一个4阶张量[B, H, W, C],其中B是批量大小,(H, W)特征图的大小,C是信道数。一个索引(x, y),其中0 <= x < H0 <= y < W空间位置

通常的批处理规范

现在,这是以通常的方式(以伪代码)应用batchnorm的方法:

# t is the incoming tensor of shape [B, H, W, C]
# mean and stddev are computed along 0 axis and have shape [H, W, C]
mean = mean(t, axis=0)
stddev = stddev(t, axis=0)
for i in 0..B-1:
  out[i,:,:,:] = norm(t[i,:,:,:], mean, stddev)

基本上,它计算元素之间的H*W*C均值和H*W*C标准差B。您可能会注意到,位于不同空间位置的不同元素具有各自的均值和方差,并且仅收集B值。

转换层中的Batchnorm

这种方式是完全可能的。但是卷积层具有一个特殊的属性:过滤器权重在输入图像之间共享(您可以在本文中详细阅读)。这就是为什么以相同的方式标准化输出是合理的,以便每个输出值B*H*W在不同位置取值的均值和方差。

这是这种情况下的代码(再次为伪代码):

# t is still the incoming tensor of shape [B, H, W, C]
# but mean and stddev are computed along (0, 1, 2) axes and have just [C] shape
mean = mean(t, axis=(0, 1, 2))
stddev = stddev(t, axis=(0, 1, 2))
for i in 0..B-1, x in 0..H-1, y in 0..W-1:
  out[i,x,y,:] = norm(t[i,x,y,:], mean, stddev)

总体而言,仅存在C均值和标准差,并且每个均是根据B*H*W值计算的。这就是他们说“有效的小批量”时的意思:两者之间的区别仅在于轴选择(或等效的“小批量选择”)。


2
很好的答案,但我认为您的意思是我们应该采用B*H*W值的均值和方差,而不是B*H*C值。请参阅conv层中Batchnorm之后的第一段。无论哪种方式,+ 1。
rayryeng '17

我们不能只写:out[:,:,:,:] = norm(t[:,:,:,:], mean, stddev)没有循环吗?计算整个批次的均值和方差,然后将其分别而不是一次应用于批次中的每个元素?@maxim
palimboa

关于转换层的BN,您可以在此处获得更多信息-arxiv.org/pdf/1502.03167.pdf在3.2小节中。第一个理由是我们要保留卷积属性(例如特征的空间平移不变性),因此均值是在BxHxW的轴上计算的
MonsieurBeilto

基本上,它计算H*W*C均值:或者在第一种情况下仅计算B均值?举一个小例子:如果我们考虑3x2x3 i / p,则均值dim=(0)2x3。此处BxHxWxC的均值是相同的,HxWxC并且将从该批次的每个输入中减去。请说清楚。
user2736738 '20

我是对的,通常的batchnorm不能应用于全卷积网络吗?在每个批次中,我们可以具有不同的形状,这将需要任意数量的gammabeta,这是不可能的。那是对的吗?
Vadym B.

5

对Maxim答案的一些澄清。

在Keras中看到您指定的轴是通道轴,使我感到困惑,因为对通道进行规范化没有意义-因为转换网络中的每个通道都被认为是不同的“功能”。即,在所有通道上进行归一化等效于对以平方英尺为单位的卧室数量进行归一化(来自安德鲁ML课程的多元回归示例)。通常这不是您想要的-您要做的是单独对每个功能进行标准化。也就是说,您将所有示例中的卧室数量标准化为mu = 0和std = 1,并将所有示例中的平方英尺标准化​​为mu = 0和std = 1。

这就是为什么要C的均值和标准差,因为您想要每个通道/功能的均值和标准差。

在我自己检查和测试之后,我意识到了这个问题:这里有些混乱/误解。您在Keras中指定的轴实际上是不在计算中的轴。也就是说,除此参数指定的轴外,您在所有轴上均得到平均值。这很令人困惑,因为它与NumPy的工作方式正好相反,其中指定的轴是您对其进行操作的轴(例如np.mean,np.std等)。

我实际上建立了一个仅具有BN的玩具模型,然后手动计算BN-取平均值,所有三个第一维[m,n_W,n_H]的std并得到n_C结果,计算出(X-mu)/ std(使用广播),并获得与Keras结果相同的结果。

希望这对像我一样困惑的人有所帮助。


2

我对我所说的话只有70%的把握,因此,如果这没有意义,请在投票之前编辑或提及。

关于locationspatial location:它们表示图像或特征图中像素的位置。特征图可与代表概念的图像的稀疏修改版本媲美。

关于so that different elements of the same feature map, at different locations, are normalized in the same way:某些归一化算法是局部的,因此它们取决于其附近的位置(位置),而不是图像中距离较远的事物。它们可能意味着每个像素,无论其位置如何,都像集合的元素一样被对待,而与它的直接特殊周围环境无关。

关于In Alg. 1, we let B be the set of all values in a feature map across both the elements of a mini-batch and spatial locations:他们会在迷你批处理中获得每个训练示例的每个值的平面列表,并且此列表将所有东西组合在一起,无论它们在要素地图上的位置如何。


只是想用一个例子来阐明我的想法。因此,基本上,如果我们有10个大小为5x5的特征图和最小批处理大小为20的特征图,那么我们是否尝试分别对每个特征图进行规范化?因此,新的最小批处理大小为= 20 *25。(25是因为特征图的大小为5x5)。如果单个特征图通过其自身的均值和方差归一化,或者所有10个特征图的均值和方差都相同,我会感到困惑。如果是后者,新的更新的最小批次大小将是什么?
akshata bhat

0
  1. 首先,我们需要弄清楚,内核的深度是由上一个特征图的通道号确定的,而在这一层中内核的数目决定了下一个特征图(下一层)的通道号。
  2. 那么我们应该清楚地说明,每个内核(通常为3维)将仅在下一层生成一个特征图通道。
  3. 第三,我们应该尝试接受在生成的特征图中每个点(无论它们的位置如何)都是由同一内核通过在上一层滑动生成的想法。因此,它们可以看作是此内核生成的分布,也可以看作是随机变量的样本。然后,应将它们取平均值以获得均值,然后是方差。(这并不严格,只能帮助理解),这就是他们所说的“以便以相同的方式对同一要素图的不同元素在不同位置进行归一化”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.