我是靠谱客的博主 震动哑铃,最近开发中收集的这篇文章主要介绍论文阅读之Dynamic Routing Between Capsules(2017)前言capsule network参考,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • capsule network
  • 参考

前言

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)前言capsule network参考的全部内容,希望文章能够帮你解决论文阅读之Dynamic Routing Between Capsules(2017)前言capsule network参考所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部