其他分享
首页 > 其他分享> > 为什么batchnorm是对channel外的参数进行运算,而不是对batchsize外的参数运算

为什么batchnorm是对channel外的参数进行运算,而不是对batchsize外的参数运算

作者:互联网

BN是卷积网络中的常见操作,在我们学习BN的过程中,配套的公式通常是这样的

 我曾经理所当然的认为,BN是对(N,C,H,W)中,N以外的参数进行求均值和方差的计算

直到我查看pytorch指令nn.BatchNorm2d时,看到了这么一句

Because the Batch Normalization is done over the C dimension, computing statistics on (N, H, W) slices, it’s common terminology to call this Spatial Batch Normalization.

这打破了我曾经的认知。

这表明BN的计算其实是对C以外的 (N, H, W)进行计算,并不是传统意义上的对n个x进行运算。

为什么会这样?

要了解这个,首先要理解卷积层的参数共享,即对于不同的特征图选用一系列相同的卷积核,可以参考 一张图理解卷积层的参数共享

理解了这个,就可以理解BN原论文3.2节的这一段了

尤其是我高亮的这一句,so that different elements of the same feature map, at different locations, are normalized in the same way. 这里就借鉴了卷积的参数共享的思想,卷积核保持不变,对一个卷积核的所有输入进行相同的归一化,也就是在N*H*W个z=wx+b计算均值和方差,也就是对除了channel外所有维度,来计算均值和方差。

理论需要结合实践,pytorch已经为我们写好BN,那如果自己写的话,如何计算一个batch的均值和方差呢?

大概是类似这样的操作:

mean = X.mean(dim=(0, 2, 3), keepdim=True)
var = ((X - mean) ** 2).mean(dim=(0, 2, 3), keepdim=True)

 

标签:运算,方差,卷积,BN,均值,参数,batchnorm,mean
来源: https://blog.csdn.net/weixin_39518984/article/details/120338242