论文阅读之Dynamic Routing Between Capsules(2017)

Posted Icy Hunter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文阅读之Dynamic Routing Between Capsules(2017)相关的知识,希望对你有一定的参考价值。

文章目录

前言

capsule network 可以简单理解为将神经网络的标量计算,赋予了方向,变换成了向量进行计算。
标量只有大小之分。
向量不仅有大小,还有方向之分。
应该可以略微感受到这种思路的魔力了。

capsule 主要是能够改进CV里CNN对特征提取。因为对于同类事务,CNN经过maxpooling得到最后的结果基本相同,就相当与是不同的输入得到了相同的输出,这其实是不利于泛化能力提高的。

就比如上面的鸟嘴,如果是传统CNN特征提取,两幅图得出的结果可能是一模一样的,但是如果使用capsule,那么可能二者得出的结果大小相等,方向相反,那么还是有本质区别的,也就是说capsule可以用于解决CNN中图像位置信息缺失的问题。

再比如说:

这两张图片都是表示1,不过方向不同,或者说位置不同,那么得出的v1 向量表示应该是不同的,但是向量的模长可以是相同的,这样就能够使得模型能够拥有更好的泛化性了。

那么如何进行capsule的计算呢?

通过这幅图大概就能略知一二了。

capsule network

capsule的计算的基本过程如下图所示:

这里是只有两个向量进行计算的形式。

首先输入向量v1v2
然后经过W进行特征变换得到u
然后各自乘以一个系数c加起来得到s向量
然后经过squashing的操作,就类似于激活函数一样的作用,在这里还会约束他模长。
值得注意的是,这里的c1+c2 = 1

capsule network有个重要的思想就是动态路由,简单来说就是c并不是固定的,而是动态调整的。
调整思路如下:

这里看输入向量为3的一个capsule,如何进行调整c。
T表示路由动态调整的次数
最开始,初始化b都为0
然后c经过softmax进行得到c,这样保证c为正且和为1
还记得u是输入向量v线性变换后的结果
然后计算s
经过squash后得到a
然后根据计算的结果调整b,从而动态的调整c
这就是动态路由了。

算法的作用应该就是当输入向量和大部分的向量的都不像的时候,那么他的c就会变得越来越小,相当于“排除异己”的一种动态策略。

可以再看一遍图示的计算过程:

调整了两次c,(初始也算一次)


调整了第3次c

这样就得到最终的结果了。

那么对于分类的预测该怎么办呢?

答案是使用向量的模长作为分类标签的置信度,置信度最大的就是最终的类别了。

然后文章里还提到采用重构数据来帮助模型训练,那么重构误差就是对应的数字进行重构误差的传播,例如数字1则就对capsule1的进行误差传播,否则都为0.

然后我们可以看看实验结果:

一个有意思的点就是,当调整向量某些维度时,呈现出的数字确实有微妙的变化:

说明capsule network 确实是有点作用的。

好了我们接下来看看原文讲的算法公式,复盘一下,应该就比较好理解了


这就是动态路由计算。

非线性变化的squashing的定义。


特征经过W变换然后加权求和得到s


c的计算方式

代码也是比较简单:https://github.com/naturomics/CapsNet-Tensorflow

参考

【 深度学习李宏毅 】 Capsule(中文)

https://github.com/naturomics/CapsNet-Tensorflow

Dynamic Routing Between Capsules

以上是关于论文阅读之Dynamic Routing Between Capsules(2017)的主要内容,如果未能解决你的问题,请参考以下文章

论文阅读-ICLR2019-ATTENTION, LEARN TO SOLVE ROUTING PROBLEMS

论文阅读-Hierarchical Cross-Modal Talking Face Generation with Dynamic Pixel-Wise Loss

Spring Dynamic DataSource Routing

IP Routing & Dynamic Routing Protocols

论文阅读:Towards Stable Test-time Adaptation in Dynamic Wild World

论文阅读DGCNN:Dynamic Graph CNN for Learning on Point Clouds