Capsule介绍
Hinton在《Dynamic Routing Between Capsules》中提出了capsule,以神经元向量代替了从前的单个神经元节点,以dynamic routing的方式去训练这种全新的神经网络。又在第二篇论文《Matrix Capsules With EM Routing》中以神经元矩阵代替了神经元向量,我们以em routing的方式进行训练。本文分析第一篇capsule论文《Dynamic Routing Between Capsules》。
CNN的工作原理
- 浅层的卷积层会检测一些简单的特征,例如边缘和颜色渐变。
- 更高层就会将简单的特征加权合并到更复杂的特征中,在这种设置中,简单特征之间的关系(平移和旋转)构成了更高级的特征。CNN在这里会使用到max pooling,保留重要的特征同时丢弃一些它所认为不重要的特征,增加高层神经元的视野。
- 最后,网络顶部的网络层会结合这些非常高级的特征去做分类预测。
CNN有两个重大的问题:
- CNN只关注要检测的目标是否存在,而不关注这些组件之间的位置和相对的空间关系。如卡戴珊的例子(我并没有黑她,真的没有),CNN判断人脸只需要检测出它是否存在两个眼睛,两个眉毛,一个鼻子和一个嘴唇,现在我们把右眼和嘴巴换个位置,CNN依然认为这是个人。
- CNN对旋转不具备不变性,学习不到3D空间信息。例如下面的自由女神,我们只看自由女神的一张照片,我们可能没有看过其它角度的照片,还是能分辨出这些旋转后的照片都是自由女神,也就是说,图像的内部表征不取决于我们的视角。但是CNN做这个事情很困难,因为它无法理解3D空间。
- 另外,神经网络一般需要学习成千上万个例子。人类学习数字,可能只需要看几十个个例子,最多几百个,就能区别数字。但是CNN需要成千上万个例子才能达到比较好的效果,强制去学习。并且关于前面的旋转不变性,CNN可以通过增强数据的手段去改善,但是这也就需要用到大量的数据集。
虽然max pooling在很多任务上提高了原始CNN的准确率,但是我们也可以看到max pooling丢失了很多有价值的信息,并没有很好地理解内容,比如对畸形脸的判定,之所以测试集上准确率高,是因为我们没有畸形脸的训练数据与测试数据。
因此Hinton认为:max pooling工作得这么好其实是一个大灾难。
The pooling operation used in convolution neural networks is a big mistake and the fact that it works so well is a disaster.
就算你不使用max pooling,传统CNN依然存在这样的关键问题,学习不到简单与复杂对象之间的重要的空间层次特征:
Internal data representation of a convolution neural network does not take into account important spatial hierarchies between simple and complex objects.
所以Capsule尝试去解决这些问题:
- Capsule可以学习到物体之间的位置关系,例如它可以学习到眉毛下面是眼睛,鼻子下面是嘴唇,可以减轻前面的目标组件乱序问题。
- Capsule可以对3D空间的关系进行明确建模,capsule可以学习到上面和下面的图片是同一个类别,只是视图的角度不一样。Capsule可以更好地在神经网络的内部知识表达中建立层次关系。