池化层或卷积层之后的激活函数?

Activation function after pooling layer or convolutional layer?

这些链接的理论表明,卷积网络的阶数是:Convolutional Layer - Non-linear Activation - Pooling Layer

  1. Neural networks and deep learning (equation (125)
  2. Deep learning book (page 304, 1st paragraph)
  3. Lenet (the equation)
  4. The source in this headline

但是,在这些网站的最后一次实施中,它表示顺序是:Convolutional Layer - Pooling Layer - Non-linear Activation

  1. network3.py
  2. The sourcecode, LeNetConvPoolLayer class

我也试过探索Conv2D操作语法,但是没有激活函数,它只是与翻转内核的卷积。谁能帮我解释一下为什么会这样?

好吧,最大池化和单调递增的非线性关系。这意味着对于任何输入,MaxPool(Relu(x)) = Relu(MaxPool(x))。所以在那种情况下结果是一样的。因此,技术上最好先通过最大池化进行二次采样,然后再应用非线性(如果代价高昂,例如 sigmoid)。在实践中,它通常以相反的方式完成——它似乎在性能上没有太大变化。

至于 conv2D,它不会翻转内核。它完全实现了卷积的定义。这是一个线性操作,因此您必须在下一步中自己添加非线性,例如theano.tensor.nnet.relu.

在许多论文中人们使用 conv -> pooling -> non-linearity。这并不意味着您不能使用其他订单并获得合理的结果。在最大池化层和 ReLU 的情况下,顺序无关紧要(两者计算相同的东西):

你可以通过记住 ReLU 是一个元素运算和非递减函数来证明这种情况

几乎每个激活函数都会发生同样的事情(其中大部分是非递减的)。但不适用于一般池化层(平均池化)。


尽管这两个订单产生相同的结果,Activation(MaxPool(x)) 通过减少操作量来显着加快速度。对于大小为 k 的池化层,它使用的激活函数调用次数减少 k^2 次。

遗憾的是,这种优化对于 CNN 来说可以忽略不计,因为大部分时间都用于卷积层。

最大池化是一种基于样本的离散化过程。 objective 是对输入表示(图像、隐藏层输出矩阵等)进行下采样,降低其维度并允许对子区域中包含的特征进行假设 binned