池化层 讨论区

http://zh.diveintodeeplearning.org/chapter_convolutional-neural-networks/pooling.html

最小池化层,哈哈挺有意思的。
filter卷积的过程是勾勒图片最小单元(特征)的过程。其输出值越大,表示该位置越贴近filter所代表的特征。而MaxPooling的过程实在降低特征在图像位置上的精确程度。表示的是在该片区域存在该特征。如果MinPooling的话,岂不是在该区域全部都是该特征?
那么MinPooling也许在做一些特殊的图像分类时会有奇效? 比方碧空无云的蓝天;无疾病、疤痕或色素痣的皮肤;无暇美玉;
使用场景大概相对有限吧。

5赞

这个想法很赞.

确实池化的时间复杂度还是有点高的,那在工程上或者学术上有啥好方法吗,我想到了一个,比如计算2维平均池化的时候,可以先计算一列,然后每次pop掉前边的,再push进来后边的一列,这样似乎可以减少一点重复计算;不过maxpooling有什么好方法吗?

1赞

池化层的前向计算复杂度 c * ( (h - p_h + p_h + s_h) / s_h * (w - p_w + p_w + s_w) / s_w)
作用:最大池化层,增强图片亮度;平均池化层,减少冲击失真,模糊,平滑。

1赞

最小池化层应该是没有意义的,因为等价于最大池化层。

思路:

  1. 令特征图为Xa,在i,j位置上的卷积覆盖区域为Xa_ij,则最小池化结果为argmin(Xa_ij)。

  2. 对特征图Xa做线性变换另 Xb= argmax(Xa) + (-1)* Xa ,即特征图反色。

  3. 此时argmax(Xb_ij) = argmin(Xa_ij)。

  4. 显然,卷积层的解空间包括上述线性变换。

结论: 在模型充分训练的情况下,模型的该卷积层会自动学得对效果提升最明显的最小/最大特征。

初步想法,还没做实验,大家可以试试哈。

从信号传输的角度来看的话,maxpooling是相当于把有用的信息过滤之后输出,而minpooling是把信号中夹杂的噪声作为输出。

2赞

从图像处理的角度来看,如果将一幅二值化的图像作为 输入X的话,那么最大池化层就有点类似于膨胀操作,而最小池化层则对应于腐蚀操作,如果输入的是灰度图,那么平均池化层就有点均值滤波的意思了。

2赞

从后续操作来看,如果激活用relu再使用了最小池化非常可能导致梯度消失模型无法训练吧。我觉得最小池化没有意义,哪怕想提取无关噪声也应该把激活函数一起改了,否则神经元会"死"

2赞

这里的channels参数可以理解为kernel的个数吗,求回复:worried:

kernel的个数,是第0个维度c_o,channel的维度是第1个维度c_i,是不同的

2赞

第一题
⌊(h−k_h+p_h+s_h)/s_h⌋×⌊(w−k_w+p_w+s_w)/s_w⌋ 为 H_o×W_o
算法复杂度主要指时间复杂度和空间复杂度,在这里如果考虑时间复杂度的话,池化层主要计算在输出一个元素的max/avg操作,这种操作共有 H_o×W_o

  1. 对c而言,就拿RGB图像而言,也只是3,不妨假定只是一个常数
  2. max/avg操作,相对于InputSize而言,KernelSize是比较小的,不妨也假定常数级别就可以完成这个操作
  3. H_o×W_o 的话,相对于InputSize而言,其他是可以忽略的,可以认为是O(m*n),m,n是输入的高宽,合适的话可以理解成 O(N^2)
  4. 综上,其结果至少是O(m*n),纠结于算法究竟计算了多少次是没有意义的,只关心特定算法对于特定问题是不是可以接受的
  5. 最后,对于 O(N^2) 的算法,不行看能不能改进下,对于 O(N^3) 及以上的算法是不能忍受的,当然 O(N) 的算法是最好的,工程上一般认为 $O(Nlog(N))$是不错的。
1赞

确实是等价的。(不过,第3点看起来是不相等的)
我举个例子: 作者利用max(corr2d)进行打断位置关系,因为kernel是实现了XOR.其实也可以取反:!XOR,然后取min(corr2d).

想到几个问题:
1.之前 作者提到越后层,其对输入的感受野越大,越能把握大尺寸的特征。如果将kernel加大会不会达到类似效果?优缺点呢?
2.这节点提到的pooling减少对位置敏感与平移不变性有何差异?