为什么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外所有维度,来计算均值和方差。

C对应的是通道数,是特征图数,是卷积核的数量,也就是卷积核提取了这么多组特征,而卷积中,BN的均值和方差,是针对某一个特征的均值和方差。

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

大概是类似这样的操作:

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值