归一化,对原始数据进行线性变换把数据映射到 0~1,
标准化,使得数据服从标准正态分布。
BN
ICS
什么是Internal Covariate Shift?
Batch Normalization的原论文作者给了Internal Covariate Shift一个较规范的定义:在深层网络训练的过程中,由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。
Internal Covariate Shift会带来什么问题?
- 上层网络需要不停调整来适应输入数据分布的变化,导致网络学习速度的降低
-
如何减缓Internal Covariate Shift?
数据规范化
- 使得输入特征分布具有相同的均值与方差。其中 PCA 白化保证了所有特征分布均值为 0,方差为 1;而 ZCA 白化则保证了所有特征分布均值为0,方差相同;
- 去除特征之间的相关性。
BN
track_running_stats=True,eval 模式使用的是滑动平均的统计值
参数
apply scalar scale and bias
- 统计量跟 batch size 有关
-
优势
BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度
- BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
- BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
-
GN,LN和IN
# num_groups = 1, GN = LN
# num_groups = c, GN = IN
def GroupNorm(x, gamma, beta, G, eps=1e−5):
# x: input features with shape [N,C,H,W]
# gamma, beta: scale and offset, with shape [1,C,1,1] # G: number of groups for GN
N, C, H, W = x.shape
x = tf.reshape(x, [N, G, C // G, H, W])
mean, var = tf.nn.moments(x, [2, 3, 4], keep dims=True) x = (x − mean) / tf.sqrt(var + eps)
x = tf.reshape(x, [N, C, H, W])
return x ∗ gamma + beta
LN 参数
apply elementwise scale and bias
-
IN 参数
-
GN 参数
-
SN
结合 BN, IN, LN, 赋予不同的权重,让网络去学