论文笔记之Dynamic Routing Between Capsules

来源:互联网 发布:雕刻机制图软件 编辑:程序博客网 时间:2024/05/22 13:20

相信大家最近被hinton的这篇capsule的论文刷屏了,这篇论文是发表在nips2017上的。

其实capsule这个概念最早是hinton的一篇发表在ICANN 2011上的论文中提出的,不过当初没有引起太大的关注。今年的早些时候,hinton也在多个公开场合表达capsule这样一种想法。

在此,笔者在这里记录下自己对这篇论文的理解。

首先在这里推荐几篇与这篇论文相关的,笔者认为比较有用的资源,可以帮助大家更加深入的理解此文。

1.Understanding Hinton’s Capsule Networks
2.Capsule Networks Explained
3.TensorFlow Pytorch Keras代码实现深度学习大神Hinton NIPS2017 Capsule论文
4.《What is wrong with convolutional neural nets?》by Geoffrey Hinton

一.Motivation

这里主要是总结一下motivation,如果想要更清楚的了解背后的原理,强烈推荐看一下这篇博客Understanding Hinton’s Capsule Networks。
此外这篇博客讲的也不错Capsule Networks Explained。最好都看一下。

1.传统的CNN很难发现特征之间的orientational 和 relative spatial 关系

2.max pool 必然会损失一些有用的信息,需要用其他方法代替

3.Equivariance, not invariance

这些motivation,多多少少都可以从hinton的公开演讲中得出,反而论文中提及的并不是很多。

二.Contribution

1.将原来神经网络中的每个神经元的标量替换成向量,称作capsule
1) 每个capsule(向量)的模长 代表对应特征出现的概率
2) capsule的方向,即里面具体的值代表对应特征的一些实例化参数,such as pose (position, size, orientation), deformation, velocity, albedo, hue, texture

举个例子,下图的两张猫,可以分别用两个capsule(向量)表示,记为c1,c2,因为表示的都是猫这一特征,所以c1,c2的模长相等,但是由于图片中,猫存在的位置不尽相同,因此,c1,c2里的值并不相同。

这里写图片描述

2.用路由选择算法,取代max pooling

三.CapsNet

hinton为了表示capsule的想法是对的,设计了一个包含capsule的网络来进行验证,面对的主要的数据集是MNIST,网络如下图所示:
这里写图片描述

不包括输入输出,总共有三层,第一层是卷积层,用来提取图片的原始特征。第二层和第三次是capsule层。为了让大家具体了解capsnet是如何运转的,在图片中举了一个详细的例子,输入是mnist中一张28*28的图片,其中,图中routing这部分,下面会详细介绍。

四.Routing algorithm

Routing algorithm的主要目的就是计算权重cij,感觉和rnn的attention类似。具体算法如下图所示,其中ui表示上一层capsule i的输出为ui

这里写图片描述

路由的算法,有种kmeans的感觉,先取bij=0进行初始化,然后利用初始化得到的vj,来进一步修正bij,不断迭代逼近。

五.Loss

loss有两部分组成,margin loss和reconstruction loss
1)margin loss,Tc是指示函数,||vc||是capsnet预测输入图片有c类别的概率。

2)reconstruction loss,通过将capsnet在digitcaps输出的10个capsule(每个16-d)中,不是target的capsule的向量值都设为0,然后将这160维的值作为一个MLP的输入,最后得到一个784维向量,与原始输入图片的784维向量做一个平方差求和,作为reconstruction loss。

这里写图片描述

六.Experiments

6.1.Classification:

数据集:MNIST

Baseline(standard CNN):conv1->conv2->conv3->fc->fc->fc->softmax

这里写图片描述

6.2 Reconstruction:

作者宣称digitcaps这一层的表达向量具有一定的去燥功能,比如观察(8,8,8)这一列的input和output,可以看到,output确实相比有input,相似更加清晰,噪声的像素更少。

这里写图片描述

6.3 What the individual dimensions of a capsule represent

对digitcaps层输出的预测(模长最大的那个capsule(16维的向量)),对其16维的每一维分别增加一些扰动,观察重构的结构如何变化,可以看到,同一维的扰动,重构的结果呈一定规律的变化,这说明每一维都表示了这个feature的某些pose。

这里写图片描述

6.4 MultiMnist

做了一个multi-label的实验,说明capsnet不仅能够识别出正确的类别,还能知道图片中不存在哪些类别(*R中体现,具体细节看对应论文章节)
这里写图片描述

7.Conclusion

capsule这个概念有点让人耳目一新,毕竟是hinton,不过感觉路由选择那部分的算法比较trivial,而且并没有很充分的理论证明,这有点不太符合nips的一贯作风。只能说期待大家后续填坑吧。