【合集】CV中的各种Normlization汇总

目录

Batch Normalization

LayerNorm

InstanceNorm

GroupNorm

SyncBatchNorm

Batch Group Normalization

 


(此图出自BGN论文)

 

Batch Normalization

论文:《Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift》 2015年

链接: https://arxiv.org/pdf/1502.03167.pdf

BatchNorm2d 是最常见的归一化方法,对于输入格式为NHWC的输入,在每个mini-batch中对每个channel计算均值( E[x] )和方差( Var[x] ),γ和β 是可训练的参数,是Vector类型,Vector长度为C。

目的:解决Internal Covariate Shift(ICS)问题,作用于CNN的forward过程,加速模型收敛速度和效果。

ICS产生原因:深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。

实现方法:https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm2d.html?highlight=norm#torch.nn.BatchNorm2d

需要注意的是,也有 momentum 参数,是在计算 running_mean 和 running_var的时候使用的,具体的计算方法和优化器里使用的momentum是不同的,计算方法如下:

注: 优化器里的momentum实现方法可以看下pytorch的SGD的文档:https://pytorch.org/docs/stable/optim.html?highlight=momentum

缺点:batch size过小会使得BN失效。(cannot be applied to online learning tasks or to extremely large distributed models where the minibatches have to be small)

 

LayerNorm

论文:《 Layer Normalization 》 2016年

链接:https://arxiv.org/pdf/1607.06450.pdf

由于BN效果受batch size大小影响,而且不能应用于RNN(因为RNN的输入长度是变化的),所以本文提出了一个LN的方法。不同于batch size是对一个mini batch内的不同image的相同通道做Normalization,LN是取相同image的不同通道做Normalization,这样Normalization的结果就和batch size大小无关了。

实现方法:https://pytorch.org/docs/stable/generated/torch.nn.LayerNorm.html#torch.nn.LayerNorm

注:从论文里看,LN的提出更像是针对RNN专门设计的一个Norm方法。因为BN不适用于RNN。

 

InstanceNorm

论文:《 Instance Normalization: The Missing Ingredient for Fast Stylization 》2017年

链接https://arxiv.org/pdf/1607.08022.pdf

IN更像是batch size为1的BN,从论文中的实现方式也是可以到这点

论文中的BN:

论文中的IN:

 实现方法https://pytorch.org/docs/stable/generated/torch.nn.InstanceNorm2d.html#torch.nn.InstanceNorm2d

注:从论文看,IN的提出更像是针对GAN专门设计的一个Norm方法。效果优于BN

 

GroupNorm

论文:《 Group Normalization 》 2018年

链接https://arxiv.org/pdf/1803.08494.pdf

GN还是想要解决BN在小batch size情况下表现不好的短板,我觉得下面这张图是GN那篇论文的核心,GN在不同batch size下表现都很稳定(但是batch size大于16的时候表现没有BN好)

相比BN,GN是把一个mini batch下的channel分组,不同组在组内做Normalization(想了下,其实BN在小batch下表现不好主要是数据少,统计的均值和方差可信度低,这时GN把其他channel合到一起,统计的均值和方差就稳定多了)

实现方法https://pytorch.org/docs/stable/generated/torch.nn.GroupNorm.html#torch.nn.GroupNorm

 

SyncBatchNorm

其实是BN在多卡训练时的增强版,比如现在有4个卡,batch size是8,那么每张卡的batch size是2,在计算BN的时候每张卡是单独计算的,就会受到小batch size的影响。SyncBatchNorm 是pytorch 1.1(2019年)开始引入的,效果还可以。

 

Batch Group Normalization

论文:《Batch Group Normalization》(2020年)

链接:https://arxiv.org/pdf/2012.02782.pdf 

观察本文的第一张图,作者发现在超大batch size的时候很多Normalization方法出现了饱和甚至下降

(想想当然会出现饱和了,但是问什么会下降呢?我不认为本论文解决了这个问题,效果咋样等些日子看看反响再补充)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值