3.1.5 批规范化层
批规范化层是2015年Ioffe和Szegedy等人提出的想法,目标是加速神经网络的收敛过程,提高训练过程中的稳定性。深度学习的训练过程始终需要精心调试,比如设置初始化参数、使用较小的学习率等。批规范化层在后面很多实验中被证明非常有效。
如图3-13所示,当没有进行数据批规范化处理时,数据的分布是任意的,那么就会有大量数据处在激活函数的敏感区域外,而如果进行了数据批规范化处理,相对来说数据的分布就比较均衡了。
了解了批规范化的基本思想之后,我们再来了解批规范化的具体处理流程。在用卷积神经网络处理图像数据时,往往是几张图像同时输入网络中进行前向计算,误差也是该批次中所有图像的误差累计起来一起回传。批规范化方法其实就是对一个批次中的数据进行如下归一化处理。
图3-13 数据批规范化与没有批规范化的区别
批规范化处理流程是什么样的呢?先看论文中的描述,如图3-14所示。
图3-14 批规范化处理流程
第1步,获得一个小批次的输入β={x1,…,xm}。可以看出批次大小就是m。
第2步,求这个批次的均值μ和方差σ。
第3步,对所有xi进行标准化处理,得到。这里的ε是一个很小的数,用于避免因分母等于0带来的系统错误。
第4步,对做线性变换,得到输出yi。
在第4步中,γ和β是可学习的。我们获得一个关于y轴对称的分布真的是最符合神经网络训练的吗?没有任何证据能证明这点。事实上,γ和β为输出的线性调整参数,可以让分布曲线压缩或延长一点,上移或下移一点。由于γ和β是可训练的,意味着神经网络会随着训练过程自己挑选一个最适合的分布。如果我们固执地不用γ和β会怎么样呢?那势必会把压力转移到特征提取层,虽然最后的结果依然可观,但训练压力会很大:一边只需要训练两个数,另一边需要训练特征提取层来符合最优分布。显然前者的训练成本更低。
批规范化处理通常用在卷积层之后,激活函数之前。虽然批规范化也不一定用在卷积层之后,但用在激活函数之前是必需的(这样才能发挥它的作用)。
批规范化处理会在训练过程中调整每层网络输出数据的分布,使其更合理地进入激活函数的作用区。激活函数的作用区是指原点附近的区域,梯度弥散率低、区分率高。
批规范化具有加速收敛的特点,这是因为不必训练神经网络适应数据的分布,所以减少了epoch轮数。批规范化完美地使用了激活函数对数据进行修剪,减少了梯度弥散。同时,学习率也可以大一点。