这篇文章介绍深度学习四种主流的规范化, 分别是Batch Normalization(BN[9]), Layer Normalization(LN[7]), Instance Normalization(IN[8])以及Group Normalization(GN[2])。
1. 作用
为啥用Normalization? 这是因为训练深度神经网络会收敛很慢,很有可能发生梯度弥散或者梯度爆炸。用了Normalization可以训练得很快,学习更好。
2. 做法
下面这张图[2]很直观地解释了各种Normalization处理张量的不同之处。
给定一个四维张量x,四维依次代表[batchsize,channel,height,width], 简单起见,表示为(N,C,H,W),上图中,张量的第三个维度以及第四个维度合起来组成了一个维度,方便展示。
BN:可以看到BN是以C为滑动轴,对BHW三个维度求和取平均,所以期望的维度是(1,C,1,1),然后利用期望求出方差。
LN: LN与BN刚好是垂直的位置,是以B为滑动轴,对CHW三个维度求和取平均,期望的维度是(N,1,1,1)。
IN: IN则是LN和BN的交汇,以B和C双轴滑动,对HW两个维度求和取平均,期望的维度是(N,C,1,1)。
GN: GN则是IN和LN的一种折中考虑,对C维度进行了分组,上图中是分成了两组,所以最后期望的维度是(N,2,1,1)。
3. 原理与使用
深度神经网络中的Normalization最先是出现在AlexNet网络中的LRN(local response normalization), 而LRN计算的是像素局部的统计量,对加速收敛没有什么作用。开山加速收敛的Normalization方法是BN,那么它是怎么加速收敛的呢?首先要弄清楚为什么没有BN,收敛会慢,对于一个深层网络来说,会发生梯度弥散, 这样在反向传播更新梯度时,会更新得非常慢,收敛也会变得慢,而BN将原来要变小的activation通过规范化操作,使activation的尺度变大,这样就消除了梯度弥散而导致参数更新慢的影响。
参考:https://blog.csdn.net/weixin_34414650/article/details/94529982
|