这是根据不同作者写的以及我个人的理解做出的总结,只是方便我个人下次阅读,如有侵权,请联系我删除。
论文参考:https://zhuanlan.zhihu.com/p/39296570
论文参考:http://www.sohu.com/a/241640030_395209
代码:https://github.com/switchablenorms/Switchable-Normalization(pytorch)
代码:https://github.com/taki0112/Switchable_Normalization-Tensorflow(tensorflow,这份代码我个人觉得有问题,他应该是能实现,但是并没有采用paper中减少计算量的方法)
我之前写的关于GN的,也有介绍其他三种归一(规范)化方法:https://blog.csdn.net/qq_33266320/article/details/79719858
目前针对不同任务提出的主要的规范化技术包括批量规范化,层规范化,实例规范化,组规范化。该论文(Switchable Normalization(SN))的目的就是为了让网络自己通过学习选择任务所适合的最好的规范化方法。
注:一般的任务所有层都用同一种normalization,SN可以学到不同层用不同的normalization
四种Normalization:
BatchNorm是沿着所有样本的同一个通道计算,它首先应用在图像分类任务中,有助于提高收敛速度和泛化性
Layer Norm是对单个样本的特征进行计算,它首先应用在RNN中,使得RNN的优化更容易
Instance Norm是对每个样本的每个通道计算,首先应用在风格转换任务上,基于它可以解决任意风格的转换的问题
Group Norm与Layer Norm、Instance Norm有些相似,我觉得是两者之间取了个适当的值,也就是把LN比IN多的C分了组,它解决了Batch Norm对于批量大小的依赖问题
https://blog.csdn.net/qq_33266320/article/details/79719858我之前在看GN时候有具体介绍。
SN优点和四种的缺点:
SN相比其他正常化有着独特的优势。
相比于BN对批量大小的依赖较大,特别在较小的批量大时,BN效果会显着下降,SN则对批量大小足够鲁棒,通过动态调节各种归一化的权值,减小BN的影响,使用IN和LN进行互补;
另外针对不同任务,SN可以自适应不同的任务,通过学习选择与任务合适的权值,在不同层也可以使用不同的权值,拓展了单个结构使用同一种标准化的方式。
SN方法:(来源于https://zhuanlan.zhihu.com/p/39296570)
Switchable Normalization(SN)统一了实例归一化Instance Normalization(IN),层归一化Layer Normalization(LN),和批归一化Batch Normalization(BN)的各种操作。假设一个卷积神经网络(CNN)的一个隐含卷积层的输入数据可表示为具有四个维度的特征图, 。这里每个维度分别代表样本数目(minibatch size),通道数目(number of channels),通道的高(height),和通道的宽(width)。假设每一个像素表示为 ,这里 为上述四个维度的下标。SN对 进行归一化操作,并输出归一化后的像素值 。SN的计算公式如下:
上述定义与BN,IN,和LN的定义相似。他们都学习了缩放系数 和偏移系数 。主要的区别在于SN的统计信息(即均值 和方差 ),不像IN只是在一个通道中计算的,也不像LN只是在一个层中计算,而是在一个集合 当中选择合适的归一化方法来加权平均的。这个集合定义为 。 和 则为相应统计量对应的权重系数。下图直观的展示了SN的基本原理
图1 自适配归一化图形解释
图1为SN的直观图形解释。SN中每个样本每个通道( )的均值和方差,由BN、IN、LN三种不同统计方法计算得到的均值和方差共同决定。
在SN中,均值的加权系数 的计算方法如下:
为三个维度统计量对应的参数。为了与网络参数(如卷积核)区分,这些参数称为控制参数。这些控制参数均初始为1,在反向传播时进行优化学习。该计算公式即利用softmax函数对优化参数 进行归一化,计算统计量最终的加权系数 。因此,所有加权系数 的和为1,每个加权系数 的值都在0和1之间。类似的, 可以由另外的三个参数 , ,和 计算得出,且 , 。因此,相对于BN,SN只额外增加了 , , 和 , , 6个控制参数。