Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization

  • BN
    • BN的作用
      • 为了对隐含层进行归一化操作。对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间极限饱和区靠拢的输入分布强制拉回到均值为0方差为1的比较标准的正态分布,使得非线性变换函数的输入值落入对输入比较敏感的区域,以此避免梯度消失问题。(如下图,加入激活函数后,可能会使很多的数据进入饱和区(即当x大于20之后,其梯度几乎为0))

        Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第1张图片

    • 添加BN的原因
      • 因为添加的激活函数(非线性函数),会逐渐将隐含层的输出映射到激活函数的饱和区,从而慢慢使得数据传不到后面的层,即出现梯度消失的问题
    • BN添加的位置
      • 激活函数之前
    • BN算法
      • BN在batch的维度上norm,归一化维度为[N,H,W],对batch中对应的channel归一化,反标准化是为了,抵消不是最优的情况,即有的时候归一化可能会破坏原来的数据分布,两个参数是可以学习的参数

        Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第2张图片

      • BN的代码实现,其中x为(N,C*H*W)
        • mu = np.mean(x,axis=0)
        • sigma2 = np.var(x,axis=0)
        • x_hat = (x-mu)/np.sqrt(sigma2+eps)
        • out = gamma*x_hat + beta
  • BN、LN、IN、GN的异同
    • 从左到右依次是BN,LN,IN,GN

      Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第3张图片

    • BN是在batch的维度上归一化,即对整个batch内的对应的通道归一化,即依赖于batch size,当batchsize很小时,归一化效果不好
    • LN是在channel上归一化(即针对单个训练样本进行,不依赖于其他数据),即对同一个feature map的所有的通道归一化,不依赖与batchsize,但 LN 的处理可能会降低模型的表达能力
    • IN是只对一个feature map的同一个channel内的数据归一化,多用于GAN和style transfer,因为BN的计算是要受其他样本影响的,由于每个batch的均值和标准差不稳定,对于单个数据而言,相对于是引入了噪声,而BN获得的整体信息对这两种任务没有什么效果。
    • GN是对一个feature map的所有通道进行分组,对属于一组的 通道内的所有数据进行归一化。GN介于LN和IN之间,其首先将channel分为许多组(group),对每一组做归一化,及先将feature的维度由[N, C, H, W]reshape为[N*G,C//G , H, W],归一化的维度为[C//G , H, W]
  • GN
    • Group Normalization(GN)是针对Batch Normalization(BN)在batch size较小时错误率较高而提出的改进算法,因为BN层的计算结果依赖当前batch的数据,当batch size较小时(比如2、4这样),该batch数据的均值和方差的代表性较差,因此对最后的结果影响也较大。(研究意义:在训练大型网络和将特征转移到计算机视觉任务中(包括检测、分割和视频),内存消耗限制了只能使用小批量的BN。真的用的到嘛??)
    • 如果batchsize可以设的大的话,BN应该是要比GN好一些(如下图),GN比BN的速度要慢一写,因为多了reshape的过程
    • Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第4张图片

    • 注意:
      •  第一,使用ImageNet的预训练网络的时候,要frozenBN层,不然结果反而会劣化,而GN不会有这个问题。保持特征网络的BNfrozen,只在Head部分使用GN会提升效果,但是如果把backbone也换成GN预训练的,效果会更好。
      • 第二,使用BN的准确率模型性能已经无法随着迭代次数增加的时候,GN反而可能会随着迭代次数的增加性能有一定的上升。
      • 第三,不使用预训练模型,GN仍然可以达到compared的性能,但是BN会出现结果的劣化
      • ...
  • SN(Switchable Normalization)
    • SN是一种能够有效适应不同任务地归一化方式
    • 效果

      Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第5张图片

    • SN的计算公式:(SN增加了6个控制参数,相比于BN而言,还增加了LN、IN的计算)

      Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第6张图片

      Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第7张图片

      Group Normalization(BN、LN、IN、GN)& Switchable Normalization & Weight Standardization_第8张图片

    • 注意:
      • minibatch越小,SN中BN的权重系数越小,IN和LN的权重系数则越大;
      • minibatch越大,SN中BN的权重系数越大,IN和LN的权重系数越小。
  • 分析
    • 如果想换的话,需要从头训练(GNpaper中说是从头训能达到不错的效果,但是针对自己的数据集要进行至少一次训练和迁移),或者找大数据集上的预训练模型(受限)
  • 为啥不把所有的数据求均值,方差试一下,有些极端,但感觉可以一试
  • Weight Standardization (太偏理论了)
    • WS+GN在batch size很小的情况下,性能也能超过BN(即使BN的batch size较大时)

 

部分资源来源网络,如有侵权请联系删除

你可能感兴趣的:(计算机视觉,机器学习)