卷积神经网络中池化层和归一化层的顺序问题

10
我正在查看CIFAR-10的ORC的TensorFlow实现,我注意到在第一个卷积层之后,他们进行池化,然后进行归一化,但是在第二层之后,他们进行归一化,然后进行池化。
我想知道这背后的原理是什么,以及何时/为什么应该选择在池化前进行规范化。非常感谢您的帮助!
2个回答

14
应该先进行池化,然后才是归一化。
虽然问题中原始代码链接已经失效,但我认为所提到的归一化是指批归一化。不过,这个主要思想可能也适用于其他归一化方法。正如在介绍批归一化的论文中所指出的,批归一化的主要目的之一是“归一化层输入”。简化版的思想是:如果每个层的输入具有良好、可靠的数值分布,网络便可以更容易地训练。将归一化放在第二位可以实现这一点。
作为一个具体的例子,我们可以考虑激活函数[0, 99, 99, 100]。为了保持简单,使用0-1归一化和核大小为2的最大池化。如果首先对数值进行归一化,就会得到[0, 0.99, 0.99, 1]。然后进行池化得到[0.99, 1]。这并不能提供下一层需要的良好的输入分布。如果我们先进行池化,再进行归一化,就会得到[99, 100]。然后进行归一化得到[0, 1]。这意味着我们可以控制输入到下一层的分布,使其最有利于训练。

0

规范化只是规范化。规范化后,最大值仍然是所有值中的最大值。

因此,规范化 -> 池化或池化 -> 规范化的结果相同。


6
假设归一化是基于一个层中的所有激活值,那么这个说法是不正确的。最大值的位置相同,但结果不同。例如,我们可以考虑一个0-1归一化和最大池化为2的情况。对于激活值[0, 1, 1, 2],第一次池化会得到[1, 2],然后归一化会得到[0, 1]。如果我们先进行归一化,则会得到[0, 0.5, 0.5, 1],然后进行池化会得到[0.5, 1] - golmschenk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接