Python BatchNormalization是跨批次使用移动平均值,还是仅对每个批次使用移动平均值?如何在批次间使用移动平均?

Python BatchNormalization是跨批次使用移动平均值,还是仅对每个批次使用移动平均值?如何在批次间使用移动平均?,python,tensorflow,machine-learning,deep-learning,batch-normalization,Python,Tensorflow,Machine Learning,Deep Learning,Batch Normalization,正如标题所说,我想知道每个小批量标准化是仅基于该小批量自身的统计数据,还是在小批量(培训期间)中使用移动平均值/统计数据 另外,是否有一种方法可以强制批次标准化,以跨批次使用移动平均值/统计数据 其动机是由于内存限制,我的批处理大小非常小 提前感谢。每个小批量标准化仅基于该小批量自身的统计信息.

正如标题所说,我想知道每个小批量标准化是仅基于该小批量自身的统计数据,还是在小批量(培训期间)中使用移动平均值/统计数据

另外,是否有一种方法可以强制批次标准化,以跨批次使用移动平均值/统计数据

其动机是由于内存限制,我的批处理大小非常小


提前感谢。

每个小批量标准化仅基于该小批量自身的统计信息.

要跨批次使用移动平均数/统计数据,请执行以下操作: 批量重整化是将批量规范化应用于小批量的另一种有趣的方法。批重正化背后的基本思想来自这样一个事实,即在推理过程中,我们不使用单个小批量统计数据进行批规范化。相反,我们使用小批量统计的移动平均值。这是因为与单个小批量相比,移动平均提供了对真实均值和方差的更好估计

那我们为什么不在训练中使用移动平均线呢?答案与以下事实有关:在训练期间,我们需要执行反向传播。本质上,当我们使用一些统计数据来规范化数据时,我们也需要通过这些统计数据进行反向传播。如果我们使用以前小批量的激活统计数据来规范化数据,那么我们需要考虑前一层在反向传播期间如何影响这些统计数据。如果我们忽略这些相互作用,我们可能会导致前几层继续增加它们的激活量,即使这对损失没有影响。这意味着,如果我们使用移动平均,我们将需要在培训期间存储所有以前的小批量数据,这太昂贵了

在批量重整化中,作者建议使用移动平均,同时也考虑到前几层对统计的影响。他们的方法的核心是用移动平均值对标准化进行简单的重新参数化。如果我们将移动平均值和标准偏差表示为“mu”和“sigma”,将小批量平均值和标准偏差表示为“mu_B”和“sigma_B”,则批量重整化方程为:

换言之,我们将批次标准化激活乘以r和d,其中r和d都是根据小批次统计数据和移动平均统计数据计算的。这里的诀窍是不要通过r和d反向传播。虽然这意味着我们忽略了前几层对前几小批量的一些影响,但由于小批量统计数据和移动平均统计数据的平均值应该相同,因此这一总体影响的平均值也应该抵消

不幸的是,当批量大小减小时,批量重整化的性能仍然会下降(尽管不如批量规格化那么严重),这意味着在小批量区域中,组规格化仍然有轻微的优势


每个小批量标准化仅基于该小批量自身的统计信息

要跨批次使用移动平均数/统计数据,请执行以下操作: 批量重整化是将批量规范化应用于小批量的另一种有趣的方法。批重正化背后的基本思想来自这样一个事实,即在推理过程中,我们不使用单个小批量统计数据进行批规范化。相反,我们使用小批量统计的移动平均值。这是因为与单个小批量相比,移动平均提供了对真实均值和方差的更好估计

那我们为什么不在训练中使用移动平均线呢?答案与以下事实有关:在训练期间,我们需要执行反向传播。本质上,当我们使用一些统计数据来规范化数据时,我们也需要通过这些统计数据进行反向传播。如果我们使用以前小批量的激活统计数据来规范化数据,那么我们需要考虑前一层在反向传播期间如何影响这些统计数据。如果我们忽略这些相互作用,我们可能会导致前几层继续增加它们的激活量,即使这对损失没有影响。这意味着,如果我们使用移动平均,我们将需要在培训期间存储所有以前的小批量数据,这太昂贵了

在批量重整化中,作者建议使用移动平均,同时也考虑到前几层对统计的影响。他们的方法的核心是用移动平均值对标准化进行简单的重新参数化。如果我们将移动平均值和标准偏差表示为“mu”和“sigma”,将小批量平均值和标准偏差表示为“mu_B”和“sigma_B”,则批量重整化方程为:

换言之,我们将批次标准化激活乘以r和d,其中r和d都是根据小批次统计数据和移动平均统计数据计算的。这里的诀窍是不要通过r和d反向传播。虽然这意味着我们忽略了前几层对前几小批量的一些影响,但由于小批量统计数据和移动平均统计数据的平均值应该相同,因此这一总体影响的平均值也应该抵消