这是专栏《AI初识境》的第8篇文章。所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法。

今天来说说深度学习中的池化问题,包含池化的种类,作用机制以及最新的思考。

作者&编辑 | 言有三

1 池化还要不要了

这一次咱们反着来,说说学术界对池化的最新观点。通常我们认为,池化可以增加网络对于平移的不变性,对于网络的泛化能力的提升是非常关键的。不过,到底能起到多大的正向作用,却是被很多人怀疑的。

首先是Hinton,还记得Hinton提出的Capsule Module吧。他认为池化的使用就是一个大错误,而它有效又反而是一个大灾难。池化固然可以提供一些平移和旋转不变性,但是也破坏了图像中的姿态和空间等信息,对检测分割等高级任务有影响,所以才提出胶囊网络(CapsuleNetwork)。至于这个发展的怎么样了,笔者没有关注,但是从大佬敢于革自己的“本命”这一点,就说明这个问题确实有点严重。

Hinton虽然指出了pooling的坏影响,但是无法否定其好处,那么池化是不是真的能够提升网络的泛化能力呢?

首先站出来好好回答这个问题的是斯坦福大学Eric Kauderer-Abrams的研究【1】,它们通过一个平移敏感图来进行研究。

这个平移敏感图长下面这样,它评估的就是一个网络的输出对于输入的平移的敏感度。

上面这个图是这么算的,首先用原图计算预测特征分数,然后用平移过的图计算预测特征分数,最后计算两者的归一化分数,越亮说明越相关。x和y分别就是偏移量,可以看到x,y都接近0的时候越亮,说明越相关,然后就随着距离的增强而降低。

这就是说平移越大之后,对性能的影响越大,毕竟一个网络不可能拥有完全的平移不变性。

在这个基础上,他们就做实验了,结果如下,c表示卷积,p表示pooling,aug表示数据增强,所以这里就是比较pooling和aug对性能的影响,结果表明池化不池化的,好像没有什么用,而数据增强做不做得好,才是关键。结果说明CNN本身没什么平移不变性,是靠数据学来的。

上面做了实验,但是没有更深层次地分析,为什么池化就没有用了呢,这可是违反我们的常识的。

DeepMind的研究【2】给出了一个比较有说服力的解答,实验的设置差不多,使用非池化和各种池化的网络结构。

总之结论就是:看上面的4个图。(a) 刚开始的时候池化确实有利于提高抗变形能力。(b) 不管池化不池化,模型最后学习完都能获得同样的抗变形能力。(c) 初始化的时候不同的池化方法是有差异的。(d) 学习完之后不管什么池化方法效果都差不多。

那总得有个理由吧?他们给出的理由是卷积核本身参数越平滑才越能提高对平移的稳定性,文中在卷积操作后面串接平滑操作,实验对比如下。

这也没毛病对吧,卷积核都平滑了,当然就没有那么敏感了。

暂且先总结一下吧:池化什么的不重要了,搞数据增强才是正道。


2 什么是池化

上面都这么说了,接下来说池化略有点尴尬,但是作为知识体系的重要一环,还是有必要讲述。


pooling,小名池化,思想来自于视觉机制,是对信息进行抽象的过程。

上图就是一个池化的示意图,用了一个10*10的卷积核,对20*20的图像分块不重叠的进行了池化,池化之后featuremap为2*2的大小。

pooling有什么用呢?或者说为什么需要pooling呢?原因有几个:

1、增大感受野

所谓感受野,即一个像素对应回原图的区域大小,假如没有pooling,一个3*3,步长为1的卷积,那么输出的一个像素的感受野就是3*3的区域,再加一个stride=1的3*3卷积,则感受野为5*5。

假如我们在每一个卷积中间加上3*3的pooling呢?很明显感受野迅速增大,这就是pooling的一大用处。感受野的增加对于模型的能力的提升是必要的,正所谓“一叶障目则不见泰山也”。

2、平移不变性

我们希望目标的些许位置的移动,能得到相同的结果。因为pooling不断地抽象了区域的特征而不关心位置,所以pooling一定程度上增加了平移不变性。

3、降低优化难度和参数

我们可以用步长大于1的卷积来替代池化,但是池化每个特征通道单独做降采样,与基于卷积的降采样相比,不需要参数,更容易优化。全局池化更是可以大大降低模型的参数量和优化工作量。

3 池化有哪些

1、平均池化和最大池化

这是我们最熟悉的,通常认为如果选取区域均值(mean pooling),往往能保留整体数据的特征,较好的突出背景信息;如果选取区域最大值(max pooling),则能更好保留纹理特征。

2、stochastic pooling/mixed pooling

stochastic pooling对feature map中的元素按照其概率值大小随机选择,元素被选中的概率与其数值大小正相关,这就是一种正则化的操作了。mixed pooling就是在max/average pooling中进行随机选择。

3、Data Driven/Detail-Preserving Pooling

上面的这些方法都是手动设计,而现在深度学习各个领域其实都是往自动化的方向发展。

我们前面也说过,从激活函数到归一化都开始研究数据驱动的方案,池化也是如此,每一张图片都可以学习到最适合自己的池化方式。

此外还有一些变种如weighted max pooling,Lp pooling,generalization max pooling就不再提了,还有global pooling。

4 总结

带步长的卷积虽然不需要池化,却没有了灵活的激活机制。平均池化稳扎稳打,却丢失了细节。最大池化克服了平均池化的缺点,却打断了梯度回传。

最终发现,池化也还是要学的好,所谓随机应变,盖莫如此。另外,如何选择好用于池化的区域,也是一门学问。

参考文献

[1] Kaudererabrams E. Quantifying Translation-Invariance in Convolutional Neural Networks.[J]. arXiv: Computer Vision and Pattern Recognition, 2018.

[2] Ruderman A, Rabinowitz N C, Morcos A S, et al. Pooling is neither necessary nor sufficient for appropriate deformation stability in CNNs[J]. arXiv: Computer Vision and Pattern Recognition, 2018.

2019年有三AI培养计划已经开始,一个季度一期。

2019年有三AI“春季”划,给我一个荣耀,还你一生荣耀

总结

深度学习理论部分快要结束了,看似平常朗朗上口的东西,其实背后蕴含着非常多可以思考的东西,唯有多想多做才能不浮于表面。

下一期预告:深度学习中的正则化

转载文章请后台联系

侵权必究

更多请关注知乎专栏《有三AI学院》

往期精选

  • 【AI初识境】激活函数:从人工设计到自动搜索

  • 【AI初识境】什么是深度学习成功的开始?参数初始化

  • 【AI初识境】深度学习模型中的Normalization,你懂了多少?

  • 【AI初识境】为了围剿SGD大家这些年想过的那十几招

  • 创业第一天,有三AI扔出了深度学习的150多篇文章和10多个专栏

想要变身”AI专家“,就戳戳手指关注我们吧

别忘了点“好看”支持作者噢  ???

【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?相关推荐

  1. 「AI初识境」被Hinton,DeepMind和斯坦福嫌弃的池化到底是什么?

    https://www.toutiao.com/a6694763453334159880/ 这是专栏<AI初识境>的第8篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  2. 【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?​​​​​​​

    文章首发于微信公众号<有三AI> [AI初识境]被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么? 这是专栏<AI初识境>的第8篇文章.所谓初识,就是对相关技术有 ...

  3. 【AI初识境】深度学习中常用的损失函数有哪些?

    这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...

  4. 【AI初识境】给深度学习新手开始项目时的10条建议

    这是专栏<AI初识境>的第12篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑. 今 ...

  5. 【AI初识境】给深度学习新手做项目的10个建议

    这是专栏<AI初识境>的第12篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 在成为合格的深度学习算法工程师,尤其是工业界能够实战的调参选手之前,总会踏足很多的坑. 今 ...

  6. 【AI初识境】深度学习模型评估,从图像分类到生成模型

    文章首发于微信公众号<有三AI> [AI初识境]深度学习模型评估,从图像分类到生成模型 这是<AI初识境>第10篇,这次我们说说深度学习模型常用的评价指标.所谓初识,就是对相关 ...

  7. 【AI初识境】如何增加深度学习模型的泛化能力​​​​​​​

    文章首发于微信公众号<有三AI> [AI初识境]如何增加深度学习模型的泛化能力 这是专栏<AI初识境>的第9篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. ...

  8. 【AI初识境】如何增加深度学习模型的泛化能力

    这是专栏<AI初识境>的第9篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中的generalization问题,也就是泛化和正则化有关的内容. 作者 ...

  9. 【AI初识境】为了围剿SGD大家这些年想过的那十几招

    文章首发于微信公众号<有三AI> [AI初识境]为了围剿SGD大家这些年想过的那十几招 这是<AI初识境>第7篇,这次我们说说常用的优化算法.所谓初识,就是对相关技术有基本了解 ...

最新文章

  1. 零基础入门NLP - 新闻文本分类
  2. ubuntu下Qt Creator使用valgrind检测内存泄漏
  3. 获取浏览器窗口_全面认识区块链浏览器--看穿币圈的蒙蔽与欺骗!
  4. js导入导出总结与实践
  5. windows的几个原则
  6. 【数据库系统概论】考研附加部分重点分析【附加】
  7. Oracle服务器连接
  8. 数据结构与算法-什么是数据结构,什么是数据,什么是抽象数据类型
  9. CSS3图片跳动效果
  10. MP3文件格式说明 (转)
  11. 2021-2027中国游戏开发工具市场现状及未来发展趋势
  12. JS验证邮箱 身份证 VISA 卡[转]
  13. cmd中为什么看不到python安装成功_cmd中运行python怎么切换目录? 怎么查看python中已安装的包...
  14. QuickTime格式解析
  15. 机器学习笔记(十六):多项式回归、拟合程度、模型泛化
  16. CF与OF有什么区别?
  17. msde2000修改服务器名,MSDE2000数据库怎么修改SA口令?
  18. 基于遗传算法自动组卷的实现
  19. 一个人如何完成一整个网站的开发(推荐好文,看完绝对让你回味无穷)
  20. 读后感:写给人生的九封信,愿你的人生淡定从容,繁华似锦

热门文章

  1. 终于当了回up主,来白嫖我历时半年总结的Java思维导图吧!!!
  2. 「实用」微信扫码 - 关注公众号后网站自动登录
  3. Oracle数据库之子查询
  4. 希尔排序(缩小增量排序)(插入排序的优化版) C++代码实现及算法分析 恋上数据结构笔记
  5. 外键为主键可以重复原因
  6. C语言程序流程设计之跳转【程序流程设计】(14)
  7. Java里的线程控制
  8. C++描述的位运算总结
  9. linux 以太网转wifi,LINUX-网络 - (以太网和WIFI无线)
  10. 服务器2012怎么换桌面背景,2012年职称计算机Windows XP:更改桌面背景和颜色