论文笔记之Dynamic Routing Between Capsules

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BVL10101111/article/details/78638170

相信大家最近被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的一贯作风。只能说期待大家后续填坑吧。

猜你喜欢

转载自blog.csdn.net/BVL10101111/article/details/78638170