为什么仅在CNN中对通道进行批量标准化

时间:2017-08-21 14:40:58

标签: machine-learning computer-vision convolution batch-normalization

我想知道,如果在卷积神经网络中,应该分别对每个像素应用批量归一化,还是应该针对每个通道采用像素的平均值?

我在Tensorflow的tf.layers.batch_normalization描述中看到,建议对通道执行bn,但如果我没记错,我使用了另一种方法并取得了良好的效果。

3 个答案:

答案 0 :(得分:3)

在CNN中,对于图像,在通道内标准化是有帮助的,因为权重在通道之间共享。 另一篇论文中的数字显示了我们如何处理BN。了解更好是有帮助的。

figure from Group Normalization paper

图取自

  

Wu,Y。和He,K.,2018。群体正常化。 arXiv preprint arXiv:1803.08494。

答案 1 :(得分:2)

据我所知,在前馈(密集)层中,每个单元(神经元)应用批量标准化,因为它们中的每一个都有自己的权重。因此,您可以跨特征轴进行标准化。

但是,在卷积层中,权重在输入之间共享,即每个特征映射将相同的转换应用于不同的输入"""。因此,您使用每个要素图的均值和方差应用批量标准化,而不是每单位/神经元。

这就是为什么我猜export interface World { // not sure about types of `land` and `countries` objects: { land: any, countries: any }; } function (error, world: World) {...} 参数值存在差异。

答案 2 :(得分:0)

我为此感到困惑了几个小时,因为对每个频道进行规范化没有意义-因为转换网络中的每个频道都被认为是不同的“功能”。即在所有渠道上进行标准化等同于对具有大小的卧室进行标准化(以平方英尺为单位)(Andrew ML课程的多元回归示例)。这不是规范化的工作-您要做的是单独对每个功能进行规范化。即您可以将所有示例中的卧室数量标准化为mu = 0和std = 1,将所有示例中的平方英尺标准化​​为mu = 0和std = 1。

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

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

所以我对此很确定。