深度学习中的逐层归一化
概述
逐层归一化(Layer-wise Normalization)是将传统机器学习中的数据归一化方法应用到深度神经网络中,对神经网络中隐藏层的输入进行归一化, 从而使得网络更容易训练.
注:这里的逐层归一化方法是指可以应用在深度神经网络中的任何一个中间层. 实际上并不需要对所有层进行归一化。
逐层归一化可以有效提高训练效率的原因有以下几个方面:
-
更好的尺度不变性: 在深度神经网络中, 一个神经层的输入是之前神经层的输出. 给定一个神经层 \(l\), 它之前的神经层\((1, ⋯ ,l-1)\)的参数变化会导致其输入的分布发生较大的改变.当使用随机梯度下降来训练网络时,每次参数更新都会导致该神经层的输入分布发生改变.越高的层,其输入分布会改变得越明显.就像一栋高楼,低楼层发生一个较小的偏移,可能会导致高楼层较大的偏移.从机器学习角度来看,如果一个神经层的输入分布发生了改变,那么其参数需要重新学习,这种现象叫作内部协变量偏移(Internal Covariate Shift).为了缓解这个问题,我们可以对每一个神经层的输入进行归一化操作,使其分布保持稳定.
把每个神经层的输入分布都归一化为标准正态分布,可以使得每个神经层对其输入具有更好的尺度不变性.不论低层的参数如何变化,高层的输入保持相对稳定.另外,尺度不变性可以使得我们更加高效地进行参数初始化以及超参选择.
-
更平滑的优化地形:
- 逐层归一化一方面可以使得大部分神经层的输入处于不饱和区域,从而让梯度变大,避免梯度消失问题;
- 另一方面还可以使得神经网络的优化地形(Optimization Landscape)更加平滑,以及使梯度变得更加稳定,从而允许我们使用更大的学习率, 并提高收敛速度 [Bjorck et al., 2018;Santurkar et al., 2018]
比较常用的逐层归一化方法有批量归一化、层归一化、权重归一化和局部响应归一化。本文中我们主要介绍一下批量归一化和层归一化。
批量归一化
批量归一化(Batch Normalization,BN)方法[Ioffe et al., 2015]是一种有效的逐层归一化方法,可以对神经网络中任意的中间层进行归一化操作.批量归一化的提出动机是为了解决内部协方差偏移问题,但后来的研究者发现其主要优点是归一化会导致更平滑的优化地形 [Santurkar et al.,2018].
对于一个深度神经网络,令第\(