查看原文
其他

【强基固本】各种Normalization

“强基固本,行稳致远”,科学研究离不开理论基础,人工智能学科更是需要数学、物理、神经科学等基础学科提供有力支撑,为了紧扣时代脉搏,我们推出“强基固本”专栏,讲解AI领域的基础知识,为你的科研学习提供助力,夯实理论基础,提升原始创新能力,敬请关注。

来源:知乎—Cassie

地址:https://zhuanlan.zhihu.com/p/379897160

本文用来彻底搞懂各种Normalization的原理
如上图 先来广义解释一下各种Normalization的过程(这里假设input dim = N*C*H*W):
Batch-Normalization: 固定C 在N*H*W数据上做Normalization
Layer-Normalization: 固定N 在C*H*W数据上做Normalization
Instance-Normalization: 同时固定N和C 在H*W数据上做Normalization
Group-Normalization: 固定N取一个group的C 在group_C*H*W维度上做Normalization
本文所有Normaliztion指数据分布服从均值为0方差为1的正太分布
GN中提到视觉任务中一般不采用IN和LN(IN和LN适用于RNN LSTM GAN 注意到Transformer中用到的就是LN 因为Transformer的提出为了替代RNN的) 所以我们这里只详细讲BN和GN。
such as Layer Normalization and Instance Normalization (IN) (Figure 2), that also avoid normalizing along the batch dimension. These methods are effective for training sequential models (RNN/LSTM [49, 22]) or generative models (GANs [15, 27]).



01

Batch-Normalization
https://arxiv.org/pdf/1502.03167.pdf
1.1 BN解决的问题
原文是Reducing Internal Covariate Shift 减少内部协变量位移
三个词分开理解:"Internal"意为“内部的”,是指分布变化发生在神经网络的中间层,当然就是指神经网络的内部;"covariate"意为“协变量”,是指假设中间的的权重是我们关注的自变量,层的输出是因变量,那么层的输入可以理解为协变量;"Shift"意为变化,顾名思义,是指分布在变化。参考:https://zhuanlan.zhihu.com/p/152232203
1.2 BN做法
可以看到这里有两个需要学习的变量  和  , 如果  和  选择合适的值 归一化后的x可以跟原x的分布保持一致。
BN层就是通过控制两个参数来改变输入的数据分布的。
1.3 BN的优势
(1)对每层的输入进行归一化处理,可以加速网络的收敛
Ian Goodfellow这样解释:神经网络的训练过程中,更新了某一层的权重参数,后续每一层网络的输出都可能发生变化,最终引起loss值的变化。所以当没有BN层时,loss的收敛就需要我们精心设计权重的初始化方法和超参数的调节方法以及等待漫长的训练时间;但当我们在各层之间加入了BN层后,某层的输出仅由两个参数γ和β决定,使用梯度下降法优化参数时,优化方法只需要调节两个参数的值来控制各层的输出,而不需要调节各层的全部参数。这样极大地提高了收敛速度,避免了小心翼翼的参数初始化和超参数调节过程。
(2)“在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。"其实这句话的意思是,BN的使用,使得网络在训练时不依靠于某一个样本进行更新或者输出,而是依赖于整个batch size的数据,这样参数不会太依赖于某一个数据,而是一个batch size内的数据,一定程度上防止了过拟合;(这也是bs越大越好的原因,bs越大数据越能接近一个均匀的分布)
(3)某种意义上可以防止梯度消失。比如我的激活函数用sigmoid() 加了BN之后可以及时将数据拉出饱和区 防止多次梯度累乘之后消失的情况;
(4)批处理归一化也对通过网络的梯度流有有益的影响,因为它减少了梯度对参数规模或其初始值的依赖。
1.4 其他知识点
model.eval()会影响BN层和Dropout层。model.train()下 dropout网络层会按照设定的参数p设置保留激活单元的概率(保留概率=p); BN层会继续计算数据的mean和var等参数并更新。model.eval()下 dropout层会让所有的激活单元都通过 BN层会停止计算和更新mean和var,直接使用在训练阶段已经学出的mean和var值。

02

Group-Normalization
https://arxiv.org/abs/1803.08494
2.1 GN解决的问题
GN的提出就是为了解决BN存在的问题——当batch-size急剧下降的时候 模型的性能也严重退化。(其他解决这个问题的方法还有Batch-Renormalization Syn BN等)
作者观察到像经典的特征提取方法SIFT和HOG都涉及到group-wise的normalization。
2.2 GN适用情况
在分类任务中 Layer Normalization 的粒度太粗 Instance Normalization 的粒度又显得过细。因此 Group Normalization 对二者进行了平衡 在一定数目的 channel 上进行归一化(即计算 (C, H, W) 上的均值和方差)当 batch size 小于 8 的时候 通常使用 Group Normalization 代替 Batch Normalization 对训练好的模型 fine-tune 效果还不错。
看下实验结果:
实验结果可以看出GN对batch-size的大小并不敏感、稳定 测试集上得到的结果会稍微低于BN

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“强基固本”历史文章


更多强基固本专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存