理解Hinton胶囊网络之精华浓缩版,第一部分: 胶囊网络背后的灵感与初衷(Capsule Networks)

David 9 一直想扒一扒Hinton的胶囊网络,老教授两篇论文有些晦涩,但今天发现AI³普及帖不错,只是略显冗长。。所以,精华浓缩版就呼之欲出了O(∩_∩)O~

深度CNN是Hinton老教授10年前就在重点研究的课题,胶囊网络也是Hinton早已思考的内容,所以,

第一:胶囊网络不是空穴来风的新算法,而是基于CNN的缺陷和新需求的改进。

第二,胶囊网络比CNN好在哪里??

首先,CNN牛X之处在于用类似蛮力的海量数据方式,自动把重要的分类特征找到,所以,无论图像是不是完整,我们都有理由相信CNN能够识别图中有没有“米老鼠”这个对象:

不完整的米老鼠拼图
完整的米老鼠拼图

只要CNN看到有象征米老鼠的“耳朵”和“鼻子”, CNN就认定这张图中有“米老鼠”。(哪怕拼图还没完成

当然CNN缺陷是明显的,

1. 它很难有效识别图中位置的关系,下面两张图对CNN来说是同一个人的脸(哪怕人脸鼻子和眼睛是错位的):

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b

即,CNN蛮力的背后不能理解图片的语义(和位置关系)

2. CNN没有空间分层和空间推理的能力。而人类的视觉系统可以轻松对下面的图片举一反三:

来自:https://medium.com/ai%C2%B3-theory-practice-business/understanding-hintons-capsule-networks-part-i-intuition-b4b559d1159b

甚至在人脑中,只需要上图的1到2张图片,就可以推测出其他的图片都是“自由女神像”。而CNN需要各个方向的图片进行类似“蛮力”的训练,才能最后达到很好的准确率。

事实上,CNN对于相对位置关系, 是有临时解决方案的:

Max pooling层,或者说pooling层

pooling池化层把邻近区域的特征像素连成一片,变成单个更高层的特征,这就导致了信息丢失(虽然这确实能训练出高层特征间的一些关系)。

Hinton老爷子也说:“max pooling在CNN中这么有效,简直是一个可怕的事情。”

所以Hinton觉得是该把图像中元素位置关系小数据学习提上机器视觉日程了 (因为我们人类根本不用像CNN那样蛮力学习就能识别未知物体)。因此有了现在的胶囊网络。

在此不由得感慨Hinton老爷子所处的是一个好时代,GPU和硬件的飞速发展使得他的想法终于变成现实,虽然胶囊网络目前的代码实现并不快,需要较大计算量,但是相信只要胶囊网络证明自身的价值,提升计算速度在未来不是问题,当然,也相信读者看了这篇文章,了解了胶囊网络的优势,知道该不该用这个网络一试身手:

https://github.com/llSourcell/capsule_networks

 

参考文献:

  1. Understanding Hinton’s Capsule Networks. Part I: Intuition
  2. https://arxiv.org/pdf/1710.09829.pdf

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

《理解Hinton胶囊网络之精华浓缩版,第一部分: 胶囊网络背后的灵感与初衷(Capsule Networks)》上有6条评论

  1. 有两个小疑问想请教一下:
    1、原文中说CNN“很难有效识别图中位置的关系”,不过我感觉CNN应该也会识别图中位置的关系吧?比如错位的那张图,实际对应到了不同neuron,CNN真的会当作同一张图片吗,不同max pooling 而用多个卷积层卷积的话,感觉似乎也会识别到位置关系?
    2、原文说“CNN没有空间分层和空间推理的能力。而人类的视觉系统可以轻松对下面的图片举一反三”,我个人理解,人类的视觉系统能够轻松举一反三,同样是因为从小时候到长大从不同角度看了很多三维对应到二维的信息,学习了这个过程。当然,CNN确实缺乏快速获得空间推理的能力。我个人只是有点怀疑把人类多年学习得到的一些经验强加到网络上是不是有种揠苗助长,重新回归到早期规则抽取的方法的感觉哈哈。

    博主的一系列文章对于我们新入门的新手帮助很大,不知道为啥没有多少留言~

    1. 如果实际只用卷积(没有pooling层)确实会对应不同的neuron,但是卷积操作你知道是连续的滑动(只关注局部连续区域),所以我觉得很难照顾到全局,所以那张错位图我觉得很可能全局上照顾不到(但是我也没实验过)。
      哈哈第2个问题我觉得人类从小到大的训练确实是有帮助的。但是我认为,现阶段机器视觉把2D图就当做2D图训练很可能是一个错误,因为我们人类看一张照片,不自觉地就想到3D的场景,我们人脑的视觉空间应该是在3D维度的,这个点未来也许应该把握一下(也许是视觉语义的关键点)。
      为啥没多少留言,哈哈,也许我的粉丝都比较懒吧,光顾着看文章了。。。

  2. 最近在GitHub上看见一个使用胶囊网络的程序,也查看了论文,但是没能理解胶囊网络的原理。现看博主博客,瞬间理解了CNN和胶囊网络。
    各位都是高手啊,CV的发展路途还很遥远啊。
    致敬高段位的学习者!

发表评论

电子邮件地址不会被公开。 必填项已用*标注