批量归一化在本文中被描述为对具有比例和移位变量的激活函数的输入进行归一化 和 . 这篇论文主要描述了使用sigmoid激活函数,这是有道理的。然而,在我看来,将批量归一化产生的归一化分布的输入输入到 ReLU 激活函数中 如果有风险 不会学习将大部分输入移到 0 之后,这样 ReLU 就不会丢失输入信息。即,如果 ReLU 的输入只是标准归一化,我们将丢失很多低于 0 的信息。是否有任何保证或初始化这将保证我们不会丢失这些信息?我是否遗漏了 BN 和 ReLU 的运作方式?
Batch Normalization 对 ReLU 激活函数有意义吗?
这是 ReLU 激活函数的一个已知问题。它通常被称为“垂死的 ReLU”。给定零边界上的输入,该单元现在几乎总是关闭的。一个封闭的 ReLU 不能更新它的输入参数,一个死的 ReLU 仍然是死的。
解决方案是使用 ReLU 的变体作为激活函数,例如Leaky ReLU、Noisy ReLUs 或 ELUs。
我会说BN在ReLU之后而不是之前,一般来说它应该放在2层之间,以便在成为另一层输入之前标准化层输出PDF
卷积层处理由 Lin (Conv Operator) + NonLin (eg ReLU) 处理(作为人工神经元处理)组成,像 ReLU 这样的稀疏化 nonlin 会产生一个输出 PDF,该 PDF 作为过滤的结果是非负的,所以之前将它作为下一层输入传递,BN 可以帮助重新规范化它
在批量归一化的第一步中,通过减去平均值,数据以零为中心。如果在此之前有一个偏差项,那么它现在就丢失了。beta 变量的作用是恢复偏置项。只要输入中有偏差项,所有提到的风险都会在没有批量标准化的情况下继续存在。在 ReLU 之前进行偏差初始化的建议方法是将其设置为一个小的正值,例如 0.01,在这种情况下可以对 beta 项进行尝试(尽管不能保证它会有所帮助)。
有关此的更多信息:https ://stackoverflow.com/questions/44883861/initial-bias-values-for-a-neural-network )
撇开偏见的风险不谈,在 ReLU 之前进行批量标准化可以帮助它保持“活力”。如果反向传播大梯度,或者选择大学习率,则权重将收到大更新。碰巧的是,这些更新可能会将 ReLU 的输入向负方向推得太远,以至于 ReLU 死了,永远无法再次触发。在这种情况下,批量归一化是有意义的,因为它会将输入分布的中心推向正方向。在学习过程中,可以通过更新 beta 和 gamma 参数来决定推送量。ReLU 之前还是之后是批量归一化的最佳位置,这是另一个需要讨论的话题:将它放在 ReLU 之后也很有用,因为它可以将数据归零,这也有它的优点,例如