# 背景简介
Geoffrey Hinton,深度学习的开创者之一,反向传播等神经网络经典算法的发明人,2017年10月发表了论文,介绍了全新的胶囊网络模型,以及相应的囊间动态路由算法。
论文[https://arxiv.org/pdf/1710.09829.pdf](https://arxiv.org/pdf/1710.09829.pdf)
![](https://ai-studio-static-online.cdn.bcebos.com/7a885d651bd6415bbe6826015723bc14ab1d4c1e9dc542579c2ff03294951a04)
Geoffrey Hinton的胶囊网络(Capsule Network)一经发布就震动了整个人工智能领域,它将卷积神经网络(CNN)的极限提升到一个新的水平。这种网络基于一种被Hinton称为胶囊(capsule)的结构。 此外,他还发表了囊间动态路由算法,用来训练新提出的胶囊网络。让我们一起来看看他的这种网络结构和原理。
Capsule网络结构,不仅可以和卷积神经网络一样用来处理视觉问题,同样也可以应用到其他领域。首先让我们先来关注Capsule网络是如何克服CNN存在的问题的。
用Hinton大佬的话来说,计算机图形学做的是渲染,而计算视觉想做的就是渲染的逆过程。渲染是将三维的图像投影到二维,在数学上意味着给原图乘以一个固定的矩阵。而计算机视觉做的,则是Inverse Graphics,也就是从二维的图像推测出本身的三维结构(输入多个不同位姿的二维图像,就能形成三维对象,是不是和人很接近呢)。为了比较胶囊网络和CNN之间的区别,让我们先看看CNN想做什么,有什么不足。
# 卷积神经网络的不足之处
* CNN(卷积神经网络)的表现是如此优异,以至于深度学习现在如此流行。但是把检测目标的平移,旋转,加上边框等干扰会被CNN识别成其他目标,列如CNN会认为下图的三个R是不同的字母,如果使用暴力方法,把各个角度的样本都囊括进去,这样使得CNN所需的训练集要变得很大,而数据增强技术虽然有用,但提升有限,无法从根本上解决问题。
![](https://ai-studio-static-online.cdn.bcebos.com/ef4e879245f14d33ae1b606cc0bcb04170fe0efbd2054d20a05abc1dae7ebd63)
让我们再考虑一个非常简单的例子。如下图,如果有一张脸,那么它是由哪些特征构成的?椭圆的轮廓、眼睛、鼻子和一个嘴巴。CNN可以轻而易举地检测到这些特征,并且因此认为它检测到的是脸。但是当你用CNN去识别右边这张脸(眼睛和嘴巴位置改变了)依然会得到同样的结果。这是因为CNN识别脸时,仅仅只识别脸的几个特征部分,右图中的确有两个眼睛,一个鼻子,一张嘴,虽然位置不对,但是CNN一旦检测到这些特征,那么识别结果是就是脸, CNN是不会注意子结构之间关系的。
![](https://ai-studio-static-online.cdn.bcebos.com/968b9c6420834a2392e89f4c6fee3a563f7a47e5c41942979eb9171acffea59b)
究其原因是CNN的主要部分是卷积层,用于检测图像像素中的重要特征。较深的层(更接近输入的层)将学习检测诸如边缘和颜色渐变之类的简单特征,而较高的层则将简单特征组合成复杂一些的特征。最后,网络顶部的致密层组合高层特征并输出分类预测。
但凡对CNN有所了解都知道,低层特征通过加权组合成高层特征。不过在这个过程中,组成高层特征的低层特征之间并不存在位姿(平移和旋转)关系。为了解决这个问题,CNN通过后接最大池化层或者后续卷积层。这样不仅能减少参数,还能增加网络神经元的视野,检测更大区域的特征来弥补,如此达到的效果在某些领域甚至能超越人类。但是Hinton自己就表示,卷积神经网络使用的池化操作是一个巨大的错误,它表现地如此优异则是一场灾难。不仅如此还有一个关键问题:卷积神经网络的内部数据表现出它不能形成简单和复杂对象之间的重要空间层级。就如上面的例子,图片中存在两只眼睛、一张嘴和一个鼻子,仅仅这些并不意味着图片中存在一张脸,还需要考虑这些对象彼此之间的朝向关系。
不仅如此,Hinton认为的人与CNN神经网络的最大区别:人类在识别图像的时候,是遵照树形的方式,由上而下展开式的,而CNN则是通过一层层的过滤,将信息一步步由下而上的进行抽象。
![](https://ai-studio-static-online.cdn.bcebos.com/1b02268e441d4d969c9dfaf16dc3121f7834eb75e61f4bfca5ac2120399909e2)
正因为卷积神经网络神经元之间都是平等的,缺少一种内部结构,所以对不同位置、角度下的同一个物品可能做出不同识别,更无法表现子结构之间的关系。CNN中采用的分块和共享权重的方法,以使其够使神经网络学到的特征提取能够在图形出现微小变化时能够应对,而不是针对图形的变化,对应神经网络进行相应的改变,而这正是capsule神经网络所要做的。
# 位姿
Hinton主张,为了正确地分类和辨识对象,保留对象部件间的分层位姿关系很重要。这是让你理解胶囊理论为何如此重要的关键所在,它结合了对象之间的相对关系,在数值上表示为4维位姿矩阵。所以我们要在神经网络中尝试建立位姿关系,在三维图形中,三维对象之间的关系可以用位姿表示,位姿的本质是平移和旋转
当在神经网络里面构建了这些关系之后,模型就能非常容易理解他看到的是以前的东西,只不过是另一个视角而已。从下面的图片中你可以轻易辨识出这是自由女神像,尽管所有的图像显示的角度都不一样。这是因为你脑中的自由女神像的内部表示并不依赖视角。你大概从没有见过和这些一模一样的图片,但你仍然能立刻知道这是自由女神像。
![](https://ai-studio-static-online.cdn.bcebos.com/037eb95ea3dc4e53837579cd3b03756c0c9c1f5e8dd6418da085f14b23b1720d)
但是对CNN而言,这个任务非常难,因为它没有内建对三维空间的理解。而对于胶囊神经网络而言,这个任务要容易得多,因为它显式地建模了这些关系。相比之前最先进的方法,使用CapsNet的论文能够将错误率降低,这是一个巨大的提升。胶囊方法的另一大益处在于,相比CNN需要的数据,它只需要学习一小部分数据,就能达到最先进的效果(Hinton在他关于CNN错误的著名演说中提到了这一点)。 从这个意义上说,胶囊理论实际上更接近人脑的行为。为了学会区分数字,人脑只需要几十个例子,最多几百个例子。而CNN则需要几万个例子才能取得很好的效果。这看起来像是在暴力破解,显然要比我们的大脑低级。
下图为胶囊神经网络的位姿辨别效果
![](https://ai-studio-static-online.cdn.bcebos.com/6899882519aa46b284908b6764a4fecd44f6f09f30964e8d962daab8d9936396)
和其他模型相比,胶囊网络在辨识上一列和下一列的图片属于同一类、仅仅视角不同方面,表现要好很多,相对于CNN这是压倒性的优势
# 胶囊是什么?
让我们先看看Hinton等人的《Transforming Autoencoders》中关于胶囊的描述:
`
人工神经网络不应当追求“神经元”活动中的视角不变性(使用单一的标量输出来总结一个局部池中的重复特征检测器的活动),而应当使用局部的“胶囊”,这些胶囊对其输入执行一些相当复杂的内部计算,然后将这些计算的结果封装成一个包含信息丰富的输出的小向量。每个胶囊学习辨识一个**有限的观察条件和变形范围内隐式定义的视觉实体**,并输出实体在有限范围内存在的概率及一组“实例参数”,实例参数可能包括相对这个视觉实体的隐式定义的典型版本的精确的�