GN 论文总结

  |     |  
阅读次数:

GN(Group Normalization)解决了在Batch Size太小时BN失效的问题。总结如下:

唐洋的学习心得

介绍GN之前,先回顾下BN。

1. BN的优点
  • BN可以使网络中每层输入数据的分布相对稳定,加速模型的学习速度
  • BN可以使模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定
  • BN可以允许网络使用饱和性激活函数(sigmoid & tanh),缓解梯度消失问题
  • BN具有一定的正则化效果

2. BN的缺点

先不管它应用在什么任务(像素级图片生成)或网络(RNN)上面会有缺陷。

  • 对于限制了Batch Size的任务来说,BN会失效
  • 对于训练时计算的均值和方差,在验证和测试的时候并不适用(如果训练、验证、测试集的分布不同)

3. GN

GN here 抛弃了对Batch Size大小的依赖,是BN的一种替代方法。

Group的思想来自于:AlexNet的group convolutions,MobileNet & Xception 的channel-wise convolutions, ShuffleNet的channle shuffle operation,SIFT、HOG的group wise 金字塔等。

GN示意图

Normalization methods. Each subplot shows a feature map tensor, with N as the batch axis, C as the channel axis, and (H, W) as the spatial axes. The pixels in blue are normalized by the same mean and variance, computed by aggregating the values of these pixels. In rightmost figure, which is a simple case of 2 groups (G = 2) each having 3 channels.

主要步骤:首先将Channels划分为多个groups,再计算每个group内的均值μ和方差σ,以进行归一化。

3.1 如何划分groups?

也就是我上周总结中提到的几何S如何确定。

首先在2D图像中,使用4D向量来表示,(N,C,H,W),N表示batch axis, C表示channel axis,H & W表示height & width axis.

  • BN是在同一个C axis上进行,即计算μ和σ是在(N, H, W)axes.
  • LN (layer)是在同一个N axis上进行,即计算μ和σ是在(C, H, W) axes.
  • IN (Instance)是在同一个N axis和C axis上进行,即计算μ和σ是在(H,W) axes.
  • GN也是在同一个N axis 和C axis上进行,计算μ和σ是在(H,W) axes和C/G channels.

GN计算公式是原文的公式1(也是其他几种Normalization的方法的计算公式,只是集合S的确定方式不同),其中μ和σ如原文公式2所示,确定集合S的公式如公式7所示。

GN公式中(原文公式7),G表示分组数量(默认32),C/G表示每组的通道数量,计算示意图如上图中的最右边,例子中G=2,每组的channels=3.

3.2 代码实现(tf)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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, G, H, W = x.shape
x = tf.reshape(x, [N, G, C//G, H, W])

# [2,3,4]表示 G,H,W axes
mean, var = tf.nn.moments(x, [2,3,4], keep_dim=True)
x = (x - mean) / tf.sqrt(var + eps)

x = tf.reshape(x, [N, C, H, W])

return x * gamma + beta

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器