默认情况下,Batch Norm 是否有点随机?

数据挖掘 反向传播 批量标准化
2022-02-17 22:45:37

使用全批次梯度下降、堆叠 100 层并使用 alpha 0.0001 会导致误差稳步下降。

但是,在我实施 Batch Norm 之后,同样的情况会导致波动。我的实现已经过几个人的验证,所以现在我想知道 - 为什么批处理规范会添加这种随机性效应?

事实上,在随机性变得非常明显且难以控制之前,我不再能够堆叠 100+ 层,只能堆叠大约 10 层。


更有趣的是——它似乎随着学习率的降低而变得更糟!0.4 很好,0.0001 导致更新更小(如预期)但相对波动更大(让我感到惊讶)。

为什么会这样?

编辑:刚刚尝试了100 层(每层 63 个神经元)它非常嘈杂,但我能够或多或少地稳定地减少错误。如果我将学习率设置为10 (“十”,哈哈!),随机性会降低,如果设置为0.5 ,它只会变得更嘈杂,这非常奇怪

当然,这个学习率是如此之高,以至于错误偶尔会突然达到一个很高的值,但似乎适用于 100 层......

注意 - 我使用的是全批梯度下降,有 50 个元素


编辑:

使用 100 个 LSTM 单元,像柱子一样堆叠在一起。

时间步数为 50。特征大小为 50(lstm 状态的维度为 50),因为我的句子有 50 个不同的字符,每个字符每个时期只遇到一次。

在 50 个时间步之后执行反向传播 使用普通梯度下降,所有花哨的东西,如加速动量或 L2 范数,dropout 都被禁用。

我确信没有错误,但是如果有人能说出为什么 Batch Norm 具有这种随机属性,如果这对人们来说很常见的话。

3个回答

虽然我不是批量归一化方面的专家,但我注意到在论文中它们包含一个常数,ε (ε) 到小批量方差以实现数值稳定性(在本文的归一化步骤中第 3 页)。因此,虽然您的数学可能是正确的并被其他人验证,但实际计算仍然可能是错误的。

这个问题出现在这里底部的解决方案是添加方差裁剪。

并探讨为什么您可能会以较小的学习率看到更多。那可能只是因为您要采取更多步骤才能达到相同的精度,所以这只是数值不稳定性的更多步骤。编辑:我现在意识到,当你说全批次梯度下降时,你的意思是在更新权重之前你正在做整个数据集(只是标准梯度下降)。这意味着使用较小的学习率,您将不得不做更多的步骤......所以我确信这可以解释学习率的差异。

尝试使用广泛使用的库(例如 Keras)而不是您的库提供的 BN 实现来测试您的实现正确性怎么样?如果在此更改之后您得到不同的观察结果,那么您的实现可能在某种程度上与标准的不同

关于学习率,BN 的优点之一是它应该允许使用更高的学习率,因为它应该能够应对可能发生的规模爆炸。

了解有关 NN 架构的更多信息可能会有所帮助

我不一定认为批量归一化一定是随机的,而是与推理阶段相比,批量归一化是如何工作的。您可能知道,在训练阶段,批量归一化取决于小批量。但是,这种依赖性对于推理来说是不可取的,因此取而代之的是所有小批量的移动平均值。

这样做显然会导致问题,因为您的模型推断的内容与训练的内容不同。此外,你的小批量越小,性能越差,因为为小批量计算的不准确性只会越来越复杂。

如果您坚持进行批量规范化阶段,则有助于缓解这种情况的方法可能包括实施批量重新规范化设置。