convnet中池化层和归一化层的顺序

Chi*_*yen 5 conv-neural-network tensorflow

我正在查看CIFAR-10 上 ORC 的 TensorFlow 实现,我注意到在第一个 convnet 层之后,它们进行池化,然后是标准化,但是在第二层之后,它们进行标准化,然后是池化。

我只是想知道这背后的基本原理是什么,以及关于何时/为什么我们应该选择在池之前做规范的任何提示将不胜感激。谢谢!

gol*_*enk 14

应该首先进行池化,然后进行标准化。

问题中的原始代码链接不再有效,但我假设所指的标准化是批量标准化。不过,主要思想可能也适用于其他标准化。正如批量归一化作者在介绍批量归一化的论文中所指出的,主要目的之一是“归一化层输入”。这个想法的简化版本是:如果每一层的输入都有一个良好、可靠的值分布,那么网络可以更容易地训练。将标准化放在第二位可以实现这种情况。

作为一个具体的例子,我们可以考虑激活[0, 99, 99, 100]。为了简单起见,将使用 0-1 标准化。将使用内核 2 的最大池化。如果首先对这些值进行归一化,我们会得到[0, 0.99, 0.99, 1]。然后汇集给出[0.99, 1]. 这不会为下一层提供良好的输入分布。如果我们先池化,我们会得到[99, 100]。然后归一化给出[0, 1]. 这意味着我们可以控制下一层的输入分布,以达到我们想要的效果,从而最好地促进训练。


Kuy*_*nas 0

标准化只是标准化。归一化后,最大值仍然是所有值中的最大值。

所以归一化->池化或池化->归一化结果是相同的。

  • 这是不正确的(假设归一化基于层的所有激活)。最大值的位置相同,但结果值不同。例如,我们可以考虑 0-1 归一化和最大池化 2。然后对于激活“[0, 1, 1, 2]”,第一个池化将给出“[1, 2]”,然后归一化将给出“[ 0, 1]`。如果我们首先标准化,我们会得到“[0, 0.5, 0.5, 1]”,然后池化将得到“[0.5, 1]”。 (6认同)