批量归一化是否使用跨批次的移动平均值,还是仅在每个批次内使用?如何使用跨批次的移动平均值?

正如标题所述,我想知道每个小批次的归一化是仅基于该小批次自身的统计数据进行的,还是在训练过程中使用了跨小批次的移动平均值/统计数据?

另外,有没有办法强制批量归一化使用跨批次的移动平均值/统计数据?

动机是由于内存限制,我的批次大小非常小。

提前感谢。


回答:

每个小批次的归一化是基于该小批次自身的统计数据进行的。

要使用跨批次的移动平均值/统计数据:批量重归一化是另一种有趣的方法,用于将批量归一化应用于小批次大小。其基本思想源自于在推理过程中,我们不使用单个小批次的统计数据进行批量归一化。相反,我们使用小批次统计数据的移动平均值。这是因为移动平均值相较于单个小批次提供了对真实均值和方差更好的估计。

那么为什么在训练过程中我们不使用移动平均值呢?答案与训练过程中我们需要进行反向传播有关。本质上,当我们使用某些统计数据来归一化数据时,我们也需要通过这些统计数据进行反向传播。如果我们使用来自先前小批次的激活统计数据来归一化数据,我们需要在反向传播时考虑先前层如何影响这些统计数据。如果我们忽略这些交互,我们可能会导致先前层持续增加其激活的幅度,尽管这对损失没有影响。这意味着如果我们使用移动平均值,我们将需要在训练过程中存储所有先前小批次的数据,这是非常昂贵的。

在批量重归一化中,作者提出在考虑先前层对统计数据的影响的同时使用移动平均值。他们的方法在核心上是对带有移动平均值的归一化进行简单重参数化。如果我们将移动平均均值和标准差记为’mu’和’sigma’,小批次均值和标准差记为mu_B和sigma_B,则批量重归一化方程为:

换句话说,我们将批量归一化的激活值乘以r并加上d,其中r和d都是从小批次统计数据和移动平均统计数据计算得出的。这里的技巧是不通过r和d进行反向传播。尽管这意味着我们忽略了先前层对先前小批次的一些影响,但由于小批次统计数据和移动平均统计数据平均应是相同的,因此这种影响平均而言应该会相互抵消。

不幸的是,当批次大小减少时,批量重归一化的性能仍然会下降(尽管不如批量归一化那么严重),这意味着在小批次大小范围内,组归一化仍然略有优势。

请参考此链接以获取澄清

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注