批量归一化(batch normalization)能够让较深的神经网络训练变得更加容易。
首先来复习一下标准化的定义:对数据减去均值之后再除以标准差。
标准化处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使得各个特征的分布相近,往往能够训练出更加有效的模型。
对于浅层模型来说,对输入数据进行标准化就已经足够了。但是对于深度网络来说,即使对输入数据标准化,在经过了深层网络之后,数值依然可能会发生剧烈的变化,这种计算数值的不稳定性通常令我们难以训练出有效的深度模型。
因此提出批量归一化。
批量归一化利用小批量上的均值和标准差,不断调整神经网络的中间输出,从而使整个神经网络在各层的中间输出的数值更加稳定。大体上看,批量归一化可以说将深层网络拆分成一个又一个的浅层网络,并对这些浅层网络都进行标准化的过程。
但除此之外,批量归一化还引入了两个可以学习的模型参数,拉伸(scale)参数 和偏移(shift)参数 。
批量归一化一般在全连接层之后(卷积层之后),激活函数之前使用。假设批量归一化的运算符为 。则
其由以下几步得到。先对小批量样本B求均值和方差: