正如标题所述,我想知道每个小批次的归一化是仅基于该小批次自身的统计数据进行的,还是在训练过程中使用了跨小批次的移动平均值/统计数据?
另外,有没有办法强制批量归一化使用跨批次的移动平均值/统计数据?
动机是由于内存限制,我的批次大小非常小。
提前感谢。
回答:
每个小批次的归一化是基于该小批次自身的统计数据进行的。
要使用跨批次的移动平均值/统计数据:批量重归一化是另一种有趣的方法,用于将批量归一化应用于小批次大小。其基本思想源自于在推理过程中,我们不使用单个小批次的统计数据进行批量归一化。相反,我们使用小批次统计数据的移动平均值。这是因为移动平均值相较于单个小批次提供了对真实均值和方差更好的估计。
那么为什么在训练过程中我们不使用移动平均值呢?答案与训练过程中我们需要进行反向传播有关。本质上,当我们使用某些统计数据来归一化数据时,我们也需要通过这些统计数据进行反向传播。如果我们使用来自先前小批次的激活统计数据来归一化数据,我们需要在反向传播时考虑先前层如何影响这些统计数据。如果我们忽略这些交互,我们可能会导致先前层持续增加其激活的幅度,尽管这对损失没有影响。这意味着如果我们使用移动平均值,我们将需要在训练过程中存储所有先前小批次的数据,这是非常昂贵的。
在批量重归一化中,作者提出在考虑先前层对统计数据的影响的同时使用移动平均值。他们的方法在核心上是对带有移动平均值的归一化进行简单重参数化。如果我们将移动平均均值和标准差记为’mu’和’sigma’,小批次均值和标准差记为mu_B和sigma_B,则批量重归一化方程为:
换句话说,我们将批量归一化的激活值乘以r并加上d,其中r和d都是从小批次统计数据和移动平均统计数据计算得出的。这里的技巧是不通过r和d进行反向传播。尽管这意味着我们忽略了先前层对先前小批次的一些影响,但由于小批次统计数据和移动平均统计数据平均应是相同的,因此这种影响平均而言应该会相互抵消。
不幸的是,当批次大小减少时,批量重归一化的性能仍然会下降(尽管不如批量归一化那么严重),这意味着在小批次大小范围内,组归一化仍然略有优势。