Group Normalization学习笔记

前言

GN(Group Normalization)出自(FAIR)Facebook AI research,希望使用GN代替深度学习里程碑式的工作BN(Batch normalization)。
本文将分三个部分来慢慢解读GN,做研究一般也是这个顺序。

  • What
  • How
  • Why

第一部分 What

GN是一种新的深度学习归一化方式,可以替代BN。

众所周知,BN是深度学习中常使用的归一化方法,在提升训练以及收敛速度上发挥看重要的作用,是深度学习里程碑式的工作。

第二部分 How

Group Normalization学习笔记_第1张图片

  • BN在batch的维度上norm,归一化维度为[N,H,W],对batch中对应的channel归一化;
  • LN避开batch维度,归一化维度为[C,H,W];
  • IN归一化维度为[H,W];
  • GN介于LN与IN之间,其首先将channel分为多组,对每组做归一化。先将feature[N,C.H,W]reshape为[N,G,C//G,H,W],归一化维度为[,C//G,H,W]。
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])
	#对[2,3,4]求均值和方差
    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

第三部分 Why

BN是沿着batch维度进行归一化,其受限于batch size;当batch size很小时,BN会得到不准确的统计估计,会导致模型误差明显增加。一般每块GPU上batch size=32最合适。

但是对于目标检测,语义分割,视频场景等,输入图像比较大,而限于显卡显存的限制,导致无法设置比较大的batch sieze,如Mask R-CNN中,由于图像分辨率较大,batch size只能是1或2。

另一方面,BN在batch维度归一化时,由于batch维度并不是固定的,比如模型训练和测试时的不一致。往往实在训练集上计算均值和方差,而在测试集上直接采用。如果训练集和测试集的数据分布存在差异时,预训练的均值和方差并不能真实反映测试集。

GN的计算与batch size无关,且对于不同的batch size, 精度都比较稳定。另外,GN易于从pre-trained模型进行fine-tuning。

Related

[1] - FAIR何恺明等人提出组归一化:替代批归一化,不受批量大小限制-机器之心

[2] - 超越何恺明等组归一化 Group Normalization,港中文团队提出自适配归一化取得突破

你可能感兴趣的:(深度学习)