测试时的 Batch Norm(Batch Norm at test time)
Batch归一化将你的数据以mini-batch的形式逐一处理,但在测试时,你可能需要对每个样本逐一处理,我们来看一下怎样调整你的网络来做到这一点。
回想一下,在训练时,这些就是用来执行Batch归一化的等式。
在一个mini-batch中,你将mini-batch的z((i))值求和,计算均值,所以这里你只把一个mini-batch中的样本都加起来,我用m来表示这个mini-batch中的样本数量,而不是整个训练集。然后计算方差,再算z_norm((i)),即用均值和标准差来调整,加上ε是为了数值稳定性。̃z是用γ和β再次调整z_norm得到的。
请注意用于调节计算的μ和σ2是在整个mini-batch上进行计算,但是在测试时,你可能不能将一个mini-batch中的64,128或256个样本同时处理,因此你需要用其它方式来得到μ和σ2,而且如果你只有一个样本,一个样本的均值和方差没有意义。
那么实际上,为了将你的神经网络运用于测试,就需要单独估算μ和σ^2,在典型的Batch归一化运用中,你需要用一个指数加权平均来估算,这个平均数涵盖了所有mini-batch,接下来我会具体解释。