归一化(normalization)在很多领域广泛存在。基本来讲,在数学和统计学中,normalization扮演着对数值分布进行调整的角色。在量子物理里,对波函数进行归一化能够得到物体状态的概率分布;在由像素构成的图像处理领域,不同形式的归一化可以改变图像的对比度、亮度信息;在和深度学习紧密相连的神经科学领域,研究者发现normalization是一种十分重要的正则化神经计算方法,初视觉皮层(primary visual cortex)的非线性特征、海马体的级联记忆(associative memory)或与normalization有关系。

本文针对深度学习领域的归一化技术进行简单整理,涉及到的归一化方法包括

  • Local Response Normalization (LRN)
  • Batch Normalization (BN)
  • Layer Normalization (LN)

Local Response Normalization

LRN首次在AlexNet中提出,在当时是为了实现一种叫“侧向抑制”(lateral inhibition)的功能,通俗来讲就是周围神经元的响应值会影响到当前神经元的响应。在NN里“神经元”对应的是“feature map”,因此LRN实现的就是pixel-wise、跨feature map的归一化。

数学表达为
lrn

tensorflow里面的实现是这样的:

1
2
3
sqr_sum[a, b, c, d] =
sum(input[a, b, c, d - depth_radius : d + depth_radius + 1] ** 2)
output = input / (bias + alpha * sqr_sum) ** beta

为便于理解,特意画了下面图示,其中蓝色是feature map,绿色线是归一化的范围:
lrn_visualize
遗憾的是,后来学者们发现LRN在实际模型中发挥的作用不大,因而渐渐淡出主流框架层,取而代之的是下面的Batch Normalization(BN)层。

Batch Normalization

BN是由Google科学家于2015年提出,早在1998年,就有学者提出对网络的输入进行白化(whiten)操作,即将数据进行线性变换使得均值0方差为1并且去相关,可以使网络训练收敛地更快,BN就是借鉴这种思想。不同的是BN在所有的层后都进行白化,这样的好处是避免了相关性随着网络层数的传播出现偏差,从而导致性能受影响,用论文中的术语就是尽力避免Internal Covariate Shift.

算法如下:

bn

紧接着,论文指出,如果单单对某一层的输入进行归一化,有可能会削弱其表达能力,比如对sigmoid的输出进行归一化,结果都落在中间的线性区域,也就丧失了非线性的作用。于是作者引入额外参数gamma和beta, 让BN层可以表达identity变换,保证自相容性,这一点对设计新的网络层具有启发意义。

下面是一些关于BN的特点:

  • BN层是在非线性变化之前加入而不是之后。(有争议)
  • BN层参数个数是activation个数的2倍(每个activation对应一个gamma和beta)
  • BN层是依赖于mini-batch的。
  • BN层对输入缩放保有不变性,因此可以使用更高的学习率。
  • 为便于计算,使用当前batch的均值和方差替代整体数据的均值和方差,全局的均值和方差采用指数移动平均方式更新

为便于理解,特意画了下面图示,横轴是feature map,纵轴代表一个batch中不同example,绿色是归一化范围:
bn_visualize
然而遗憾的是,BN层在RNN中无法直接应用,继而有了下面的Layer Normalization。

Layer Normalization

如前所述,BN虽然有加速计算的效果,然而BN依赖于batch size大小,当batch size过小的时候,BN层就无法正常工作。Hinton组的博士Jimmy Lei Ba提出了layer normalization。Layer Normalization统计每一层输入之间的统计信息,但与BN不同的是,LN不依赖于minibatch,也能很好的应用于RNN中。

为便于理解,特意画了下面图示,其中蓝色是feature map,绿色线是归一化的范围:
ln_visualize

值得注意的是,论文里指出对于CNN层效果还不是很好,原因在于LN假设不同feature map的贡献是相似的,但是对于CNN,靠近图像边缘和中心的感受野大小是不同的,因而贡献也就不同。

Reference

Carandini, Matteo, and David J. Heeger. “Normalization as a canonical neural computation.” Nature Reviews Neuroscience 13.1 (2012): 51-62.
Krizhevsky, A., Sutskever, I., & Hinton, G. E. (2012). Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems (pp. 1097-1105).
Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167.
Ba, J. L., Kiros, J. R., & Hinton, G. E. (2016). Layer Normalization. arXiv:1607.06450 [Cs, Stat]. Retrieved from http://arxiv.org/abs/1607.06450