深度学习: pooling (池化 / 降采样)

深度学习: pooling (池化 / 降采样)

在知乎上面看到一个关于池化的神解释,摘来:

池化=涨水
卷积的目的是为了得到物体的边缘形状

可以想象水要了解山立体的形状
水位低时得出山脚的形状
水位中等时得出山腰的形状
水位高时得出山顶的形状

三点就可以大致描出山的简笔画

池化的过程=升高水位(扩大矩阵网格)
卷积的过程是区分哪里是水,哪里是山
  •  

加上一点个人理解:

对于网络结构而言,上面的层看下面的层经过pooling后传上来的特征图,就好像在太空上俯瞰地球,看到的只有山脊和雪峰。这即是对特征进行宏观上的进一步抽象。

那么为什么需要 进行抽象 呢?

因为:经过池化后,得到的是 概要统计特征 。它们不仅 具有低得多的维度 (相比使用所有提取得到的特征),同时还会 改善结果(不容易过拟合) 。

max_pooling: 夜晚的地球俯瞰图,灯光耀眼的穿透性让人们只注意到最max的部分,产生亮光区域被放大的视觉错觉。故而 max_pooling 对较抽象一点的特征(如纹理)提取更好。
深度学习: pooling (池化 / 降采样)

average_pooling: 白天的地球俯瞰图,幅员辽阔的地球表面,仿佛被经过了二次插值的缩小,所有看到的都是像素点取平均的结果。故而 average_pooling 对较形象的特征(如背景信息)保留更好。
深度学习: pooling (池化 / 降采样)

BP

CNN中一些特殊环节的反向传播

max_pooling的反向传播

把梯度直接传给前一层最max的像素,其余像素为0。

深度学习: pooling (池化 / 降采样)

avg_pooling的反向传播

根据映射关系,把梯度均分成n份传给前一层。

深度学习: pooling (池化 / 降采样)

Thinking

选用 max_pooling 还是 average_pooling ,要看需要识别的图像细节特征情况。知乎上说 二者差异不会超过 2% ,这个我深表质疑。

相比之下,个人感觉 max_pooling 是比 average_pooling 更抽象化的操作,因此可以抽象出更高级一点的特征。

由于pooling太过粗暴,操作复杂,目前业界已经逐渐放弃了对pooling的使用。替代方案 如下:

  • 采用 Global Pooling 以简化计算;

  • 增大conv的 stride 以免去附加的pooling操作。


[1] CNN中一些特殊环节的反向传播
[2] 深度学习cnn中,怎么理解图像进行池化(pooling)后的平移不变性?

上一篇:【AGC009E】Eternal Average


下一篇:聊聊人像抠图背后的算法技术