Capsule 综述

轻松开始

深度的神经网络是模仿视觉的,这里先看一些来自这里的例子:
Capsule 综述
你以为她在微笑,其实是难过。因为我们习惯了正着看传递的信息,反面的话就回产生错误。
Capsule 综述
A.B颜色是一样的,因为大脑中进行了阴影部分的增强,导致看着B似乎比A更偏白一些。
Capsule 综述
我们人脑会自动补充一个空白的三角形,而实际上这里是不存在的。
接下来是一个牛逼的例子,Hinton给出两个相同的积木,可以拼成一个四面体,但是怎么做呢?这件事情如果交给MIT的教授,可以这么黑:就是MIT的教授用数学证明了下面的事情不可能发生,然而教授错了。
首先祭出Hinton图
Capsule 综述
然后仔细看看他手里拿了啥:
Capsule 综述
我当时在这里看了很久,具体时间就不说了,总是不断,一直构思不出来,所以在我这里也就直接给出结果,然后解释。
Capsule 综述
返回去看相对简单一些,首先这是一个四面体,仔细看,浅蓝色的部分是一个截面,按照这个截面,刚好可以切开成两个全等的,很简单?是不是?这是从结果推条件,其实想要拼在一起,还是需要花费一定时间的。
另一个例子是关于地图的:下面的地图是什么洲?
Capsule 综述
很多人选择澳洲,是因为我们一般是这样建立坐标系的
Capsule 综述
但是如果换一个坐标系,就会发现这是非洲:
Capsule 综述

进入正题

后面两个例子是关于坐标系的,Hinton关于这个坐标提出了一个猜想:
“物体和观察者之间的关系(比如物体的姿态),应该由一整套**的神经元表示,而不是由单个神经元,或者一组粗编码(coarse-coded,这里意思是指类似一层中,并没有经过精细组织)的神经元表示。只有这样的表示,才能有效表达关于“坐标框架”的先验知识。

而这一整套神经元,Hinton认为就是Capsule。”

论文翻译链接

同变性(Equivariance)和不变性(Invariance)

Hinton 反对 CNN的另外一个理由是,CNN的目标不正确。问题主要集中在 Pooling 方面(我认为可以推广到下采样,因为现在很多CNN用卷积下采样代替Pooling层)。Hinton认为,过去人们对Pooling的看法是能够带来 invariance 的效果,也就是当内容发生很小的变化的时候(以及一些平移旋转),CNN 仍然能够稳定识别对应内容。

但是这个目标并不正确,因为最终我们理想的目标不是为了“识别率”,而是为了得到对内容的良好的表示(representation)。如果我们找到了对内容的良好表示,那么就等于我们“理解”了内容,因为这些内容可以被用来识别,用来进行语义分析,用来构建抽象逻辑,等等等等。而现在的 CNN 却一味地追求识别率,这不是Hinton想要的东西,Hinton想要 “something big”。

Hinton的看法是,我们需要 Equivariance 而不是 Invariance。

所谓 Invariance,是指表示不随变换变化,比如分类结果等等。

Invariance 主要是通过 Pooling 等下采样过程得到的。如果你对训练神经网络有经验,你可能会想到我们在做图像预处理和数据拓增的时候,会把某些图片旋转一些角度,作为新的样本,给神经网络识别。这样CNN能够做到对旋转的 invariance,并且是“直觉上”的invariance,根本不需要像人那样去旋转图片,它直接就“忽视”了旋转,因为我们希望它对旋转invariance。

CNN同样强调对空间的 invariance,也就是对物体的平移之类的不敏感(物体不同的位置不影响它的识别)。这当然极大地提高了识别正确率,但是对于移动的数据(比如视频),或者我们需要检测物体具体的位置的时候,CNN本身很难做,需要一些滑动窗口,或者R-CNN之类的方法,这些方法很反常(几乎肯定在生物学中不存在对应结构),而且极难解释为什么大脑在识别静态图像和观察运动场景等差异很大的视觉功能时,几乎使用同一套视觉系统。

对平移和旋转的 invariance,其实是丢弃了“坐标框架”,Hinton认为这是CNN不能反映“坐标框架”的重要原因。

而 equivariance 不会丢失这些信息,它只是对内容的一种变换。

那么在 Capsule 的框架下,又应该如何体现 equivariance 呢?

Hinton 认为存在两种 equivariance:

位置编码(place-coded):视觉中的内容的位置发生了较大变化,则会由不同的 Capsule 表示其内容。
速率编码(rate-coded):视觉中的内容为位置发生了较小的变化,则会由相同的 Capsule 表示其内容,但是内容有所改变。
并且,两者的联系是,高层的 capsule 有更广的域 (domain),所以低层的 place-coded 信息到高层会变成 rate-coded。

Hinton 假设 Capsule 输出的是 instantiation parameters (实例参数) ,这是一个高维向量:

其模长代表某个实体(某个物体,或者其一部分)出现的概率
其方向/位置代表实体的一般姿态 (generalized pose),包括位置,方向,尺寸,速度,颜色等等
Capsule 的核心观念是,用一组神经元而不是一个来代表一个实体,且仅代表一个实体。

然后通过对底层的 Capsule 做 coincidence filtering (巧合筛分)决定**哪些高层的Capsule 。

代码

先给链接,代码目前还在跑,代码解释等待更新