(九)批量归一化
1、引入
对输入数据做了归一化处理,就是将每个特征在所有样本上的值转归一化成均值0方差1。这样我们保证训练数据里数值都同样量级上,从而使得训练的时候数值更加稳定。对于浅层模型来说,通常数据归一化预处理足够有效。输出数值在只经过几个神经层后通常不会出现剧烈变化。但对于深层神经网络来说,情况一般比较复杂。因为每一层里都对输入乘以权重后得到输出。当很多层这样的相乘累计在一起时,一个输出数据较大的改变都可以导致输出产生巨大变化,从而带来不稳定性。
批量归一化层的提出是针对这个情况。它将一个批量里的输入数据进行归一化然后输出。如果我们将批量归一化层放置在网络的各个层之间,那么就可以不断的对中间输出进行调整,从而保证整个网络的中间输出的数值稳定性。
2、批量归一化层
均值和方差
对于数据点 ,对它的每一个特征维进行归一化:
这里ϵ是一个很小的常数保证不除以0。在上面归一化的基础上,批量归一化层引入了两个可以学习的模型参数,拉升参数 γ 和偏移参数 β(通道数是6时候,他们是大小为6的向量)。它们是长为p(这里p是指特征的数目,在图中即使通道数6)的向量,作用在上:
这里是批量归一化层的输出
训练的时候使用较大的批量大小来获取更好的计算性能,这时批量内样本均值和方差的计算都较为准确。但在预测的时候,我们可能使用很小的批量大小,甚至每次我们只对一个样本做预测,这时我们无法得到较为准确的均值和方差。对此,解决方法的训练批量归一化层时候维护一个移动平滑的样本均值和方差,保存起来在预测时使用。