Dynamic Routing Between Capsules

文章是很久之前读的 最近终于有时间把 hinton 提出的capsule 总结下来

首先说一下 capsules 提出的背景,capsule 提出以前图像识别一直应用的是CNN神经网络并结合pooling的做法,但是这种方法有其特定的弊端,CNN神经网络加上pooling的做法,不能敏感的捕获图片的位置信息 如下图

Dynamic Routing Between Capsules

图像变换前和变换表示图像的向量并没有发生变化,也就神经网络不能对途中2的位置进行区分。

在比如下面这张图中,我们很容易辨认左边的图是一张人脸,右边不是。但是对于CNN神经网络而言,这两张图是一样的。显然这样的结果是不可以接受的。

Dynamic Routing Between Capsules

hinton认为人脑在理解图像时是先将图像进行解构,然后再次遇到图像时,通过大脑内的图像片段去匹配,最后得出这个图像是否原来见过的结论。

Dynamic Routing Between Capsules

对于同样的物体我们可以通过不同的角度得到不同的图像,但是我们仍能辨认出他们是一个物体。

capsule 便可以完成这样的工作

下面进入正题 capsule 的具体工作原理

capule 实际上就是几个神经元组成的一个集合,通过这一个集合来代表一定的抽象后的特征。

Dynamic Routing Between Capsules

这个是论文中的原理图,对于MINST集合来说它存储的是【28,28】像素的图像,先通过kernel为【9,9】的CNN神经网络提取特征变成左二图,之后在通过kernel为【9,9】步长为2的CNN神经网络继续提特征,便得到了中间的那一张图【6,6,256】,也就是论文中提到的说的PrimaryCaps ,论文中定义初级capsule的维度为8。右二图为第二层capsule,这一层的capsule有十六维度共有10个capsule每一个capsule代表一个数字,为了下面记述的方便我们将第一层capsule 记为cap1,第二层capsule 记为cap2。

cap1 和cap2之间是通过【8,16】的矩阵进行变换的。

cap1代表的是低维度的抽象特征,我们希望cap1中凡是可以和图片匹配的capsule权值会更大,为了达到这样的效果hinton团队提出动态路由的概念

Dynamic Routing Between Capsules

开始时每一个capsule 都会设置一个权重,cap1中每一个capsule会对cap2中的capsule进行‘投票’,如果cap1中capsule发现自己与cap2中的某一个capsule匹配那么就会把自己的‘票’也就是权重投给它。最后cap2中的capsule 哪一个权重比较大,也就是得到的票数比较多,哪一个就是图片中的数字。投票的过程会持续好几轮,hinton团队发布的capsule源代码是三轮,每一轮中,与图片匹配的好的cap1 中的capsule 权重都会不断的增大,这一点有点类似于聚类算法 。为了防止权重过大,论文中还提到了squash函数,几轮过后匹配的capsule 权重会接近于1,不匹配的capsule权重会接近于0。