Batch Norm
1. 背景
问题:内部协变量偏移(Internal Covariate Shift):
每一层参数在更新时,会改变下一层输入分布,(参数影响本层的输出),这种改变在网络深层尤为明显
目的:为了使得网络输入分布在训练中保持一致
提出了 BN
2. 原理(掌握公式)
均值
方差
正则化
scale and shift
def Batchnorm_simple_for_train(x, gamma, beta, bn_param):
"""
param:x : 输入数据,设shape(B,L)
param:gama : 缩放因子 γ
param:beta : 平移因子 β
param:bn_param : batchnorm所需要的一些参数
eps : 接近0的数,防止分母出现0
momentum : 动量参数,一般为0.9, 0.99, 0.999
running_mean :滑动平均的方式计算新的均值,训练时计算,为测试数据做准备
running_var : 滑动平均的方式计算新的方差,训练时计算,为测试数据做准备
"""
running_mean = bn_param['running_mean'] #shape = [B]
running_var = bn_param['running_var'] #shape = [B]
results = 0. # 建立一个新的变量
x_mean=x.mean(axis=0) # 计算x的均值
x_var=x.var(axis=0) # 计算方差
x_normalized=(x-x_mean)/np.sqrt(x_var+eps) # 归一化
results = gamma * x_normalized + beta # 缩放平移
running_mean = momentum * running_mean + (1 - momentum) * x_mean
running_var = momentum * running_var + (1 - momentum) * x_var
#记录新的值
bn_param['running_mean'] = running_mean
bn_param['running_var'] = running_var
return results , bn_param
3. 存在问题
当batch较小时(<=16),图像识别率大幅下降
4、优点
学习率不用调参
有正则效果,可代替其他正则方式
因为均值方差是batch的,
Batch Normalization是在batch这个维度上Normalization,
Group Norm
1. 提出背景
BN存在的问题:当batch较小时(<=16),图像识别率大幅下降
原因:
用 batch的均值方差代替训练集的 造成的问题
BN 在进行归一化操作时需要估计训练数据的均值和方差。由于训练数据量很大(ImageNet 有上百万数据),估计这些统计量需要大量的运算。因此,这两个统计量一般是利用一小批数据来估计的。然而,当批量较小时,BN 会导致性能损失。
为什么不用大的 batch ?
很多实际应用中需要训练的图片大小又很大(例如 1000x1000 以上),使得能够放到 GPU 中的图片数量很少(通常小于 2)批量越小,训练过程越不稳定
2. 原理
GN和BN是有很多相似之处的,代码相比较BN改动只有一两行而已
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
总结
BatchNorm:batch方向做归一化,计算NHW的均值
LayerNorm:channel方向做归一化,计算CHW的均值
InstanceNorm:一个channel内做归一化,计算H*W的均值
GroupNorm:先将channel方向分group,然后每个group内做归一化,计算(C//G)HW的均值
GN与LN和IN有关,这两种标准化方法在训练循环(RNN / LSTM)或生成(GAN)模型方面特别成功。
参考
超越何恺明等组归一化 Group Normalization,港中文团队提出自适配归一化取得突破
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体
添加要改颜色的字体