胶囊网络笔记

Dynamic Routing Between Capsules

一个Capsule由一组神经元组成的,他们表示的一个矢量代表了某种实体(entity)一般来说是某个物体或是某个物体的一部分的一个实例(instantiation)。矢量大小表示出现的可能性,矢量的方向表示物体的某种feature /parameter。由多层capsule结构构成网络,底层capsule输出通过变换矩阵生成高层capsule。

Capsule如何联系起来?dynamic routing。取代了pooling,pooling过程中丧失了很多位置信息,而这里使用capsule可以将信息从place-coded变为rate-coded

 论文表述感觉还是很抽象,参考那个房子和船的ppt

具体算法

上一层网络的输入矢量是sj,那么先进行非线性变换,使其处于0-1之间,称为squash

那么vj就是上个capsule的输出

输入矢量sj是由上一层胶囊的输出ui(第i个)与构成矩阵Wij相乘后,再加权求和得到

加权系数Cij由迭代得到,所以说是动态路由,迭代方法如下

CapsNet的大致结构就是这样,另外,论文中将CapsNet用在了MNIST中,取得了不错的结果

结构如下

先过一个9x9的卷积层,256个

Primary capsule:使用9x9卷积,步长为2输入,将256层变为8*32

Digicaps:十个16维capsule层,使用全部输入,输出向量的模长就是向量

 

文中又训练了一个网络,使用DigiCaps复原原来的图片,除了判断结果,其他行的矢量均置零,直接用全连接来训,输出784*1

是否表明信息都被保留了?

 

论文中的分析

效果-state of the art

Parameters变少,只有几百万

可解释性:capsule中每一个维度的意义,使用decoder,改变输入中某一维的大小,查看输出结果,发现至少有一维是与粗细相关,还有一些和局部特征有关。

通过评估,认为对于affine变换有较强的鲁棒性(相对)

同时评估了multiMNIST上的结果,因为胶囊寻路是并行的,所以结果会很好

点不明白到底能不能一个像素占两个字中

在其他网络中,有的不能得到比较好的结果,作者认为是因为背景区别太大

作者在文末已经做了总结,不赘述了