BN,IN,GN,SN 理解感悟

本文介绍了深度学习中常见的归一化技术,包括Batch Norm、Instance Norm、Group Norm以及Summary。BN在解决内部协变量偏移问题时表现出色,但小批量时性能下降。Group Norm作为BN的改进,解决了小批量问题,适用于GPU内存限制的情况。文章总结了四种归一化的区别,并提到GN在循环神经网络和生成模型中的应用。
摘要由CSDN通过智能技术生成

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,港中文团队提出自适配归一化取得突破

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

添加要改颜色的字体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值